摘录地方:http://www.cnitblog.com/stonestar/archi ... 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。这个内核程序目前只是打印了两行字,后续我将会扩充这个程序,完成一些有用的功能。
ubuntu下编译驱动模块的方法
-
- 帖子: 34
- 注册时间: 2008-10-29 23:53
ubuntu下编译驱动模块的方法
有事没事常交流:
QQ:452412781
QQ:452412781
- wangdu2002
- 帖子: 13284
- 注册时间: 2008-12-13 19:39
- 来自: 物华天宝人杰地灵
-
- 帖子: 2
- 注册时间: 2010-03-15 10:25
-
- 帖子: 5
- 注册时间: 2010-03-25 22:44
Re: ubuntu下编译驱动模块的方法
insmod *.ko文件后 没有显示 是不是输出到哪个文件里了
-
- 帖子: 34
- 注册时间: 2008-10-29 23:53
Re: ubuntu下编译驱动模块的方法
samozhishui 写了:insmod *.ko文件后 没有显示 是不是输出到哪个文件里了
是的,这个输出信息是在/var/log/messages 里面。
用 tail -5 /var/log/messages 就可以看到刚才的输出信息了。
不过也可以用dmesg 查看输入出信息。
感谢大家的关注,我会认真的解答大家的每一个问题的!
有事没事常交流:
QQ:452412781
QQ:452412781
-
- 帖子: 3
- 注册时间: 2010-04-18 7:21
Re: ubuntu下编译驱动模块的方法
正在学习, 很有帮助, 谢谢你
- 速腾1994
- 论坛版主
- 帖子: 17379
- 注册时间: 2008-11-01 20:43
- 系统: Arch+gnome
Re: ubuntu下编译驱动模块的方法
怎样吧alc662声卡驱动编译进内核。
有源码
有源码
-
- 帖子: 15
- 注册时间: 2010-04-22 21:05
Re: ubuntu下编译驱动模块的方法
为甚麽我很多内核头文件找不到那!!
-
- 帖子: 34
- 注册时间: 2008-10-29 23:53
Re: ubuntu下编译驱动模块的方法
用apt-get install linux-headers-2.6.32* (headers接版本号),来安装内核头文件。
有事没事常交流:
QQ:452412781
QQ:452412781