二、Linux内核移植
上一节介绍了u-boot的移植,这一节来介绍Linux内核移植。
工具和源码在路径:F:\韦东山\CD1_主光盘\system。
通过Samba,将工具和源码拷贝到共享目录,Samba配置详见相关文章,执行以下命令。
tar xjf linux-2.6.22.6.tar.bz2 //解压linux内核源码包
cd linux-2.6.22.6 //进入内核源码目录
patch -p1 < ../linux-2.6.22.6_jz2440.patch //打补丁,命令为patch,-p1中的1是指忽略掉第
一个目录,p只路径path
make s3c2410_defconfig //产生配置文件
执行上述命令后,将会在 linux-2.6.22.6跟目录生成.config文件。
也可以通过命令:cp config_厂家 .config 来拷贝配置文件
在本实验中,打完补丁后,会在根目录生成config_ok文件,
我们直接执行命令:cp config_ok .config 命令即可。
make menuconfig //进入菜单配置界面,一定要选择以下菜单,否则会导致引导根文件系
统失败
Kernel Features --->
[*] Use the arm EABI to compile the kernel
[*] Allow old ABI binaries to run with this kernel (EXPERIMENTAL) (NEW)
File system --》
Miscellaneous filesystems-------》
YAFFS2 file system support(选中)
如果没有yaffs2选项,那是yaffs文件系统补丁包没有打上,选中支持yaffs2才能引导yaffs2文件系统。
倘若不选择上述菜单,会导致linux内核引导根文件系统的时候,卡死在这里
block 535 is bad
block 809 is bad
block 937 is bad
block 1898 is bad
VFS: Mounted root (yaffs filesystem).
Freeing init memory: 136K
原因在于:编译内核和busybox使用的编译器是arm-linux-gcc 4.3.2,而这个编译器默认是打开"EABI选项"的,这样编译出来的busybox就是EABI的。但是内核编译的时候,默认是把"EABI选项"关掉的。所以busybox和内核无法正常配合。把"EABI选项"打开,重新编译内核后,一切正常。
可能遇到的问题
mount -t nfs -o nolock 192.168.1.132:/share /mynfsc
mount: mounting 192.168.1.132:/share on /mynfsc failed: Protocol not supported
原因:内核配置有问题,没有支持 NFS 客户端:
---Network File Systems
[*] Provide NFSv3 client support
涂蓝选项选中,就可以了。
kernel配置
network filesystem->
·Enable NFS file system
·NFS client support
·NFSV3 client support
还有就是busybox中的mount要支持nfs
make uImage //生成内核镜像文件
UIMAGE arch/arm/boot/uImage
"mkimage" command not found - U-Boot images will not be built
该镜像文件在目录:arch/arm/boot/,如果在该目录找不到uImage,需要转换工具,到u-boot的tools目录\u-boot-1.1.6\tools将mkimage工具拷贝到linux系统的/usr/bin/目录下,再次重新make clean,make
即可在arch/arm/boot/目录下生成uImage
通过u-boot下载uImage,重启看现象,内核移植完毕。
接下来讲根文件系统的移植。