以busybox制作Linux根文件系统,以及nfs设置和uboot设置–嵌入式开发平台的搭建

  • Post author:
  • Post category:linux


主要分为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 根文件系统方式,为后期的学习操作提供了很大的便利



版权声明:本文为u010299133原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。