【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前面的勾打上
- 【5】ARM-根文件系统
- ARM根文件系统制作
- ARM根文件系统制作
- ARM根文件系统制作
- ARM 根文件系统制作
- ARM文件系统移植之根文件系统文件
- arm嵌入式根文件系统的大概
- ARM-Linux使用SD卡根文件系统
- ARM-Linux使用SD卡根文件系统
- ARM Linux使用SD卡根文件系统
- arm-linux(ubuntu) 根文件系统 制作
- 为 ARM Linux 制作根文件系统
- Arm-Linux根文件系统网络配置小结
- ARM平台建立JFFS2根文件系统
- 创建Ubuntu ARM的根文件系统环境
- ARM Linux使用SD卡根文件系统
- arm linux挂载nfs根文件系统
- 搭建arm下的根文件系统
- C++基础--标准输入流相关
- MySQL与Oracle 差异比较之三函数
- Android Studio 设置内存大小及原理
- 堆排序
- 迷宫的最短路径
- 【5】ARM-根文件系统
- WebRTC简介及其与SIP互通
- OpenGL学习(一) OpenGL简介
- Ionic开发跨终端应用——基础入门
- PAT (Advanced Level) Practise 1077Kuchiguse (20)
- Palindrome Number---9
- 为Activity加上风格统一的切换动画
- 哈夫曼树及一种java实现
- NYOJ17(最长上升子序列)