您的位置:首页 > 运维架构 > Linux

linux驱动开发—beep

2015-07-06 13:08 537 查看
<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;
}


用地址映射的方式控制寄存器,也可以用linux为我们准备的宏来控制,s3c2410_gpbpin_XXXXX来控制引脚 ,不过有些芯片没有,所以最好是用地址映射的方式来做,
写完之后,用前面介绍的方式创建的环境编译.c文件,然后下载到开发板上去,

然后insmod 进/proc/devices看有没有对应的设备号,如253 mybeep

然后mknod /dev/mybeep c 253 0也可以创建在别的地方,这样应用程序就可以对应的open了,

然后就是运行应用程序,再然后,rmmod mybeep卸载驱动程序,lsmod可以查看驱动有没有被使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: