ubuntu下编译驱动模块的方法

内核编译和嵌入式产品的设计与开发
回复
hady55566
帖子: 34
注册时间: 2008-10-29 23:53

ubuntu下编译驱动模块的方法

#1

帖子 hady55566 » 2010-03-13 0:18

摘录地方: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。这个内核程序目前只是打印了两行字,后续我将会扩充这个程序,完成一些有用的功能。
有事没事常交流:
QQ:452412781
头像
wangdu2002
帖子: 13284
注册时间: 2008-12-13 19:39
来自: 物华天宝人杰地灵

Re: ubuntu下编译驱动模块的方法

#2

帖子 wangdu2002 » 2010-03-13 0:45

路过学习,支持楼主继续丰富内容,顶顶之。 :em09
行到水穷处,坐看云起时。
海内生明月,天涯共此夕。
--------------------吾本独!
勇往直前
帖子: 2
注册时间: 2010-03-15 10:25

Re: ubuntu下编译驱动模块的方法

#3

帖子 勇往直前 » 2010-03-15 10:39

关注! :em09
samozhishui
帖子: 5
注册时间: 2010-03-25 22:44

Re: ubuntu下编译驱动模块的方法

#4

帖子 samozhishui » 2010-03-26 10:01

insmod *.ko文件后 没有显示 是不是输出到哪个文件里了
hady55566
帖子: 34
注册时间: 2008-10-29 23:53

Re: ubuntu下编译驱动模块的方法

#5

帖子 hady55566 » 2010-03-28 17:07

samozhishui 写了:insmod *.ko文件后 没有显示 是不是输出到哪个文件里了

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

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

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


感谢大家的关注,我会认真的解答大家的每一个问题的! :em11 :em04
有事没事常交流:
QQ:452412781
starca
帖子: 3
注册时间: 2010-04-18 7:21

Re: ubuntu下编译驱动模块的方法

#6

帖子 starca » 2010-04-26 9:18

正在学习, 很有帮助, 谢谢你
头像
速腾1994
论坛版主
帖子: 17379
注册时间: 2008-11-01 20:43
系统: Arch+gnome

Re: ubuntu下编译驱动模块的方法

#7

帖子 速腾1994 » 2010-04-26 15:15

怎样吧alc662声卡驱动编译进内核。
有源码
xujibin
帖子: 15
注册时间: 2010-04-22 21:05

Re: ubuntu下编译驱动模块的方法

#8

帖子 xujibin » 2010-04-30 18:34

为甚麽我很多内核头文件找不到那!!
hady55566
帖子: 34
注册时间: 2008-10-29 23:53

Re: ubuntu下编译驱动模块的方法

#9

帖子 hady55566 » 2010-05-01 14:56

用apt-get install linux-headers-2.6.32* (headers接版本号),来安装内核头文件。
有事没事常交流:
QQ:452412781
回复