nfs起根文件系统
这两天做了下nfs起根文件系统,在此总结下。对于nfs的配置就不说了,参考:http://www.cnblogs.com/zjfdbz/archive/2013/01/17/2865133.html
还有我所用的交叉编译工具链也如上述网址进行配置的。
配置环境:Ubuntu 12.04
1.配置内核
首先解压内核到工作目录,然后进入内核目录,执行如下语句。
#sudo su
#make menuconfig (如ubuntu下的用户不能执行该命令则先执行如下命令 sudo apt-get install libncurses5-dev)
要使内核支持nfs起根文件系统,内核必须选上如下配置选项:
File systems -->Network File System →
<*> NFS client support
[*] NFS client support for NFS version 3
[*] Root file system on NFS
保存退出。
2.编译内核
执行如下命令:
#make clean
#make (或直接make uImage 跳过第三步)
编译后生成的内核映像zImage位于arch/arm/boot目录下。将其拷贝到/nfs目录下
#cp arch/arm/boot/zImage /nfs
3.制作uImage
将uImage制作工具mkimage拷贝到/nfs目录下
#cd /opt/workspace/u-boot_dir/tools
#cp mkimage /share (需要事先编译过uboot才有)
制作uImage
#cd /nfs
#./mkimage -A arm -O linux -T kernel -C none -a 0x82000000 -e 0x82000040 -n linux-2.6.32 -d zImage uImage
关于mkimage的使用方法参见:http://www.cnblogs.com/zjfdbz/archive/2013/01/18/2865683.html
4.制作根文件系统 (此步我并没怎么做,因为我光盘资料自带了~~,对根文件系统也不是很了解,还得花时间再研究研究,以下是网上摘来的)
a)创建根文件系统目录:
#cd /nfs
#mkdir rootfs
#cd rootfs
#mkdir bin dev etc lib proc sbin sys usr mnt tmp var
#mkdir usr/bin usr/lib usr/sbin lib/modules
b)创建最基本的设备文件: (此步若不做在之后的操作中会出现warning:unable to open an initial console警告 )
#cd dev
#mknod -m 666 console c 5 1
#mknod -m 666 null c 1 3
#cd ..
c)安装/etc配置文件:
可从下面地址下载etc配置文件,其中包含了之后要用到的busybox。
http://download.csdn.net/detail/xgg0602/4012229
将etc配置文件直接解压到安装目录下:
tar zxvf etc.tar.gz -C /nfs/rootfs
d)编译内核模块:
#cd /opt/workspace/kernel_dir/
#sudo su
#make modules
e)安装内核模块:
#make modules_install ARCH=arm INSTALL_MOD_PATH=/nfs/rootfs
f)配置busybox
将之前下载的busybox解压,放到你的工作目录下,并进入busybox目录,执行如下命令
#sudo su
#make menuconfig
Busybox Settings -> build Options ->选中"Build busybox as a static binary“,即静态链接,免去拷贝大量的库文件。
同时在“Build Busybox as a static binary”同一个页面的下面“ Cross Compiler prefix”,按键盘Enter键进入,然后输入 /opt/Tools/arm-2009q1/bin/arm-none-linux-gnueabi- (说明这是我自己安装的交叉编译工具链的位置)
Installation Options -> 选中"Don't use /usr",以免busybox不慎被安装到宿主机系统的相应目录下,破坏宿主机系统。
Busybox Installation Prefix (/nfs/rootfs),修改该选项表明编译后的busybox将安装到该位置。
g)编译、安装busybox
#make
编译完成后安装
#make install
这样文件系统就制作完了。
5.用网线和串口线连接好开发板和电脑(暂不开启开发板),打开minicom:
#sudo minicom
接通开发板的电源,当出现如下字符后Hit any key to stop autoboot ,敲击键盘空格键进入uboot。
6.使用uboot命令配置环境变量
#setenv serverip 10.0.0.1
#setenv ethaddr 00:26:6c:5a:a7:51
说明:该硬件地址是自己主机的硬件地址,在另一个终端下执行ifconfig eth0 查看
#setenv ipaddr 10.0.0.2
#setenv bootargs root=/dev/nfs rw nfsroot=10.0.0.1:/nfs/rootfs ip=10.0.0.2:10.0.0.1::255.255.255.0 console=ttyS2,115200n8 mem=64M (这个要根据你自己的情况进行设置)
#saveenv
7.在另一个终端下执行如下命令配置主机ip地址
#sudo ifconfig eth0 10.0.0.1
9.使用uboot下载内核
#nfs 0x82000000 10.0.0.1:/nfs/uImage
10.启动内核
#bootm 0x82000000
到此就算大功告成了~~~