对内核树的理解,还没有特别的清楚。也看了一些网上的文字,大概理解的话,就是构造一个基于原版linux代码的编译环境。

因为发行版的linux很多api可能都已经被厂家修改了(网上说的),这样在某个发行版下编译的内容,可能就会存在一个移植的问题。

所以我们有必要上linux.org去下载一个原版的代码,然后构造一个编译环境,这里面就包括了编译时所需的.h,链接时所需的一些库文件。

做arm+linux的,可以在make menuconfig的时候,选择cpu为arm,这样就可以构造一个arm的交叉编译环境,所以为啥ldd强调我们需要构造一个内核树,

就是因为我们开发驱动的运行环境很可能与我们的开发环境不同,这是我自己想的。

 

建立步骤:

1、uname -r
luiz@luiz-VirtualBox:/lib/modules/3.2.46$ uname -r
3.2.0-48-generic-pae
2、找到与当前运行版本相匹配的原版

luiz@luiz-VirtualBox:~$ apt-cache search linux-source
linux-source - Linux kernel source with Ubuntu patches
linux-source-3.2.0 - Linux kernel source for version 3.2.0 with Ubuntu patches
3、获取源码包

sudo apt-get install linux-source-3.2.0

4、将linux_3.2.0.orig.tar.gz内核源码在/usr/src中解压:

luiz@luiz-VirtualBox:~$ sudo cp linux_3.2.0.orig.tar.gz /usr/src

5、开始构建

make menuconfig  ------这里注意要把device driver->stagings这个选择去掉,不然会出错

sudo make

sudo make modules

sudo make modules_install

这样就ok了,能在lib/modules中看到多了个3.2.46的文件夹,里面就是我们构造的编译所需的各种文件。

luiz@luiz-VirtualBox:~/linux-3.2.0$ cd /lib/modules/
luiz@luiz-VirtualBox:/lib/modules$ ls
3.2.0-23-generic-pae  3.2.0-24-generic-pae  3.2.0-48-generic-pae  3.2.46
luiz@luiz-VirtualBox:/lib/modules$ ls 3.2.46/
build                modules.dep.bin      modules.seriomap
kernel               modules.devname      modules.softdep
modules.alias        modules.ieee1394map  modules.symbols
modules.alias.bin    modules.inputmap     modules.symbols.bin
modules.builtin      modules.isapnpmap    modules.usbmap
modules.builtin.bin  modules.ofmap        source
modules.ccwmap       modules.order
modules.dep          modules.pcimap