编译环境的搭建
1.安装虚拟机,新建一个虚拟机,并在上面安装Ubuntu 8.04(内核版本号2.6.24)。
2.安装必要的开发工具
(1)系统升级
#sudo apt-get update
(2) 安装gcc
#sudo apt-get install gcc //安装成功,版本号4.2.3。
(3)用相似的命令安装make、vim、gdb。
(4)以上安装过程也可用sudo apt-get install build-essential 来安装编译
必须的工具。
3.由于linux内核从2.6.24版本起新增了蓝牙设备驱动程序,因此编译之前不必对系统安装bluez补丁。
4.ubuntu在第一步安装完内核版本号为2.6.24的系统后,已经有一个可用的2.6.24内核,在/lib/modules下有一个build目录,它是一个指向“内核代码树”的一个符号链接,编译驱动程序时要用到这个目录。
编译和加载SCO驱动模块
下载bluez sco驱动源代码:
www.krugle.org
或
http://sourceforge.net/search
?
将源代码拷贝至:/home/tuelee目录下,并新建一空白文件,命名为Makefile.
编辑Makefile内容:
obj-m := hello.o
KERNELDIR := /lib/modules/2.6.24-17-generic/build
PWD:=/home/tuelee
all:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm *.ko *.mod* *.symvers
保存、退出。
#cd /home/tuelee
执行make命令:
#make
开始编译驱动模块。
查看编译后新生成的文件:Module.symvers, sco.o, sco.ko, sco.mod.c, sco.mod.o
手动加载编译后的模块文件
# insmod sco.ko
查看加载后模块的信息:
# lsmod sco
Module Size Useby
Sco 14720 0
… … …
(3、4步可以用命令代替:
$ echo “obj-m:=sco.o” > Makefile
$ make –C /lib/modules/2.6.24-17-generic/build M=/home/tuelee modules)
以上是利用“内核代码树”来对驱动模块进行编译后将模块手动加载进内核,还有一种通过向内核中添加驱动源代码并修改配置文件和Makefile后对内核进行编译的方式来加载模块。
另一种向内核加载模块的方法
这种方法多用在嵌入式开发中。
内核源代码linux-source-2.6.24,拷贝至/usr/src下
安装libncurses5-dev库 Apt-get install libncurses5-dev Apt-get install bin86
make menuconfig 配置内核 在图形化界面中把sco选项选上
make bzImage 编译内核
make install 安装内核
make modules 编译模块
make modules_install 安装模块
制作内核映象文件:/usr/sbin/mkinitrd –o /boot/initrd.img-2.6.24.3 2.6.24.3
向/boot/grub/menu.lst中添加:
Title Ubuntu,kernel 2.6.24.3
Root (hd0,4)
Kernel /vmlinuz-2.6.24.3 root=……
Initrd initrd.img-2.6.24.3
Savedefault
Boot
Title Ubuntu,kernel 2.6.24.3 (recovery mode)
Root (hd0,4)
Kernel /vmlinuz-2.6.24.3 root=……
Initrd initrd.img-2.6.24.3
Boot
重启系统加载新内核.
参考:
<<Linux Device Driver>> 第三版
<<模块的动态加载和内核配置>>