linux驱动开发—beep

<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可以查看驱动有没有被使用



你可能感兴趣的:(Linux驱动开发)