主要分为3个部分
rootfs相关文件创建及配置
虚拟机网络地址及 nfs 服务配置
开发板网络和环境变量配置
1.rootfs相关文件创建及配置
在安装好相应的交叉工具链后,下载busybox源码并解压。
进入busybox的源码目录执行#make menuconfig
需要配置的总体选项如下:
Symbol: BUILD_LIBBUSYBOX [=y]//编译为共享库
CROSS_COMPILER_PREFIX [=arm-linux-] //选择编译器
PREFIX [=/root/work/4412/rootfs/root_nfs/] //注意这里要修改为自己制作的 rootfs 对应的目录
Symbol: FEATURE_USERNAME_COMPLETION [=y]//配置用户名补全
Symbol: FEATURE_TAB_COMPLETION [=y]//TAB 键命令不全功能
Symbol: FEATURE_EDITING_FANCY_PROMPT [=y]//配置命令提示符功能
设置完后,保存配置并退出。
在源码目录下编译#make
编译成功完后,再执行下面命令,把刚才编译后的文件安装到之前配置的根文件系统路径下面
# make install
验证 busybox 的安装
上面设置的根文件系统路径为/root/work/4412/ rootfs/root_nfs/,查看该路径下面是否有对应的文件,如下
[root@localhost rootfs]#ls /root/work/4412/ rootfs/root_nfs/
bin liblinuxrc sbin usr
看到上面的信息,说明 busybox 安装成功
创建 root fs 文件
首先需要进入到前面设置的 rootfs 文件目录中
[root@localhost root_nfs]#cd /root/work/4412/ rootfs/root_nfs/
复制动态库文件
由于配置 busybox 时候采用动态链接方式编译,所以,要把它所依赖的动态库文件从交叉编译工具链源码中
复制到安装目录下,并删除静态库文件(不需要)
[root@localhost root_nfs]# cp /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/ ./ -rap
[root@localhost root_nfs]# rm -f lib/*.a //删除静态库文件
创建其他目录文件
创建需要的目录
[root@localhost root_nfs]#mkdir -p dev etc/init.d home proc sys root opt tmp var
创建控制台设备文件
[root@localhost root_nfs]# mknod dev/console c 5 1
创建 etc 目录下文件
[root@localhost root_nfs]# cp /etc/fstab etc/
创建 inittab 文件: 复制 busybox-1.17.2 中文件
[root@localhost root_nfs]#cp ../busybox-1.17.2/examples/inittab /root/work/4412/rootfs/root_nfs/etc/
修改 inittab 里面的内容
[root@localhost root_nfs]# vim etc/ inittab
只需要保留以下 4 行:
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh //修改该行,在前面加 console
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a –r
创建并开始编辑 etc/init.d/rcS 文件
[root@localhost root_nfs]# vim etc/init.d/rcS
rcS 文件添加以下内容:
#!/bin/sh
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
/bin/hostname Andy //控制台显示的主机名,可以改成自己想要的名字
给 rcS 增加执行权限
[root@localhost root_nfs]# chmod +x etc/init.d/rcS
说明: rcS 这个文件中的命令,在系统启动后,挂接上文件系统后会全部执行。也就是说需要开机自动执行
的程序都可以写在这里
创建并开始编辑 etc/profile 文件
[root@localhost root_nfs]# vim etc/profile
增加内容如下:
USER=”`id -un`” //注意 id -un 前面的符号“`”是倒钩符号,在键盘上和~共用一个按键
LOGNAME=$USER
PS1='[\u@\h \W]# ‘ //此处为普通的单引号,和上面的倒钩符号是不一样的
PATH=$PATH
HOSTNAME=`/bin/hostname` //注意/bin 前面的符号“`”是倒钩符号,在键盘上和~共用一个按键
export USER LOGNAME PS1 PATH
说明: etc/profile/这个文件用来添加环境变量,以上的内容是实现控制台终端命令提示符号模板功能。
\u 用户名, \h 主机名, \W 当前路径名
复制用户名配置文件
用户名配置需要使用 etc/group 和 etc/passwd 两个文件, 可以直接从从虚拟机的 Linux 系统的/etc 目录中复
制这两个文件到自己开发板根文件系统 etc 目录就行。
[root@localhost root_nfs]#cp /etc/group etc/passwd etc/
虚拟机网络地址及 nfs 服务配置
设置虚拟机共享目录
编辑/etc/exports
[root@localhost root_nfs]#vim /etc/exports
增加如下一行
/root/work/4412/rootfs/root_nfs/ *(rw,sync,no_root_squash)
注意:修改该文件后,需要要重启 NFS 服务器才能生效,如果还有问题,就修改一下etc/目录下的文件的执行权限
参数说明:
/root/work/4412/rootfs/root_nfs/为要共享的 NFS 目录,该目录是上面创建的,注意需要按自己对应的目录名
修改。
*:任何主机都可以连接访问这个共享目录,
也可以指定访问的主机
/root/work/4412/rootfs/root_nfs/ 192.168.0.XXX(rw,sync,no_root_squash)
root/work/4412/rootfs/root_nfs/ 为对外共享的目录;
192.168.0.XXX 为对外共享的主机;
(rw,sync,no_root_squash):访问这个共享目录的权限和属性。
rw: 可读写的权限;
ro: 只读的权限;
no_root_squash: 登入到 NFS 主机的用户如果是 ROOT 用户,他就拥有 ROOT 的权限
root_squash: 在登入 NFS 主机使用目录的使用者如果是 root 时,那么这个使用者的权限
sync: 资料同步写入存储器中
async:资料会先暂时存放在内存中,不会直接写入硬盘
虚拟机的nfs设置:
1.查看nfs服务是否安装
[root@localhost rootfs]# rpm -qa | grep nfs
2.启动nfs
[root@localhost rootfs]# service nfs start
3.设置开机启动 nfs 服务
[root@localhost rootfs]# chkconfig nfs on
4.查看 nfs 服务是否启动
[root@localhost rootfs]# service –status-all | grep nfs
NFS 服务的其他操作命令
service nfs restart 重启 nfs 服务
service nfs stop
service nfs reload 当修改过/etc/exports 文件后不用重启服务可执行该命令
设置虚拟机的 IP 地址及 DNS 地址:
1.确保 PC 主机和虚拟机的网络为桥接方式
2.设置虚拟机桥接到有线网卡
方式1:
设置 PC 主机端, 把无线网卡—》属性里面里的 vmware bridge protocol 的√去掉
方式2:
虚拟机工具栏处点击 编辑->虚拟网络编辑器->Vmnet0->桥接到有线网卡 (显示为有线网卡信息,默认桥接方式为自动) 。如下选择为有线网卡
关闭虚拟机和 PC 主机的防火墙
[root@localhost work]# setup
关闭 PC 主机的防火墙
设置虚拟机 IP 地址, DNS 服务器
选择静态 IP 地址方式, 输入静态 IP 地址和 DNS 服务器地址
IP 地址和 DNS 服务器设置完成后,重启一下网络服务,使 IP 生效
[root@localhost work]#service network restart
如果执行上面命令出现错误提示,则再按下面步骤执行命令
[root@localhost work]#service NetworkManager stop
[root@localhost work]#service network restart
[root@localhost work]#service NetworkManager start
再点击下面的有线网络图标,选择网卡开始连接,此处为网卡 0, System eth0
查看 IP 地址是否设置成功,输入如下命令
[root@localhost work]# ifconfig
网络设置总结:
虚拟机网络为桥接方式
虚拟机、开发板的 ip 地址在同一个网段, 网关和子网掩码一定要相同
虚拟机的 DNS 服务器地址一定要设置
虚拟机和 pc 主机的防火墙需要关闭
测试虚拟机的 NFS 挂载功能
如果虚拟机的 IP 地址和 NFS 服务都配置 OK,则在虚拟机本机中测试 NFS 的挂载功能,如果本机测试都不成
功,则开发板的根文件系统挂载肯定不行。
测试方法,在虚拟机终端中输入如下命令:
[root@localhost work]#mount -t nfs 192.168.1.100:/root/work/4412/rootfs/root_nfs /mnt/test
如果 mount 挂载成功,则如果没有提示任何信息,并且可以发现/root/work/4412/rootfs/root_nf 目录和
/mnt/test 目录下面文件相同,并且是同步的。
如果 mount 挂载失败,则会有对应的错误提示信息。并且可以在/var/log/messages 文件中查看对应的错误提
示信息,输入命令: cat /var/log/messages | grep mount
要取消刚才的挂载测试,可以使用命令: umount /mnt/test (注意: 取消挂载时,不能在/mnt/test 目录里面)
如果虚拟机的 nfs 挂载测试成功了, 说明虚拟机部分的 nfs 设置, IP 网络等设置都 OK。接下来就可以设置开
发板的 ip 地址和环境变量了。
开发板网络地址和环境变量配置
把烧录好了 u-boot 和 zImage 的 SD 卡插入开发板,并选择 SD 方式启动系统, 接好串口线,开机启动
按 enter 键进入 u-boot 命令行模式。
注: printenv 命令可查看 u-boot 当前环境变量值
1.设置 u-boot 环境变量
进入 u-boot 命令行模式,输入如下命令:
TINY4412 # setenv ipaddr 192.168.1.101
TINY4412 # setenv gatewayip 192.168.1
TINY4412 # setenv netmask 255.255.255.0
TINY4412 # setenv serverip 192.168.1.20 //pc 主机的 ip 地址,这个可以不设置(注意这个不是虚拟机的 IP)
设置 bootargs 的值,注下面两行是一条语句
TINY4412 # setenv bootargs noinitrd root=/dev/nfs nfsroot=192.168.1.100:/root/work/4412/rootfs/root_nfs
ip=192.168.1.101:192.168.1.100:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 lcd=S70
保存修改
TINY4412 # save
根文件系统挂载验证
使用网线连接好开发板和 pc 主机,连上串口,选择 SD 启动方式
上面步骤都设置完成后,重启开发板,就可以开始挂接 NFS 根文件系统了
等待系统启动 u-boot 和 kernel 后, 如果 NFS 挂载根文件系统成功, 串口会有如下等提示信息:
[ 11.705000] ALSA device list:
[ 11.710000] No soundcards found.
[ 11.730000] VFS: Mounted root (nfs filesystem) on device 0:10.
[ 11.730000] Freeing init memory: 212K
Please press Enter to activate this console.
这个时候在串口中按 enter 键,可以进入 linux 系统的命令控制模式,说明根文件系统挂载成功。
输入 ls 命令可以查看开发板文件系统中的文件, 那么在串口中操作文件系统,实际上相当于直接在操作虚
拟机上/root/work/4412/rootfs/root_nfs 目录下的文件
在虚拟机(服务端)的根文件系统目录/root/work/4412/rootfs/root_nfs 下随便创建一个文件,在开发板(客
户端)的串口终端同样可以看到,并都可以操作,可以发现它们是同步的。
通过挂载 nfs 根文件系统方式,为后期的学习操作提供了很大的便利