字符设备驱动(第一篇)

字符设备驱动:

应用程序APP的open、write等函数通过c库来实现,c库通过swi val 来触发中断,通过val值来判断是读?是写?来调用sys_open、sys_write等,至于说是调用哪个底层的驱动。
写好一个驱动device_open、device_write,通过file_operations来告诉内核有此驱动。所以,也可以简单的理解为写驱动就是填充file_operations的结构体,然后把此结构体告诉内核,此事是通过register_cdev来注册。文字说明很枯燥,用下面的例子来说明:
static int first_drv_open(struct inode *inode,struct file *file)
{
return 0;
}


static ssize_t first_drv_write(struct file *file,const char __user *buf,size_t count,loff_t *ppos)
{
return 0;
}
static struct file_operations first_drv_fops={
.owner = THIS_MODULE,
.open = first_drv_open,
.write = first_drv_write,
}
int first_drv_init(void)
{
register_chrdev (major,"first_dev",&first_drv_fops);
return 0;
}
void first_drv_exit()
{
unregister_chrdev(major,"first_drv")
}
 module_init(first_drv_init)
 module_exit(first_drv_exit)
 
 可以理解成在内核里有一个数组大小为256(主设备号的范围是0~255),注册就是把file_operation的内容填充到相应的数组中。
 当应用程序调用时,可以根据设备号去调用相应file_operation的内容。
 卸载就是把注册的设备号从数组中拖出。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值