Linux 内核模块编程的第一个字符设备驱动
2013-06-24 19:28
399 查看
最近学习Linux 内核模块编程,看的是《Linux内核模块编程指南》这本书,在字符设备驱动这一节遇到了几个问题,简单的记录一下。
1. ret = unregister_chrdev (...)
在编译时,出错:
在cleanup_module(...)中调用的这个函数说是没有返回值,查了一下,应该是在以前版本的内核中是有返回值的,但是在一些较新版本的内核中没有返回值了,所以这个问题比较好解决,只要去掉返回值,后面的if同时去掉就可以了。
2. put_usr( ...)?
同样,在编译时,这个地方也出现了问题
3. 程序的执行过程
首先要加载模块,假设最终生成的模块名是chardev.ko,用insmod命令加载
因为每次调用cat 打开设备时在函数 device_open(...)中都会增加一个计数器,所以会看到上述的输出,而当要向设备中写入内容时,因为没有实现写函数,只是简单的输出提示信息,当然这也要用dmesg才能看的到
dmesg的输出:
4. 结束时,不要忘记删除设备和模块
1. ret = unregister_chrdev (...)
在编译时,出错:
error: void value not ignored as it ought to be
在cleanup_module(...)中调用的这个函数说是没有返回值,查了一下,应该是在以前版本的内核中是有返回值的,但是在一些较新版本的内核中没有返回值了,所以这个问题比较好解决,只要去掉返回值,后面的if同时去掉就可以了。
2. put_usr( ...)?
同样,在编译时,这个地方也出现了问题
error: implicit declaration of function ‘put_usr’ [-Werror=implicit-function-declaration]但是当我查Linux内核的API时却没有查到这个函数,但是查到了
__put_user( x, ptr )这个函数,所以将原文中的
put_usr(*(msg_Ptr++), buffer++);改为
__put_user(*(msg_Ptr++), buffer++);即可。这样便可以编译通过。
3. 程序的执行过程
首先要加载模块,假设最终生成的模块名是chardev.ko,用insmod命令加载
insmod ./chardev.ko然后使用 dmesg 命令查看输出,看到会让用mknod命令来生成设备
mknod /dev/hello c 248 0执行命令后会生成 字符设备/dev/hello ,这样我们便可以使用cat命令来显示设备的内容了:
因为每次调用cat 打开设备时在函数 device_open(...)中都会增加一个计数器,所以会看到上述的输出,而当要向设备中写入内容时,因为没有实现写函数,只是简单的输出提示信息,当然这也要用dmesg才能看的到
dmesg的输出:
4. 结束时,不要忘记删除设备和模块
相关文章推荐
- linux设备驱动编程-初探(2)--在内核中构造和运行模块
- 手把手教你学linux驱动开发:模块编程、虚拟字符设备编程、LED字符设备驱动
- linux 内核编程之字符设备驱动
- android内核字符驱动设备实战之----------硬件抽象层模块编程篇
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响—linux2.4单独编译驱动模块
- 如果你在学嵌入式底层驱动,内核模块编程将是你的第一课!小白学Linux之内核模块编程详解
- 利用linux 内核所提供的input子系统编写字符设备驱动的步骤
- linux2.6字符设备驱动编程第一例:globalmem
- (转载)从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- Android内核开发 Linux Java编程调用内核模块设备驱动
- linux 设备驱动开发学习笔记(一):最简单的内核模块
- linux内核2.6中设备模块编程的解决方法
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- linux内核字符设备驱动相关的函数以及结构体
- linux4.10.8 内核移植(四)---字符设备驱动_led驱动程序
- 如果你在学嵌入式底层驱动,内核模块编程将是你的第一课!小白学Linux之内核模块编程详解
- .Linux设备驱动程序学习(0)——设备驱动介绍& Hello, world!模块 内核参数传递
- linux内核字符设备驱动之发送命令接口
- Linux驱动编程 step-by-step (九)字符设备模拟pipe的驱动程序
- linux 驱动程序 设备模块 设备号 设备文件创建 设备注册 字符驱动设备分析