【5】ARM-根文件系统

来源:互联网 发布:mac连接投影仪不显示 编辑:程序博客网 时间:2024/04/29 09:58

1.什么是根文件系统

安装内核时,第一个mount的文件系统,就是根文件系统,根文件系统中存放着一些内核启动时必须得初始化文件如/init/中的文件等

2.制作根文件系统

2-1)创建目录,主要是创建usr lib dev sbin bin mnt proc sys tmp var etc

         并创建usr/bin usr/sbin usr/lib以及lib/modules

2-2)创建设备文件,在dev目录中,使用mknod -m 666 console c 5 1和

          mknod -m 666 null c 1 3来创建设备文件;-m为创建的属性,c代表这是个字  符设备,5是指其主设备号,1是指其次设备号

2-3)加入配置文件(etc中的文件),配置文件和体系结构是无关的。

2-4)添加内核模块,使用make modules ARCH=arm CROSS_COMPILE=arm-linux-

          以及make modules_install ARCH=arm INSTALL_MOD_PATH=xx/xx/rootfs;

2-5)编译/安装busybox【提供嵌入式开发linux中的一些常用命令】:

1)配置busybox:

a) make menuconfig

b) Busybox Setting ->build Options ->选中“Build busybox as a static  binary”,静态链接 -> Cross Compiler prefix(arm-linux-)

c) Installation Options -> 选中“Don’t use /usr”,选中该项可以避免 busybox被安装到宿主系统的/usr目录中,破坏宿主系统

d) Busybox Installation Prefix(xx/xx/rootfs),该选项表明编译后的 busybox的安装位置

2)编译busybox:使用make命令来编译busybox

3)安装busybox:使用make install来安装busybox

3.挂载根文件系统到内核

 

3-1)使用Initramfs:

a)ln  -s  xxx/rootfs/bin/busybox  init

b)配置linux内核,支持initramfs,并导入根文件系统目录

 

c)编译内核

d)设置bootargs,setenv bootargs noinitrd console=ttySAC0,115200

3-2)使用NFS

什么是NFS?

答:NFS是网络文件系统,是一种使用于分散式文件系统的协定;NFS在文件传送或 者信息传送过程中依赖于RPC协议(远程过程调用,是能使客户端执行其他系统中程序 的一种机制),NFS是一个文件系统,RPC是负责信息的传输。RPC服务使用的是111 端口,主要是用于分布式系统中不同计算机的内部进程通信,NFS中的daemon都需 要向该进程注册,当客户端欲访问NFS中的daemon时,需要通过RPC(111端口)和    rpcbind来映射相应的端口。如客户端欲访问NFS服务器中的文件系统(其实是在开发    板上挂载了NFS的根目录),需要先访问111端口来映射nfsd的端口从而登录上N      FS服务器,在获取NFS服务器中的文件时,需要通过111端口来映射mountd的端     口来验证自己的权限,之后才能获取NFS服务器中的文件。[nfsd和mountd的介绍     详见Tips 6,7]

使用NFS的流程

        a)使用rpm -q nfs-utils rpcbind检查nfs服务器上是否已经安装了nfs和rpcbind,若没有安装则使用rpm -ivh /path/nfs-utilxxxxx.rpm和rpm -ivh /path/rpcbindxxxxx.rpm来安      装

b)关闭/etc/selinux/config中的”SELINUX=“

c)配置linux内核,支持根文件系统的NFS

 

d)编译内核

e)设置bootargs:setenv bootargs noinitrd console=ttySAC0,115200 ini t=/init root=/dev/nfs rw nfsroot=192.168.1.3:/home/S5-driver/lesson9/r                  

          ootfs ip=192.168.1.6:192.168.1.3:192.168.1.1:255.255.255.0:【开发板的主机 名,可选】:eth0:off

            其中bootargs表示Uboot通过bootargs参数设置内核的启动参数;

       noiniitrd表示不适用ramdisk设备

            console 表示使用第一个串口作为控制台,并以115200作为其波特率

            root=/dev/nfs表示将/dev/nfs作为根目录,rw表示可读可写

           nfsroot表示nfs服务器的地址

          /home/S5-driver/lesson9/rootfs表示nfs服务器的输出目录

         ip=192.168.1.6表示开发板的ip

       192.168.1.3表示服务器的地址

         192.168.1.1表示网关的地址

         255.255.255.0表示掩码

       eth0表示启动后将ip地址赋值给第一块网卡

         off表示关闭动态IP获取等

