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)用相似的命令安装makevimgdb

(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驱动模块

  1. 下载bluez sco驱动源代码:www.krugle.orghttp://sourceforge.net/search?
  2. 将源代码拷贝至:/home/tuelee目录下,并新建一空白文件,命名为Makefile.
  3. 编辑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

    保存、退出。

  4. #cd /home/tuelee

    执行make命令:

    #make

    开始编译驱动模块。

  5. 查看编译后新生成的文件:Module.symvers, sco.o, sco.ko, sco.mod.c, sco.mod.o
  6. 手动加载编译后的模块文件

   # insmod sco.ko

   查看加载后模块的信息:

   # lsmod sco

Module      Size      Useby

 Sco       14720        0

                   

     (34步可以用命令代替:

       $ echo “obj-m:=sco.o” > Makefile

       $ make –C /lib/modules/2.6.24-17-generic/build M=/home/tuelee modules)

       以上是利用“内核代码树”来对驱动模块进行编译后将模块手动加载进内核,还有一种通过向内核中添加驱动源代码并修改配置文件和Makefile后对内核进行编译的方式来加载模块。

另一种向内核加载模块的方法

这种方法多用在嵌入式开发中。

  1. 内核源代码linux-source-2.6.24,拷贝至/usr/src
  2. 安装libncurses5-dev库  Apt-get install libncurses5-dev     Apt-get install bin86
  3. make menuconfig 配置内核   在图形化界面中把sco选项选上
  4. make bzImage   编译内核
  5. make install   安装内核
  6. make modules   编译模块
  7. make modules_install  安装模块
  8. 制作内核映象文件:/usr/sbin/mkinitrd –o /boot/initrd.img-2.6.24.3 2.6.24.3
  9. /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>> 第三版

  <<模块的动态加载和内核配置>>

 

原创粉丝点击