嵌入式Linux根文件系统,简单地说,根文件系统就是一种目录结构
注意根文件系统和普通的文件系统的区别。
常见的Linux根文件系统有:
(1)NFS(网络根文件系统),主要用于 产品调试阶段 。
(2)YAFFS,主要用于产品的发布阶段。大量生产直接写入NandFlash。
搭建NFS根文件系统
这个过程包括
1、设置NFS共享目录
2、启动NFS服务
3、重新设置开发板的环境变量
4、挂载根文件系统
具体步骤如下:
1、解压根文件系统源码包到 /home/lwb/目录下
#tar xvzf root_qtopia.tar.gz /home/lwb
解压后则在/home/lwb/目录下生成了一个root_qtopia目录
2、cd root_qtopia 进入该目录
3、pwd 显示当前目录 /home/lwb/qtopia 这个目录下面要用到
4、vim /etc/exports //编辑导出目录
在exports文件末尾添加:
/home/lwb/root_qtopia *(rw,sync,no_root_squash) //导出/home/lwb/root_qtopia目录 可读可写属性 同步 root权限挂载的。
保存退出
5、使生效: #exportfs –ra
6、#exportfs –v 查看是否真的已导出
显示:/home/lwb/root_qtopia (rw,wdelay,no_root_squash,anonuid=65534,anongid=65534) 显然导出成功
导出成功 、服务器设置好啦。
7、重启NFS服务
#/etc/init.d/nfs start //启动nfs服务
开始挂载NFS(网络根文件系统):
1、重新设置环境变量:
[u-boot@SMDK2440A]# setenv bootargs console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.108:/home/lwb/root_qtopia ip=192.168.1.226:192.168.1.108:192.168.1.108:255.255.255.0:SMDK2440A.arm9.net:eth0:off
2、保存环境变量:
[u-boot@SMDK2440A]# saveenv
//执行保存环境变量结果如下:
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x4000000000002 -- 0% complete.
Writing to Nand... done
3、查看环境变量:
[u-boot@SMDK2440A]# printenv
bootcmd=nand read 0x30008000 60000 500000;bootm 0x30008000
bootdelay=1
baudrate=115200
ethaddr=08:08:11:18:12:27
netmask=255.255.255.0
embedclub=bmp d 70000
stdin=serial
stdout=serial
stderr=serial
lcdtype=w
ethact=dm9000
serverip=192.168.1.108
ipaddr=192.168.1.266
gatewayip=192.168.1.1
bootargs=console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.108:/home/lwb/root_qtopia ip=192.168.1.226:192.168.1.108:192.168.1.108:255.255.255.0:SMDK2440A.arm9.net:eth0:off
Environment size: 459/131068 bytes
1、挂在文件系统
[u-boot@SMDK2440A]#boot
结果如下:
[u-boot@SMDK2440A]# boot
NAND read: device 0 offset 0x60000, size 0x500000
5242880 bytes read: OK
## Booting kernel from Legacy Image at 30008000 ...
Image Name: Linux kernel Image by embedclub
Created: 2013-05-27 8:52:50 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2286764 Bytes = 2.2 MB
Load Address: 30008000
Entry Point: 30008040
Verifying Checksum ... OK
XIP Kernel Image ... OK
OK
Starting kernel ...
Uncompressing Linux..................................................................................................................................................... done, booting the kernel.
Linux version 2.6.32.2-FriendlyARM (root@localhost.localdomain) (gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72) ) #1 Sun May 19 10:37:56 CST 2013
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
此处省略很多………………………………
Looking up port of RPC 100003/2 on 192.168.1.108
eth0: link up, 100Mbps, full-duplex, lpa 0xCDE1
Looking up port of RPC 100005/1 on 192.168.1.108
nfs: server 192.168.1.108 not responding, still trying
nfs: server 192.168.1.108 OK
VFS: Mounted root (nfs filesystem) on device 0:11.
Freeing init memory: 160K
[06/Jul/2005:01:37:10 +0000] boa: server version Boa/0.94.13
[06/Jul/2005:01:37:10 +0000] boa: server built Mar 26 2009 at 15:28:42.
[06/Jul/2005:01:37:10 +0000] boa: starting server pid=680, port 80
Try to bring eth0 interface up......NFS root ...Done
Please press Enter to activate this console.
按回车键:出现如下结果:
Please press Enter to activate this console.
[root@FriendlyARM /]# ls
bin etc lib mnt proc sbin tmp var
dev home linuxrc opt root sys usr www
[root@FriendlyARM /]#
成功,哈哈!开发板和PC上的Linux是同步的。
测试一下:在PC上的/home/lwb/root_qtopia/目录下:#touch hello
在SecureCRT 上#ls一下 是会出现 hello目录的。
来个多线程的多生产者、多消费者的程序在开发板上运行运行,哈哈
把已写好的程序pc3.c通过arm-linux-gcc pc3.c
–o pc3.o
把pc3.o 拷贝到/home/lwb/root_qtopia/bin目录下
在secureCRT下的/bin目录下执行 ./pc3.o 成功
各种兴奋,哈哈!因为之前有过:
(1) 和开发板连接的网线的另一端没和PC连接,但我一直以为是连啦!
(2) 连好网线后,还是没挂接上NFS根文件系统。在PC上的Linux重启一下NFS服务之后一切OK,哈哈!