Uboot已经编译完成,下一步就是制作根文件系统,初步打算使用uboot的tftp功能网络下载内核,然后挂载nfs文件系统,进行驱动开发。
1.创建目录。
选择你想创建根文件系统的目录,在目录下创建所必须的目录和子目录。
#mkdir rootfs
#cd rootfs
#mkdir bin dev etc lib proc sbin sys usr mnt tmp ar
#mkdir usr/bin usr/lib usr/sbin lib/modules
2.创建设备文件
linux内核启动后所必须的设备文件
#cd rootfs/dev
#mknod -m 666 console c 5 1
#mknod -m 666 null c 1 3
3.加入配置文件
由于/etc目录下的配置文件是和硬件芯片无关的配置项,所以可以拷贝来直接使用,这是很自由定制的项目,下载一个国嵌提供的基本配置文件,下载后解压到/etc根目录,需要其他的设置可以自己添加。
4.添加内核模块
进入你的内核源代码目录,编译内核模块。并且安装到根文件系统目录 .
#cd 内核代码目录
#make modules ARCH=arm CROSS_COMPILE=arm-linux-
#make modules_install ARCH=arm INSTALL_MOD_PATH=根文件系统目录
进行完最后一步的安装过程后,内核模块会被安装到根文件系统的/lib目录下对应的内核版本文件夹
5.编译安装busybox
这次使用的是1.13.3版本的busybox(busybox-1.13.3),busybox是一个用于嵌入式linux系统的精简版二进制程序集合,用于生成linux下日常使用的一些命令,例如ls,mv等等。
5.1 配置busybox:
#make menuconfig
5.2 编译busybox
#make
#make install
经过这五个步骤,一级基础的根文件系统就建立了。下一步就是,选择文件系统的挂载方式。
1.基于nandflash的文件系统:yaffs2,ubifs
2.基于norflash的文件系统:jffs2
3.基于内存的文件系统:ramdisk,initramfs
4.基于网络的文件系统:NFS
由于这次使用挂载根文件系统是用于调试驱动,所以选择nfs文件系统,内核通过tftp下载到内存启动,然后挂载nfs根文件系统。
选择任何一个文件系统都需要在编译内核的时候,选择相应的支持选项。以nfs为例:
配置内核:make menuconfig
1.首先要取消内核中的initramfs文件系统的选项:位于General setup--》Initial RAM filesystem and RAM disk support
2.选择NFS文件系统,位于:File systems--》Network file Systems--》Root file system on NFS
3.编译内核:make uImage ARCH=arm CROSS_COMPILE=arm-linux-,生成uboot可以引导的uImage镜像。
4.参数设置
4.1主机tftp客户端配置(我的目录是/home/gexueyuan/tftp):
创建文件/etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /home/gexueyuan/tftp
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
4.2 主机nfs服务器端的配置文件,位于/etc/exports(我的nfs文件系统跟=根目录位于/home/gexueyuan/nfs/rootfs):
/home/gexueyuan/nfs/rootfs *(rw,sync,no_root_squash,no_subtree_check)
首先要设置好你的开发板ip,主机host服务器ip等网络参数要设置好,可以先去uboot的shell来检测和主机的连接(ping命令)
然后设置bootarg参数,这是一个传递给内核的启动参数:
setenv bootargs "console=ttySAC0,115200 mem=256M root=/dev/nfs nfsroot=192.168.1.51:/home/gexueyuan/nfs/rootfs ,tcp ip=192.168.1.97:192.168.1.51:192.168.1.1:255.255.255.0:gexueyuan:eth0:off"
添加了tcp参数,防止网络的udp协议出问题。
bootcmd参数为:
tftp 0x50018000 uImage;bootm 0x50018000