对内核树的理解,还没有特别的清楚。也看了一些网上的文字,大概理解的话,就是构造一个基于原版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