ubuntu下的内核模块编程
想编写一个内核模块,简单的对字符设备实现读写等功能,是不是一定要另外编译一个新内核?ubuntu安装后/usr/src下好像没有源代码。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
想编写一个内核模块,简单的对字符设备实现读写等功能,是不是一定要另外编译一个新内核?ubuntu安装后/usr/src下好像没有源代码。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
ubuntu下要实现一个内核模块的详细流程是什么?
2.6的吗?
字符设备很简单呀,实现struct file_operations里面的read,write,ioctl,llseek函数功能,在编写一个加载和卸载设备驱动的函数XXX_init()和XXX_exit()。就可以了!
块设备要复杂一点!
ubuntu安好后/sur/src下面应该有源码吧!
我是用的7.10的
是啊 ,首先要建一个内核树
可以下一个源码放那里
(1)在源代码所在目录建立Makefile文件如下:
obj-m += modulename.o
modulename-objs := file1.o file2.o
(2)在Makefile所在的目录运行make命令:
make –C /usr/src/linux-x.y.z SUBDIRS=$PWD modules
注意:
模块建立所依赖的内核版本(通过查看内核源代码中的
顶层makefile中的定义)与使用模块内核版本(uname –
r)应该一致,否则就不能加载成功!
先移除字符设备,再注销设备号!
(3)加载模块
insmod -f mydev.ko
通过lsmod检查模块是否加载成功
(4)生成设备文件
在文件/proc/devices中查找增加的设备对应的主设备号
假设为254,生成设备文件的相应的命令是:
mknod /dev/mydev c 254 0
其中254为主设备号,0为从设备号,c表示字符设备
(5)编写驱动测试程序测试驱动程序的实现
void main()
{
……
open(); //打开设备
read(); //读设备
write(); //写设备
close(); //关闭设备
…… }
当不再使用时可通过 rmmod命令来卸载设备。
ubuntu下已经有内核树了,不用在建。在/usr/src/目录下已经有了!