jackbella 发表于 2013-8-28 14:23:08

ok6410 led 驱动 +自编测试程序 通过喽


#include <linux/miscdevice.h>#include <linux/delay.h>#include <asm/irq.h>#include <mach/hardware.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/init.h>#include <linux/mm.h>#include <linux/fs.h>#include <linux/types.h>#include <linux/delay.h>#include <linux/moduleparam.h>#include <linux/slab.h>#include <linux/errno.h>#include <linux/ioctl.h>#include <linux/cdev.h>#include <linux/string.h>#include <linux/list.h>#include <linux/pci.h>#include <asm/uaccess.h>#include <asm/atomic.h>#include <asm/unistd.h>#include <mach/map.h>#include <mach/regs-clock.h>#include <mach/regs-gpio.h>#include <plat/gpio-cfg.h>#include <mach/gpio-bank-e.h>#include <mach/gpio-bank-m.h>#define DEVICE_NAME "leds"/*cmd : 0 :open 1: closearg : 0-3   led1 -led4*/static long s3c6410_leds_ioctl(struct file *filp, unsigned int cmd, unsigned long arg){        switch(cmd) {                unsigned tmp;        case 0:        case 1:               if (arg > 3)                {                       return -EINVAL;               }                tmp = readl(S3C64XX_GPMDAT);                            if(cmd==0) //open led                  {                         tmp &= (~(1<<arg));                  }                else//close led                  {                         tmp |= (1<<arg);                  }                writel(tmp,S3C64XX_GPMDAT);                                return 0;        default:                return -EINVAL;        }}static struct file_operations dev_fops = {        .owner                        = THIS_MODULE,        .unlocked_ioctl        = s3c6410_leds_ioctl,};static struct miscdevice misc = {        .minor = MISC_DYNAMIC_MINOR,        .name = DEVICE_NAME,        .fops = &dev_fops,};static int __init dev_init(void){        int ret;             unsigned tmp;       //gpm0-3 pull up        tmp = readl(S3C64XX_GPMPUD);        tmp &= (~0xFF);        tmp |= 0xaa;        writel(tmp,S3C64XX_GPMPUD);        //gpm0-3 output mode        tmp =readl(S3C64XX_GPMCON);        tmp &= (~0xFFFF);        tmp |= 0x1111;        writel(tmp,S3C64XX_GPMCON);                //gpm0-3 output 0why not open the led??        tmp = __raw_readl(S3C64XX_GPMDAT);        tmp |= 0x10;   //low 4bit =0000;         writel(tmp,S3C64XX_GPMDAT);        ret = misc_register(&misc);        return ret;}static void __exit dev_exit(void){        misc_deregister(&misc);}module_init(dev_init);module_exit(dev_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("jack sun");#include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <sys/ioctl.h>#include <time.h>#include <sys/time.h>#define LED_OPEN 0#define LED_CLOSE 1int main(){int fd;   fd = open("/dev/leds", 0);if (fd < 0) {                perror("open device leds error");                exit(1);        }while(1){        ioctl(fd,LED_OPEN,0);//led1 open         ioctl(fd,LED_CLOSE,1);//led2 close        ioctl(fd,LED_OPEN,2);//led3 open         ioctl(fd,LED_CLOSE,3);//led4 close         usleep(1000000);        ioctl(fd,LED_CLOSE,0);//led1 open         ioctl(fd,LED_OPEN,1);//led2 close        ioctl(fd,LED_CLOSE,2);//led3 open         ioctl(fd,LED_OPEN,3);//led4 close         usleep(1000000);}                close(fd);        return 0;}
后台运行:./led_text2 qws&






tonytsui 发表于 2015-7-25 12:28:30

楼主,没有makefile,也可以运行?初学提问
页: [1]
查看完整版本: ok6410 led 驱动 +自编测试程序 通过喽