第1个linux驱动___给驱动模块上户口
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第1个linux驱动___给驱动模块上户口相关的知识,希望对你有一定的参考价值。
从这篇博文开始,我们终于可以给我们的驱动模块first_drv一个正式的编制了,现在他已经填好了自己的户口登记信息表,距离拿户口本儿只有一步了!
内核内部有自己的一套安装驱动模块的方法,就像是民政局工作人员知道怎么给一个人办户口一样,对于一个普通公民来说,工作人员做了哪些操作办好了户口本,并不是普通公民需要关心的,我们最关心的是如何把我们填好的户口信息登记表交给工作人员,如何向工作人员表明我们有办户口的请求。
在linux系统中,对于字符设备驱动,我们通过register_chrdev这个函数来向内核注册驱动模块,我们希望在执行insmod first_drv.ko,也就是在调用first_drv_init函数的时候就完成驱动模块的注册,毕竟这就是驱动的初始化函数,在这个函数里“完成向内核注册驱动模块的任务”不正是它的职责所在吗。
我们来看一下之前的first_drv_init是怎样写的吧:
static int __init first_drv_init(void) { printk(KERN_INFO"hello world!\n"); return 0; }
我们知道将在里面添加一个register_chrdev函数,但是我们还不了解这个函数的用法,在Source Insight的linux-2.6.22.6内核源码工程里搜索一下,看看别人是怎么用的吧,如我搜到的例子:
int ret;
···
ret = register_chrdev(VFC_MAJOR, vfcstr, &vfc_fops);
if(ret) {
printk(KERN_ERR "Unable to get major number %d\n", VFC_MAJOR);
kfree(vfc_dev_lst);
return -EIO;
}
···
return 0;
我们着重来看有颜色的那一行,VFC_MAJOR是一个宏定义,
我们在里面加上register_chrdev函数,改动如下:
static int __init first_drv_init(void) { int ret = -1; register_chrdev() printk(KERN_INFO"hello world!\n"); return 0; }
本文出自 “12253782” 博客,请务必保留此出处http://12263782.blog.51cto.com/12253782/1873993
以上是关于第1个linux驱动___给驱动模块上户口的主要内容,如果未能解决你的问题,请参考以下文章