1.安裝mkyaffsimage, mkyaffs2image命令(用來製做yaffs文件系統)linux
第一個命令針對Flash小頁512B,第二個針對Flash大頁2KB
首先下載壓縮文件 yaffs_source_util_larger_small_page_nand.tar.bz2
安裝mkyaffs2image命令爲例:服務器
tar –xjf yaffs_source_util_larger_small_page_nand.tar.bz2 //解壓出yaffs1和yaffs2 cd /Development_util_ok/yaffs2/utils make //生成mkyaffsimage和mkyaffs2image sudo cp mkyaffs2image /usr/local/bin //將mkyaffs2image命令複製到可執行目錄路徑下
而後輸入mkyaffs2image命令,若是不能運行,則使用chmod命令加可執行屬性便可函數
2.安裝mkfs.jffs2命令(用來製做jffs文件系統)
首先下載壓縮文件mtd-utils-05.07.23.tar.bz2,而後安裝步驟以下:spa
tar -xf mtd-utils-05.07.23.tar.bz2 cd mtd-utils-05.07.23/util make sudo make install
3.製做文件系統rest
3.1 解壓安裝busybox-1.7.0code
cd busybox-1.7.0 make menuconfig
而後在菜單裏進入-> Busybox Settings-> Busybox Library Tuning選上: server
[*] Tab completion //tab補齊命令
而後輸入vi Makefile,找到CROSS_COMPILE字段,後面添加」arm-linux-」:blog
接着輸入:進程
make //編譯 mkdir /work/nfs_root/busybox1.7_fs //建立要安裝的文件系統目錄 make install CONFIG_PREFIX=/work/nfs_root/busybox1.7_fs //指定安裝位置
安裝好了後,能夠看到busybox1.7_fs/bin裏便保存着linux命令,以下圖所示:ip
3.2構造lib目錄(被應用程序調用的C庫函數,好比:printf,strcmp,fopen等)
cd /work/nfs_root/busybox1.7_fs mkdir lib //建立lib目錄 (存放庫函數) cd /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib //進入源目錄 cp *.so* /work/nfs_root/ busybox1.7_fs/lib -d //複製glibc庫到lib目錄(*:匹配符,-d:表示若是是連接文件,則繼續保持連接)
3.3構造etc目錄
在etc目錄下,須要構造如下3個文件
1)構造/etc/inittab
cd /work/nfs_root/busybox1.7_fs mkdir etc/ vi etc/inittab
添加如下幾句:
::sysinit:/etc/init.d/rcS //內核啓動時,執行/etc/init.d/rcS console::askfirst:-/bin/sh //啓動console對應的-/bin/sh進程以前,等待用戶按enter鍵,等價於: ::askfirst:-/bin/sh ::ctrlaltdel:/sbin/reboot //按下ctrl+alt+del組合鍵時,啓動reboot命令 ::shutdown:/bin/umount -a -r //系統關機前,卸載全部文件系統
2)構造etc/init.d/rcS
mkdir etc/init.d/
vi etc/init.d/rcS
添加如下幾句:
mount -a //裝載/etc/fstab中的文件系統 echo /sbin/mdev > /proc/sys/kernel/hotplug //使/sbin/medv指向hotplug,從而支持熱拔插 mdev -s //使用medv命令將會掃描/sys/class和/sys/block中全部的類設備目錄,而後把讀取到的dev相關文件自動在/dev建立下的全部設備節點,
並給rcS文件加上可執行權限:
sudo chmod +x etc/init.d/rcS //使腳本rcS可以執行命令
3)構造etc/fstab
PS: 使用mdev命令須要sysfs、tmpfs、devpts這3個文件系統的支持
mkdir proc/ //建立proc要掛載的目錄 mkdir sys/ //建立sysfs要掛載的目錄, mkdir dev/pts -p //建立devpts要掛載的目錄 vi etc/fstab
添加如下幾句
# device mount-point type options dump fsck order proc /proc proc defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 sysfs /sys sysfs defaults 0 0 devpts /dev/pts devpts defaults 0 0
3.4構造其它文件/目錄
1)建立終端文件(dev/console和dev/null)
sudo mknod -m 660 dev/console c 5 1 sudo mknod -m 660 dev/null c 1 3
2)建立其它目錄
mkdir mnt tmp root
4.製做燒寫yaffs2
mkyaffs2image busybox1.7_fs busybox1.7_fs.yaffs2 //使用mkyaffs2image生成yaffs2
進入uboot燒寫:
nfs 30000000 192.168.1.199:/work/nfs_root/busybox1.7_fs.yaffs2 nand erase root nand write.yaffs 0x30000000 0x260000 $(filesize) // write.yaffs:實現yaffs文件系統鏡像的燒寫, 若是NandFlash相應的區域有壞塊,能夠跳過壞塊。
設置啓動參數:
set bootargs noinitrd root=/dev/mtdblock3 rootfstype=yaffs2 init=/linuxrc console=ttySAC0 save
啓動內核:
5.製做燒寫jffs2
mkfs.jffs2 -n -s 2048 -e 128KiB -d busybox1.7_fs -o busybox1.7_fs.jffs2 /*-n:表示每塊不添加清除標記, -s:size一頁大小爲2k, -e:一塊大小爲128kb -d:製做的dir目錄, -o:輸出文件 */
進入uboot燒寫:
nfs 30000000 192.168.1.199:/work/nfs_root/busybox1.7_fs.jffs2 nand erase root nand write.jffs2 0x30000000 0x260000 $(filesize) // write. jffs2 :和yffs原理同樣
設置啓動參數:
set bootargs noinitrd root=/dev/mtdblock3 rootfstype=jffs2 init=/linuxrc console=ttySAC0 save
啓動內核:
6.經過uboot啓動nfs系統
6.1 在內核documentation目錄裏找到nfsroot.txt文檔
找到nfs服務器地址設置"nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]":
找到nfs客戶端設置"ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>":
6.2 因此設置啓動參數爲
set bootargs noinitrd root=/dev/nfs nfsroot=192.168.1.199:/work/nfs_root/busybox1.7_fs ip=192.168.1.198:192.168.1.199:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
啓動內核:
7.在內核裏使用mount掛載nfs目錄
mount -t nfs -o nolock,vers=2 192.168.1.199:/work/nfs_root /mnt //mount命令將遠端虛擬機/work/nfs_root目錄掛載到開發板/mnt目錄裏 //nolock:禁用文件鎖 vers=2:nfs版本協議2 192.168.1.199:虛擬機地址
運行出錯:
找到緣由是網卡沒設置,輸入mount前設置便可(也能夠直接寫入/etc/init.d/rcS):
ifconfig eth0 up ifconfig eth0 192.168.1.198
8.若是mount掛載/啓動nfs系統失敗,那麼有可能有下面兩個緣由
8.1 肯定板子是否與虛擬機位於同一網段
ifconfig eth0 up //開啓網關0,鏈接網線到路由器 ifconfig eth0 192.168.1.107 //設置ip,與虛擬機ip網段同樣, ping 192.168.1.106 //與虛擬機ping一下,是否已通
8.2 肯定虛擬機是否能被掛載目錄
要使虛擬機可以被掛載目錄,在/etc/exports中添加須要被掛載的目錄便可
例如:
sudo vi /etc/exports /work/nfs_root *(rw,sync,no_root_squash) //要被掛載的目錄:/work/nfs_root sudo /etc/init.d/nfs-kernel-sever restart //而後輸入命令重啓nfs服務