第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驱动___给驱动模块上户口的主要内容,如果未能解决你的问题,请参考以下文章

第1个linux驱动___安装驱动模块之内核再爱我一次

第1个linux驱动___应用程序才是大Boss

第1个linux驱动___打印"hello world"

第1个linux驱动___打印"hello world"

第1个linux驱动___打印"hello world"

第1个linux驱动___投靠NFS网络文件系统