十大滚球体育app

 

联系十大滚球体育app

联系十大滚球体育app 中山十大滚球体育app推送十大滚球体育app设备科学是有限的大公司 练习人:黄工程师 智能手机: 163邮箱: 電話: 座机: 地此:四川省茂名市小榄镇盛丰片区兴祥路6号F栋之一

您现在的位置:首页> 技术专题 技术专题

一个字符设备驱动--点亮和熄灭一个LED设备

时间:2013/6/10 0:00:00     关键字:

在mini2440发展设计板上(CPU是s3c2440)发展设计标识符设配控制达成同一个led灯的亮灭 。 1. 十大滚球体育app 设施配置大十大滚球体育app: Host:X86PC Target:友爱之臂mini2440设计板

小软件氛围: Host:VMwareVR虚拟机下的redhat linux 9.0(是完全安转) Target:arm-linux kernel:linux-2.6.13 Crosstool: arm-linux-gcc-3.3.2

2. 成功完成具体步骤

⑴驱动程序文件--mini2440_one_led.c,其具体内容如下:

#define DEVICE_NAME "lsq_led" #define LED_MAJOR 250

#define GPB5_ON 1 #define GPB5_OFF 2 static int mini2440_led_ioctl( struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { if (cmd==GPB5_ON) { //printk("ioctl LEDON successfully\n"); s3c2410_gpio_setpin(S3C2410_GPB5, 0); return 0; }

if (cmd==GPB5_OFF) { //printk("ioctl LEDOFF successfully\n"); s3c2410_gpio_setpin(S3C2410_GPB5, 1); return 0; }

printk("ioctl error \n"); return -EFAULT; }

static struct file_operations mini2440_led_fops = { .owner = THIS_MODULE, .ioctl = mini2440_led_ioctl, };

static int __init mini2440_led_init(void) { int ret;

ret = register_chrdev(LED_MAJOR, DEVICE_NAME, &mini2440_led_fops); if (ret < 0) { printk(DEVICE_NAME " can''''''''''''''''''''''''''''''''t register major number\n"); return ret; }

devfs_mk_cdev(MKDEV(LED_MAJOR, 0), S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP, DEVICE_NAME);

s3c2410_gpio_cfgpin(S3C2410_GPB5, S3C2410_GPB5_OUTP); s3c2410_gpio_setpin(S3C2410_GPB5, 1);

printk(DEVICE_NAME " initialized\n"); return 0; }

static void __exit mini2440_led_exit(void){ devfs_remove(DEVICE_NAME); unregister_chrdev(LED_MAJOR, DEVICE_NAME); }

module_init(mini2440_led_init); module_exit(mini2440_led_exit);

应用程序文件—文件名led.c,其内容如下:

#define GPB5_ON 1 #define GPB5_OFF 2

int main(void) { //int k; int dev_fd; int retval; dev_fd = open("/dev/lsq_led",O_RDWR | O_NONBLOCK); if ( dev_fd == -1) { printf("Can''t open file /dev/lsq_led\n"); exit(-1); } printf ("\n/dev/lsq_led opened successfully, fd=%d\n",dev_fd);

wlile(1) { retval=ioctl(dev_fd,GPB5_ON,0); if(retval==-1){ perror("ioctl LEDON error\n"); exit(-1); }

sleep(1);

retval=ioctl(dev_fd,GPB5_OFF,0); if(retval==-1){ perror("ioctl LEDOFF error\n"); exit(-1); } sleep(1); } close(dev_fd); }

⑶ 编译应用程序led.c的Makefile  ,其内容如下:

all: led

led: arm-linux-gcc -o led led.c

clean: @rm -vf mini2440led *.o *~

⑷ 使内核撑持和编译驱动程序mini2440_one_led.c  ,需在相应的目录下增加如下内容(自己的习气  ,当然这一步是可选的):

kernel...../drivers/char/ Makefile obj-$(CONFIG_MINI2440_ONE_LED) += mini2440_one_led.o

Kconfig config MINI2440_ONE_LED tristate "mini2440 one LED Driver" depends on ARCH_S3C2440 help mini2440 User led, use GPB5.

   【上一篇:LED市场设备的分析和发展     下一篇:LED日光灯老化线的产品用途! 】    【返回】  

更高

服務咨询热线