1. 建立根文件系统目录与文件
1.1 创建目录
#mkdir rootfs //根文件系统目录名可随便取,一般为rootfs
#cd rootfs
#mkdir bin dev etc lib proc sbin sys usr mnt tmp var
#mkdir usr/bin usr/lib usr/sbin /lib/modules
1.2 创建设备文件
#cd rootfs/dev
#mknod -m 666 console c 5 1
#mknod -m 666 null c 1 3
1.3 加入配置文件
(把厂家提供的etc.tar.gz复制到Linux中,其中包含fstab、init.d、inittab以及profile这四个文件)
#tar etc.tar.gz
#mv etc/* /rootfs/etc/ -rf
1.4 添加内核模块(先略过这步骤,直至uImage编译完成后再进行此步)
//进入内核源代码文件夹
#cd /linux
#make modules ARCH=arm CROSS_COMPILE=arm-linux-
//把散落在内核源码各文件夹中的.ko文件安装到rootfs/lib/modules里面。
#make modules_install ARCH=arm INSTALL_MOD_PATH=rootfs
1.5 编译busybox(Busybox:嵌入式开发中的瑞士军刀,系统小工具)
1.5.1 配置busybox
解压busybox源码,进入目录当中。
#make menuconfig
1.Busybox Settings -> buile Options ->
选中“Build busybox as a static linary”静态链接
2.设置交叉编译工具链Cross Compiler prefix (arm-linux-)
Installation Options ->
3.选中“Don't use /usr”,避免busybox安装至宿主机的/usr目录下
4.Busybox Installation Prefix(...../rootfs)
该选项表明编译后的busybox的安装位置。
对选项烧左修改然后退出。(awk、diff、vi等编辑器可不选)
1.5.2 编译、安装busybox
#make
#make install //安装完成后,常用命令保存在rootfs/bin/中。
2. 挂载根文件系统到内核
2.1 挂载方式简介
根据存储设备的硬件特性、系统需求,不同的文件系统类型有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为Ram和Flash,常用的基于存储设备的文件系统类型包括:jffs2,yaffs2,ubifs,ramdisk等。
基于Nandflash的文件系统:yaffs2和UbiFS支持可读可写,cramfs支持只读。
基于Norflash的文件系统:Jffs2支持可读可写
基于内存的文件系统:Ramdisk是老式的文件系统,在内存用一块固定大小的区域模拟磁盘,现在少用。Initramfs是把压缩在镜像中的内容加压到内存中的快速文件系统。
基于网络的文件系统:NFS,适合进行系统调试时采用。
2.2 使用initramfs
2.2.1 配置Linux内核
#cd ../rootfs/
#ln -s ./bin/busybox init //为何要这么做?
#cd ../linux //linux为内核源码目录
#make menuconfig ARCH=arm
General setup -> 选中Initial RAM filesystem and RAM disk......
修改Initramfs的目录路径为(...../rootfs)
2.2.2 编译内核
把uImage(uImage生成的路径未/arch/arm/boot/)放进/tftp/,等待被下载到开发板中。
2.2.3 修改环境变量,下载系统内核
setenv bootargs noinitrd console=ttySAC0,115200
saveenv
2.2.4 下载系统内核
tftp uImage 0x31000000
bootm 0x31000000
2.3 NFS挂载
initramfs每次更改都需要重新编译内核,因此在开发阶段一般使用NFS。
2.2.1 配置Linux内核
#cd ../rootfs/
#ln -s ./bin/busybox init
#cd ../linux //linux为内核源码目录
#make menuconfig ARCH=arm
General setup -> 取消选中Initial RAM filesystem and RAM disk......
File system -> 选中Network File Systems -> 选中Root file system on NFS
2.2.2 编译内核
把uImage(uImage生成的路径未/arch/arm/boot/)放进/tftp/,等待被下载到开发板中。
2.2.3 修改环境变量,
setenv bootargs noinitrd console=ttySAC0,115200 init=/init root=/dev/nfs rw nfsroot=192.168.123.4:/arm/rootfs ip=192.168.123.18:192.168.123.4:192.168.123.254:255.255.255.0::eth0:off
saveenv
2.2.4 确保NFS服务器已经启动
vi /etc/exports //确认NFS服务器配置,路径为rootfs
/etc/init.d/nfs restart //重启NFS服务器
2.2.5 下载系统内核
tftp uImage 0x31000000
bootm 0x31000000
(解决TQ2440系统不断重启问题,在配置内核是,取消选中watchdog)