免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3877 | 回复: 6
打印 上一主题 下一主题

ubuntu下的内核模块编程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-09 16:31 |只看该作者 |倒序浏览
想编写一个内核模块,简单的对字符设备实现读写等功能,是不是一定要另外编译一个新内核?ubuntu安装后/usr/src下好像没有源代码。

论坛徽章:
0
2 [报告]
发表于 2008-04-09 16:48 |只看该作者
ubuntu下要实现一个内核模块的详细流程是什么?

论坛徽章:
0
3 [报告]
发表于 2008-04-11 02:55 |只看该作者
2.6的吗?
字符设备很简单呀,实现struct file_operations里面的read,write,ioctl,llseek函数功能,在编写一个加载和卸载设备驱动的函数XXX_init()和XXX_exit()。就可以了!
块设备要复杂一点!
ubuntu安好后/sur/src下面应该有源码吧!
我是用的7.10的

论坛徽章:
0
4 [报告]
发表于 2008-06-01 16:00 |只看该作者

回复 #1 howema 的帖子

是啊 ,首先要建一个内核树

论坛徽章:
0
5 [报告]
发表于 2008-06-12 09:45 |只看该作者

回复 #2 howema 的帖子

可以下一个源码放那里

论坛徽章:
0
6 [报告]
发表于 2008-06-12 09:50 |只看该作者

回复 #2 howema 的帖子

(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命令来卸载设备。

论坛徽章:
0
7 [报告]
发表于 2008-06-15 17:20 |只看该作者

回复 #1 howema 的帖子

ubuntu下已经有内核树了,不用在建。在/usr/src/目录下已经有了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP