一、实验环境
硬件: JZ2440开发板
内核版本: linux-2.6.22.6
交叉工具链: gcc-3.4.5-glibc-2.3.6
二、实验步骤
1、解压内核源码包
为了方便以后查看我们对内核源码所作的修改可以使用git建立一个代码仓库,从而记录修改的点滴
tar xjfv linux-2.6.22.tar.bz2
cd linux-2.6.22.6
git init //初始git仓库
git add . //将目录下的所有添加到暂存区
//将所有提交到仓库
git commit -a -m "this is kernel source without any change"
2、打补丁
将补丁文件保存在解压的源码同一级目录下,然后进入源码目录打补丁,命令如下:
cd linux-2.6.22.6
patch -p1 < ../linux-2.6.22.6_jz2440.patch
3、编译
打完补丁后会在linux-2.6.22.6/目录下生成一个config_ok的配置文件,需将其拷贝一份为.config以便内核编译,同时修改
Makefile指定交叉工具链
ARCH ?= arm
CROSS_COMPILE ?= /opt/cross-tools/gcc-3.4.5-glibc-2.3.6/bin/arm-linux-
修改完之后便可执行如下命令
cp config_ok .config
make uImage
4、烧写
在烧写内核之前得先安装tftp,具体的安装和使用这里不细说(参考ubuntu14.04开发环境搭建),同时还得设置电脑与开发板的
IP地址,使得它们在同一网段上。对于开发板IP的设置可以进入u-boot命令模式进行设置。具体如下:
set ipaddr 200.200.200.66
set serverip 200.200.200.99
然后使用tftp烧写:
tftp 30000000 uImage
nand erase kernel
nand write.jffs2 30000000 kernel
5、nfs挂载
为了方便内核的学习和调试,作者在此建议使用nfs挂载启动内核,这样就不用将每次的修改烧写进flash也能验证修改的结果。
要使用nfs也得设置电脑与开发板的IP地址在同一网段上,如上。设置完后便可以进入u-boot命令模式输入命令,如下:
nfs 30000000 200.200.200.99:/nfs/kernel/uImage //将uImage加载到内存的指定地址
bootm 30000000 //从指定地址启动内核
待完善