f)启动nfs

i)vim /etc/exports【查看nfs是否配置完成】

            exports中的书写格式为:<输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]

            客户端:允许访问nfs输出目录的用户ip,*表示所有用户均可访问

            访问权限:rw:允许读写,sync:同步磁盘写入,no_root_squash:表示用户登入nfs主机时使用分享目录的使用者,如果是root的话,那么对于这个分享的目录来                                         说,他就具有root的权限

ii)/etc/init.d/nfs restart

              /etc/init.d/rpcbind restart

iii)使用service nfs status和service rpcbind status 来查看nfs和rpcbind的状态

Tips:

1. 添加内核模块时,所添加路径里面必须存在lib/modules的文件夹,因为make modules_install是会将内核模块整合到该文件夹中

2. 安装完Busybox得到的./bin目录下的语句都是指向busybox的。

3. 当在minicom中输入的命令大于一行时,需要以minicom +w的方式打开minicom便可以开启换行模式,或者是在minicom中同时按住ctrl+a键,同时松开后在按w键,出现Linewrap ON表示打开了换行

4. 使用showmount -e nfs服务器IP可以查看nfs服务器上挂载的共享目录

5. 使用showmount -a 可以查看挂载在nfs服务器上的客户端ip

6. mountd:RPC安装守护进程,主要是管理NFS的文件系统。当客户端顺利通过nfsd登录NFS服务器后,在使用NFS服务所提供的文件前,还必须通过文件使用权限的验证。它会读取NFS的配置文件/etc/exports来对比客户端权限

7. rpcbind:主要是进行端口映射的工作,当客户端尝试连接并使用RPC服务器提供的服务时,rpcbind会将所管理的与服务对应的端口提供给客户端,从而使客户可以通过该端口向服务器请求服务。

8. nfsd:基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器

9. 使用rpcinfo -p IP 可以查看RPC管理的端口号

10. 使用chkconfig --level xx 进程名 on可在相应级别中自动开启进程

11. 使用rpm -e和yum remove命令均可以用来删除应用,但是rpm -e命令只是删除指定项且在默认有依赖关系的时候无法进行删除,虽然可以指定--nodeps直接删除不检测依赖关系,但是这种删除不彻底,而yum remove命令可以直接解析依赖关系,并删除与应用相依赖的软件,但在需要检测依赖关系的场合,yum remove需要联网。

12. xinetd是超级守护进程,用来统一负责管理一些进程,当相应的请求到来时需要通过xinetd的转接才可以唤醒被xinetd管理的进程。

遇到的问题:

1. 在安装完nfs-utils和portmap以及rpcbind之后,通过启动开发板内核,发现nfs目录一直挂载不上出现“VFS: Unable to mount root fs via NFS, trying floppy”的错误,后经过查资料和排查思考后,将错误锁定在端口映射问题上。

解决方案:查资料得,出现“VFS: Unable to mount root fs via NFS, trying floppy”该错误一般是NFS服务器配置不正确导致的,经过排查发现是portmap和rpcbind相冲突了,在新版本中NFS使用的组件是rpcbind,故将portmap卸载后,NFS正常执行。还有一种可能就是rpcbind和nfs的启动顺序不对,应该是先启动rpcbind进行端口映射之后在启动nfs

2. 在使用yum命令时,报出”another app is currently holding the yum lock“的错误,原因可能是因为yum在更新,处于锁定状态。

解决方案:可以通过rm -f /var/run/yum.pid来强制关掉yum进程

3. linux挂载光盘时,遇到you must specify the filesystem type

解决方案:虚拟机-〉setting->cd/dvd-〉device status-.connected前面的勾打上

0 0
原创粉丝点击