当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 9 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : ubuntu下编译驱动模块的方法
帖子发表于 : 2010-03-13 0:18 

注册: 2008-10-29 23:53
帖子: 34
送出感谢: 0 次
接收感谢: 0 次
摘录地方:http://www.cnitblog.com/stonestar/archive/2006/10/04/17634.aspx



准备工作做好了,我们开始写第一个内核程序(假定开发环境是ubuntu linux2.6,以前一直在linux2.4下开发linux驱动,转到2.6下才发现很多东东都变了)。我们Hello world内核程序有两个文件组成,一个Makefile,另一个是test.c。
test.c内容如下:
1 #include <linux/init.h>
2 #include <linux/kernel.h>
3 #include <linux/module.h>
4
5 static int __init eth_init(void)
6 {
7 printk("init module\n");
8 return 0;
9 }
10 static void __exit eth_exit(void)
11 {
12 printk("exit modules\n");
13 }
14
15 module_init(eth_init);
16 module_exit(eth_exit);
Makefile内容如下:
PWD = $(shell pwd)
KERNEL_SRC = /usr/src/linux-source-2.6.15/
obj-m := test.o
module-objs := test.o
all:
$(MAKE) -C $(KERNEL_SRC) M=$(PWD) modules
clean:
rm *.ko
rm *.o
注意千万不能从我这篇blog中通过复制粘贴Makefile内容去创建Makefile文件!!!我要下载源码test.tgz.zip,原文件名是test.tgz,请去掉后面的zip后解压。
在编译源码之前需要修改一下Makefile中的KERNEL_SRC,使其指向你的linux内核源码。修改完成后,在test.c和Makefile所在的目录下运行make,如果看到类似输出
make -C /usr/src/linux-source-2.6.15/ M=/home/vmeth modules
make[1]: Entering directory `/usr/src/linux-source-2.6.15'
CC [M] /home/vmeth/test.o
Building modules, stage 2.
MODPOST
CC /home/vmeth/test.mod.o
LD [M] /home/vmeth/test.ko
make[1]: Leaving directory `/usr/src/linux-source-2.6.15'
OK,一个内核程序编译出来了,目录下多了一个test.ko。出现/usr/bin/ld: crt1.o: No such file: No such file or directory.这个错误怎么办?这个问题的原因是usr/lib/目录下缺少crt1.o。解决方法:安装libc6-dev。另外在编译这个程序之前最好先把内核编译一下(在内核源码所在的目录下执行make menuconfig,什么都不要修改退出,退出时会提示你是否要保存配置,选择保存,然后执行make,整个make过程需要很长时间,----我在make menuconfig时,好像提示缺少ncurses库,安装上libncurses就OK了)。

下一步就是运行这个程序了,在root用户下执行insmod ./test.ko。没有错误提示的话,这个程序就被执行了,运行一下dmesg,最后一行是不是可以看到init module字样。执行rmmod test;再运行dmesg,最后一行又出现了exit modules。这个内核程序目前只是打印了两行字,后续我将会扩充这个程序,完成一些有用的功能。


_________________
有事没事常交流:
QQ:452412781


页首
 用户资料  
 
2 楼 
 文章标题 : Re: ubuntu下编译驱动模块的方法
帖子发表于 : 2010-03-13 0:45 
头像

注册: 2008-12-13 19:39
帖子: 13284
地址: 物华天宝人杰地灵
送出感谢: 1
接收感谢: 6
路过学习,支持楼主继续丰富内容,顶顶之。 :em09


_________________
行到水穷处,坐看云起时。
海内生明月,天涯共此夕。
--------------------吾本独!


页首
 用户资料  
 
3 楼 
 文章标题 : Re: ubuntu下编译驱动模块的方法
帖子发表于 : 2010-03-15 10:39 

注册: 2010-03-15 10:25
帖子: 2
送出感谢: 0 次
接收感谢: 0 次
关注! :em09


页首
 用户资料  
 
4 楼 
 文章标题 : Re: ubuntu下编译驱动模块的方法
帖子发表于 : 2010-03-26 10:01 

注册: 2010-03-25 22:44
帖子: 5
送出感谢: 0 次
接收感谢: 0 次
insmod *.ko文件后 没有显示 是不是输出到哪个文件里了


页首
 用户资料  
 
5 楼 
 文章标题 : Re: ubuntu下编译驱动模块的方法
帖子发表于 : 2010-03-28 17:07 

注册: 2008-10-29 23:53
帖子: 34
送出感谢: 0 次
接收感谢: 0 次
samozhishui 写道:
insmod *.ko文件后 没有显示 是不是输出到哪个文件里了



是的,这个输出信息是在/var/log/messages 里面。

用 tail -5 /var/log/messages 就可以看到刚才的输出信息了。

不过也可以用dmesg 查看输入出信息。


感谢大家的关注,我会认真的解答大家的每一个问题的! :em11 :em04


_________________
有事没事常交流:
QQ:452412781


页首
 用户资料  
 
6 楼 
 文章标题 : Re: ubuntu下编译驱动模块的方法
帖子发表于 : 2010-04-26 9:18 

注册: 2010-04-18 7:21
帖子: 3
送出感谢: 0 次
接收感谢: 0 次
正在学习, 很有帮助, 谢谢你


页首
 用户资料  
 
7 楼 
 文章标题 : Re: ubuntu下编译驱动模块的方法
帖子发表于 : 2010-04-26 15:15 
头像

注册: 2008-11-01 20:43
帖子: 17328
系统: 自动检测比较好
送出感谢: 44
接收感谢: 11
怎样吧alc662声卡驱动编译进内核。
有源码


_________________
谁是我?KL.Uiq8 YinMeng


页首
 用户资料  
 
8 楼 
 文章标题 : Re: ubuntu下编译驱动模块的方法
帖子发表于 : 2010-04-30 18:34 

注册: 2010-04-22 21:05
帖子: 15
送出感谢: 0 次
接收感谢: 0 次
为甚麽我很多内核头文件找不到那!!


页首
 用户资料  
 
9 楼 
 文章标题 : Re: ubuntu下编译驱动模块的方法
帖子发表于 : 2010-05-01 14:56 

注册: 2008-10-29 23:53
帖子: 34
送出感谢: 0 次
接收感谢: 0 次
用apt-get install linux-headers-2.6.32* (headers接版本号),来安装内核头文件。


_________________
有事没事常交流:
QQ:452412781


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 9 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译