雅乐网

计算机技术、学习成长

计算机 » 操作系统 » linux添加字符设备驱动程序

linux添加字符设备驱动程序

要求:

掌握添加设备驱动程序的方法

内容

采用模块方法,添加一个新的字符设备的驱动程序,实现打开/关闭、读/写等基本操作

编写一个应用程序,测试添加的驱动程序

如果打开设备失败,应该用root身份来运行。下面的示例全部是root用户的身份。

一、编写驱动程序源代码lgsDrive.c

源代码如下:

 二、编写Makefile

内容如下

第一行 obj-m := lgsDrive.o是指定模块名称是lgsDrive.ko

第二行定义变量PWD为当前目录

第三行=后面应该是你的linux源代码所在的文件夹。这次编译模块要用到linux源代码中的makefile 。

第5行的意思是,进入KERNELDIR (也就是linux源代码)文件夹,使用那里的makefile并执行make modules 。M=$(PWD)的作用是回到原来的目录。

第8行说明clean是伪目标文件,可以省略。只有显式 使用make clean 才会执行第9行命令,作用是删除中间文件。

三、编译驱动程序

scrn20150310220300

使用root用户,运行命令

编译驱动程序。完成后可以使用ls命令查看,可以发现生成的lgsDrive.ko文件。这就是我们的驱动程序。

四、装载模块

使用命令lsmod可以查看当前已经有的模块。

使用下面的命令装载我们自己的模块

然后再次lsmod可以找到新加入的模块

scrn20150310221043

这时候使用dmesg命令。可以查看源代码lgsDrive.c中,设备注册函数init_module()中的prink的输出

[ 6639.570322] the lgsDrive has been registered!
[ 6639.570328] id: 250

五、分配设备号

使用命令ls /dev可以查看当前已有的设备。

要加入自己的设备需要知道主设备号,在第四步的dmesg中可以找到输出的id:250 设备号(驱动源代码43行的输出)。也可以使用命令

查看所有设备

scrn20150310221657

然后使用命令加入自己的设备:(lgsDevice是自己起的设备名字,和test.c里面的对应)

然后使用 ls /dev就可以看到自己的设备了

c是指字符设备

250是主设备号(选择驱动程序)

0是指定从设备号(选择设备)这里可以随便指定

六、编写测试程序test.c

然后使用下面的命令编译

然后运行 ./test

scrn20150310223425

七、删除设备和模块

如果文章对你有帮助,欢迎点赞或打赏(金额不限)。你的打赏将全部用于支付网站服务器费用和提高网站文章质量,谢谢支持。

版权声明:

本文由 原创,商业转载请联系作者获得授权。
非商业转载请注明作者 雅乐网 ,并附带本文链接:
http://www.yalewoo.com/linux_char_drive.html

上一篇:

下一篇:

文章《linux添加字符设备驱动程序》共有6条评论:

  1. Jennea

    请问为什么我在运行的时候能向设备里写用户输入的信息,但是读不出来呢?

  2. 卡可酷

    我是物联网班最帅的男人,外号华科吴彦祖

  3. 匿名

    帮大忙了

  4. 匿名

    写的真好

  5. 卡可酷

    lgsDrive.c和Makefile在哪里创建?
    直接在桌面创建就可以吗?

我要评论

验证码*: 2 + 2 =