一、实验环境
硬件: JZ2440开发板
busybox版本: busybox-1.7.0
交叉工具链: gcc-3.4.5-glibc-2.3.6
二、实验步骤
1、解压内核源码包
为了方便以后查看我们对内核源码所作的修改可以使用git建立一个代码仓库,从而记录修改的点滴
tar xjfv busybox-1.7.0.tar.bz2
cd busybox-1.7.0
git init //初始git仓库
git add . //将目录下的所有添加到暂存区
//将所有提交到仓库
git commit -a -m "this iis busybox source without any change"
2、配置编译
进入busybox-1.7.0目录下执行 make menuconfig 并根据自己需要修改配置选项保存后退出便会生成
一个.config配置文件。编译前还得修改Makefile指定交叉工具链
ARCH ?= arm
CROSS_COMPILE ?= /opt/cross-tools/gcc-3.4.5-glibc-2.3.6/bin/arm-linux-
修改完之后便可执行make命令进行编译busybox。最后安装,执行如下命令:
make CONFIG_PREFIX=dir_path install
eg:make CONFIG_PREFIX=/nfs/sysfs/fs_s3c2440
就可以将busybox安装到dir_path目录下。安装完之后的目录结构如下图:
3、安装glibc库
在开发板上只需要加载器和动态库,在此我们构建一个lib/目录,命令如下:
mkdir -p /nfs/sysfs/s3c2440/lib
cd /opt/cross-tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib //交叉工具链所在目录
cp *.so* /nfs/sysfs/fs_s3c2440/lib/ -d
4、构建etc目录
5、构建dev目录
6、构建其他目录
如果没有 /proc、/tmp、/sys则会有以下错误提示
mount: mounting proc on /proc failed: No such file or directory
mount: mounting tmpfs on /tmp failed: No such file or directory
mdev: /sys/block: No such file or directory
mdev: /sys/class: No such file or directory
7、制作与烧写yaffs
制作: mkyaffs2image fs_s3c2440 root.yaffs2
在烧写内核之前得先安装tftp,具体的安装和使用这里不细说(参考ubuntu14.04开发环境搭建),同时还得设置电脑与开发板的
IP地址,使得它们在同一网段上。对于开发板IP的设置可以进入u-boot命令模式进行设置。具体如下:
set ipaddr 200.200.200.66
set serverip 200.200.200.99
然后使用tftp烧写:
tftp 30000000 root.yaffs2
nand erase root
nand write.yaffs 30000000 0x00260000 $(filesize)
8、使用nfs启动根文件系统
为了方便内核的学习和调试,作者在此建议使用nfs挂载启动根文件,这样就不用将每次的修改烧写进flash也能验证修改的结果。
为了使得系统启动时能够通过nfs读取到本机的文件系统,首先本机的nfs服务和板子的nfs服务必须的配置好,这里不细说。在此
主要介绍一下启动参数的设置具体如下:
格式: nfsroot=[
eg: set bootargs noinitrd root=/dev/nfs nfsroot=200.200.200.99:/nfs/sysfs/fs_s3c2440 ip=200.200.200.88:200.200.200.99:200.200.200.1:
255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
如果要恢复从flash启动可以将参数设置为:
set bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0
待完善