运行环境:
虚拟机:vmware9.0.1
gcc版本:gcc:3.4.5
linux内核:linux-2.6.32.21
在构建内核树前不妨先查看下gcc版本,我使用的是gcc-3.4.5的版本,编译linux-2.6.10内核使用较新的版本可能出现问题,可参看gcc版本更改修改版本。不过后来发现用linux内核建立的内核树与系统使用的内核版本不符,导致编译进内核时出现驱动模块格式错误的信息。所以需要先查看下系统的内核版本,由于参考的是LDDR3,可能在以后的编写驱动过程中可能会出现不同,但现在linux-2.6.10的内核较老,修改系统内核提示2.6.10内核版本太老,无法完成。晕!只好编译新的内核了。
在构建内核树前最好运行如下命令查看下系统的内核版本,否则可能会出现版本不兼容的问题。
uname -a
出现如下信息:
Linux localhost 2.6.32-21-generic #32-Ubuntu SMP Fri Apr 16 08:10:02 UTC 2010 i686 GNU/Linux
然后从官网下载内核源码:
官网:
https://www.kernel.org/pub/linux/kernel/v2.6/
下载的源码:
linux-2.6.32.21.tar.bz2
进入/usr/src/后
复制下载的源码并解压到/usr/src/目录下。
cp /mnt/hgfs/mnt/linux-2.6.32.21.tar.bz2 .(后面还有个小点,表示当前目录,若下载源码是gz后缀名需用zxvf选项解压)
tar jxvf linux-2.6.32.21.tar.bz2
解压完成后执行:
make oldconfig
该命令可在现有内核文件设置基础上构建新的配置文件,在内核升级时正需要设置内核新增特性的问题即可。
我使用的是默认配置,配置完成后执行:
make
该过程较长,可能需要一个小时左右,有人反映使用make -j2命令建立并行任务可提高编译速度,j2后面的2为并行任务个数,该值设置为系统CPU个数速度较快,但也不能一概而论。
编译完成后执行:
make bzImage
执行后会在当前目录下生成
vmlinux
接下来需要做的是将生成的模块编译进内核,执行:
make modules
make modules_install
进入/lib/modules/目录会发现生成以内核版本命名的内核目录,进入内核树目录后还会有个build目录。以后会在编译驱动模块的Makefile文件中用到。