<span style="white-space: pre;"> </span>离上次玩led驱动已经好久了。久到都忘了一些基本命令了,这次重新复习一下这些基本命令吧
static void led_exit(){ cdev_del(&cdev); unregister_chrdev_region(devno,1); } static int led_init(){ cdev_init(&cdev,&led_ops); alloc_chrdev_region(&devno,0,1,"mybeep"); cdev_add(&cdev,devno,1); return 0; } module_init(led_init); module_exit(led_exit);init里面就是注册的代码,初始化设备号,将ops结构体和设备号连接起来,然后申请设备号,alloc_chrdev_region,最后设别号加入到cdev中,
exit里面就是卸载设备,先解除cdev里面的各种关系,然后注销设备号,
unsigned int *ledgpbcon; unsigned int *ledgpbdat; unsigned int *ledgpbup; struct cdev cdev; dev_t devno; int ledopen(struct inode *node,struct file *filp) { ledgpbcon = ioremap(GPBCON,4); ledgpbdat = ioremap(GPBDAT,4); ledgpbup = ioremap(GPBUP,4); writel(0x01,ledgpbcon); writel(0x01,ledgpbdat); printk(KERN_ALERT "had open\n"); return 0; }
写完之后,用前面介绍的方式创建的环境编译.c文件,然后下载到开发板上去,
然后insmod 进/proc/devices看有没有对应的设备号,如253 mybeep
然后mknod /dev/mybeep c 253 0也可以创建在别的地方,这样应用程序就可以对应的open了,
然后就是运行应用程序,再然后,rmmod mybeep卸载驱动程序,lsmod可以查看驱动有没有被使用