通过NFS挂载根文件系统
实验八通过NFS挂载根文件系统
【实验目的】
掌握bootcmd、bootargs环境变量的设置和NFS挂载根文件系统的方法。
说明:在实验中命令行提示符为“$”表示在主机上运行,“#”表示在目标板上运行。
【实验环境】
1. Ubuntu 12.04 32位发行版
2. FS6818平台
【实验步骤】
1. 将“案例源码\第一天\镜像文件\rootfs.tar.xz”拷贝至Ubuntu主机的/source目录中。
2. 如果/source目录下有rootfs目录,使用下面的命令删除。
$ rm -rf /source/rootfs
3. 进入到/source目录,解压根文件系统的压缩文件。
$ cd /source
$ tar -xvf rootfs.tar.xz
4. 将/source/rootfs目录设置为NFS共享目录。
1).$sudo vi /etc/exports
添加:/source/rootfs *(rw,sync,no_root_squash,no_subtree_check)
含义:
/source:共享目录(存放开发板访问的文件系统)
/rootfs : 文件系统名字(linux内核访问的第一个文件系统)
rw : 读写权限(当用户进入到文件系统后,对该文件系统拥有rw权限)
sync : 把文件同步到内存和硬盘
no_root_squash : 如果以root用户进入到文件系统后,对文件系统进行的操作不需要权限
no_subtree_check : 如果文件系统的子目录为共享目录,则访问时不会检测父目录的权限
2).启动服务器
$ sudo /etc/init.d/nfs-kernel-server restart
5. 开发板上电后,运行U-Boot,设置bootcmd环境变量和bootargs环境变量。
FS6818# setenv serverip192.168.0.10
FS6818# setenv ipaddr192.168.0.100
FS6818# setenv bootcmd mmc read 0x48000000 0x800 0x3000\;bootm 0x48000000
FS6818# setenv bootargs root=/dev/nfs nfsroot=192.168.7.149:/source/rootfs rw console=ttySAC2,115200init=/linuxrc ip=192.168.7.150
FS6818 # saveenv
6. 在串口终端中使用下面的命令来运行系统并挂载根文件系统。
FS6818 # boot
7. 如果重启开发板,不需要任何操作则可以自动启动Linux系统。
实验中遇到问题:加载到 “[ 4.229000] #1: SPDIF-Transciever”停止
原因:没插网线
[ 4.223000] ALSA device list:
[ 4.226000] #0: I2S-WM8960
[ 4.229000] #1: SPDIF-Transciever
[ 140.316000] INFO: task swapper/0:1 blocked for more than 10 seconds.
[ 140.317000] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[ 140.324000] swapper/0 D c06d7304 0 1 0 0x00000000
[ 190.332000] INFO: task swapper/0:1 blocked for more than 10 seconds.
[ 190.333000] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[ 190.340000] swapper/0 D c06d7304 0 1 0 0x00000000
[ 200.347000] INFO: task swapper/0:1 blocked for more than 10 seconds.
[ 200.347000] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[ 200.355000] swapper/0 D c06d7304 0 1 0 0x00000000