Linux 下的驱动程序与内核的编译
来源:互联网 发布:股票数据分析方法 编辑:程序博客网 时间:2024/06/14 00:14
编译环境的搭建
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>> 第三版
<<模块的动态加载和内核配置>>
- Linux 下的驱动程序与内核的编译
- Linux 下的驱动程序与内核的编译
- 关于Linux下驱动程序的编译方法
- 关于Linux下驱动程序的编译方法 .
- linux网卡驱动程序的编译与安装
- hello world" linux驱动程序的编译与
- linux网卡驱动程序的编译与安装
- Linux字符设备驱动程序编译进入内核的方法
- 2013/09/23 Android的Linux内核与驱动程序
- 如何将写好的驱动程序编译进内核
- 关于嵌入式linux下的驱动程序编译问题
- linux驱动-在PC机下编译驱动程序的Makefile
- Ubuntu下编译android的linux内核
- Ubuntu下编译android的linux内核
- android下的linux内核编译
- android下的linux内核编译
- linux网卡驱动程序的编译与安装 (转载)
- linux网卡驱动程序的编译与安装(转)
- iterator的作用
- SQLServer 远程备份和恢复
- 关于In和Exists性能网上找的对比资料
- 一种方便调试的打印语句宏定义
- Spring对Log4J的增强
- Linux 下的驱动程序与内核的编译
- his&racs&lis&ris
- SQL Server 中的身份安全
- .net 发送邮件 头值中找到无效字符
- MSSQL2K 将表数据生成INSERT SQL脚本的存储过程
- java实现快速排序
- 几种压缩算法原理介绍
- 如何察看Solaris系统的内存大小及使用情况?
- 取得MAC地址的4种方法