0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

roofs根文件系统简介制作(下)

嵌入式技术 2022-09-18 09:26 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

roofs 根文件系统简介制作(下)

1.根文件系统简介

 根文件系统首先是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。文件系统是对一个存储设备上的数据和元数据进行组织的机制。这种机制有利于用户和操作系统的交互。文件是用户和操作系统之间交互的主要工具。

Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。成功之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。

  接下来以busybox-1.30.1版本为例实现根文件系统制作。

2.根文件系统制作

开发平台:ubuntu18.04.6
开发板:Cortex-A9 tiny4412
BusyBox版本:1.30.1
交叉编译器:arm-linux-gcc

2.1 现在busybox源码,配置环境,编译源码

  (1)下载busybox源码,解压到用户目录下。

[wbyq@wbyq src_pack]$ tar xvf /mnt/hgfs/ubuntu/software_pack/busybox-1.30.1.tar.bz2 

  (2)配置编译环境

[wbyq@wbyq src_pack]$ cd busybox-1.30.1/
[wbyq@wbyq busybox-1.30.1]$ make menuconfig
    Settings  --->  
    	(arm-linx-)  Cross compiler prefix (NEW) 
    	(/home/wbyq/src_pack/rootfs) Destination path for 'make install' 

poYBAGMl2hOAdUs0AAIAVG383Dw126.png#pic_center
pYYBAGMl2hSAeBvUAAHZue_Y4f8731.png#pic_center

  配置好后保存退出,make编译。

2.2 编码源码

[wbyq@wbyq busybox-1.30.1]$ make

2.2.1 编译错误1

  编译过程中若出现以下错误,则重新打开配置菜单,将syncfs屏蔽即可。

poYBAGMl2hSAc5TSAAHeRrCM9U0996.png#pic_center

[wbyq@wbyq busybox-1.30.1]$ make menuconfig
pYYBAGMl2hSAQgwvAACviLQ1968073.png#pic_centerpoYBAGMl2hWAECcaAAGZhiIT3Gg539.png#pic_center

  修改完成后保存退出,再次重新编译。

2.2.2 编译错误2

  编译过程中若出现以下错误,则重新打开配置菜单,将setns屏蔽即可。

pYYBAGMl2hWAcbk1AAHZwKPb1L0729.png#pic_center

[wbyq@wbyq busybox-1.30.1]$ make menuconfig
poYBAGMl2haAWG7FAAELUlpDZyg692.png#pic_centerpYYBAGMl2haAP_L_AAENG8Sr5ig128.png#pic_center

  解决错误后重新编译安装。

[wbyq@wbyq busybox-1.30.1]$ make && make install -j8

  编译安装成功。

poYBAGMl2heAeO39AAFsiukUgL0219.png#pic_center

2.3 完善根文件系统

  进入到rootfs安装目录下,进行根文件系统完善。

[wbyq@wbyq busybox-1.30.1]$ cd /home/wbyq/src_pack/rootfs/
[wbyq@wbyq rootfs]$ ls
bin  linuxrc  sbin  usr

2.3.1 参考ubuntu根目录,创建必要目录

[wbyq@wbyq rootfs]$ mkdir etc lib lost+found proc snap tmp boot home media root srv cdrom mnt run dev opt sys
pYYBAGMl2heALctPAAGgVpCyV28495.png#pic_center

2.3.2 创建必要文件

  创建 etc/profile 文件、 etc/init.d 目 录、 etc/init.d/rcS 文件

[wbyq@wbyq rootfs]$ touch etc/profile 
[wbyq@wbyq rootfs]$ mkdir etc/init.d
[wbyq@wbyq rootfs]$ touch etc/init.d/rcS
[wbyq@wbyq init.d]$ chmod +x rcS 

2.3.3 完善etc目录

[wbyq@wbyq rootfs]$ cp /etc/passwd etc/
[wbyq@wbyq rootfs]$ cp /etc/group etc/
[wbyq@wbyq rootfs]$ cp /etc/fstab etc/
[wbyq@wbyq rootfs]$ cp ../busybox-1.30.1/examples/inittab etc/

2.3.4 修改 inittab 文件

  修改 etc/inittab文件,只保留下面内容:

::sysinit:/etc/init.d/rcS #设置初始化执行的文件
#需要加上 console askfirst 表示需要按下回车才可以进入系统
#respawn 表示开机直接进入系统
console::askfirst:-/bin/sh 
::ctrlaltdel:/sbin/reboot #指定重启命令
::shutdown:/bin/umount -a -r #指定关机时执行的命令

2.3.5 编写/etc/init.d/rcS启动脚本文件

mount -a
mkdir /dev/pts
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
/bin/hostname wbyq #设置主机名称

rcS文件相关命令介绍

mount -a
mkdir /dev/pts

/dev/pts 是远程登陆(telnet,ssh 等)后创建的控制台设备文件所在的目录。由于可能有好几千个用户登陆,所以/dev/pts 其实是动态生成的, 不象其他设备文件是构建系统时就已经产生的硬盘节点.

mount -t devpts devpts /dev/pts

内核虚拟文件。和 proc 一样,Linux 提供给管理员通过文件系统和内核进行沟通( 读\写)的一种渠道。 pts 是远程虚拟终端。 devpts 即远程虚拟终端文件设备。 通过/dev/pts 可以了解目前远程虚拟终端的基本情况。

echo /sbin/mdev > /proc/sys/kernel/hotplug

linux系统对于热插拔事件的产生默认都是调用 /sbin/hotplug, 该程序通过加载驱动程序, 创建设备节点,挂载分区等。 如果系统中不是/sbin/hotplug 来执行,而是 mdev,那么用户应当在早期启 动的时候将改执行档( 包含绝对位置)设置进去,于是有了上面的echo/sbin/mdev> /proc/sys/kernel/hotplug 我们可以在脚本中注释掉该命令行,重新开机后 cat/proc/sys/kernel/hotplug 就会发现返回来的是/sbin/hotplug 说明系统默认都是调用这个。 这个配置在内核编译的时候写好的在内核 目录下的.config可以看到有个配置叫做 CONFIG_UEVENT_HELPER_PATH=“/sbin/hotplug”

mdev -s #生成设备节点

/bin/hostname wbyq #设置主机名称

2.3.6 编写 profile 文件 gedit etc/profile

USER="id-un" #id -un 是获得当前登陆的用户名称,USER="`id -un`" 则是将 id -un 的返回值赋值给变量 USER
LOGNAME=$USER #用于显示用户名称
PS1='[\u@\h \W]\$ ' #命令行样式环境变量, 查看系统命令行样式 echo $PS1
PATH=$PATH
HOSTNAME='/bin/hostname'
export USER LOGNAME PS1 PATH HOSTNAME

2.3.7 拷贝必要动态库文件

[wbyq@wbyq rootfs]$ cp ../arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/* ./lib/ -rfdv
[wbyq@wbyq rootfs]$ cp ../arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/lib/* ./lib/ -rfdv
[wbyq@wbyq rootfs]$ cp ../arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib/* ./lib/ -rfdv

2.3.8 完善dev目录,创建设备节点

[wbyq@wbyq rootfs]$ sudo mknod dev/null c 1 3

2.4 设置NFS共享

  添加NFS共享目录

[wbyq@wbyq rootfs]$ sudo vim /etc/exports
/home/wbyq/src_pack/rootfs  *(rw,no_root_squash,sync,insecure)
poYBAGMl2heAKD9qAAFZ7ygabQU269.png#pic_center

2.5 配置网络

pYYBAGMl2hiARWIlAACcwKomCnA773.png#pic_centerpoYBAGMl2hiATbdOAACJIDfTA8k651.png#pic_center

2.6 IP设置

  若开发板和电脑直连,则可设置为静态IP方式,若是经过路由器,则可使用动态IP方式。

pYYBAGMl2hiAFeDSAAFS-TR8hTE505.png#pic_center

3.配置开发板环境变量

setenv bootargs root=/dev/nfs nfsroot=192.168.10.123:/home/wbyq/src_pack/rootfs ip=192.168.10.106:192.168.10.123:192.168.10.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 lcd=S702

192.168.1.123:/home/xsw/linux_work/rootfs —服务器 IP 与共享目 录
192.168.1.106 —开发板 IP 地址
192.168.1.123:192.168.1.1:255.255.255.0 —主机 IP、 子网掩码、 网关
在uboot命令行执行,配置完后重启开发板。

poYBAGMl2hiALc5YAABhIcJ1tcg914.png#pic_center

3.1 开发板启动挂载NFS失败问题

  若开发板引导内核后出现无法通过NFS挂载rootfs,则是由于开发板nfs版本协议和ubuntu的nfs协议不兼容。

poYBAGMl2hmANJArAAHMwP-EpSs205.png#pic_center

  解决办法:修改/etc/default/nfs-kernel-server 文件,添加协议版本支持。

[wbyq@wbyq rootfs]$ sudo vim /etc/default/nfs-kernel-server
RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"
pYYBAGMl2hmAV7DjAAEvTB3SzTc560.png#pic_center

  保存后重启NFS服务,重启开发板。

3.2开发板启动挂载进入命令行报错

  原因:主要是etc/fstab文件格式不对,fstab文件报错磁盘挂载信息。

poYBAGMl2hqAdvsaAAKE-iy95wA721.png#pic_center

  解决办法:修改rootfs下的/etc/fstab文件

[wbyq@wbyq rootfs]$ gedit etc/fstab 

/dev/mapper/vg_wbyq-lv_swap swap                  swap    defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                  proc    defaults        0 0
pYYBAGMl2hqAMTb_AAD4U6vLI-A179.png#pic_center

启动成功

poYBAGMl2hqAHjI2AAF6upuWzko491.png#pic_center

 至此,根文件系统制作完成,开发板启动成功。接下来将正式进入驱动开发之旅。




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    217989
  • 根文件系统
    +关注

    关注

    0

    文章

    26

    浏览量

    12476
  • rootfs
    +关注

    关注

    0

    文章

    20

    浏览量

    4905
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    明晚8点|睿擎文件系统实战:从开发到发布全流程解析

    文件操作到镜像发布,一次直播掌握完整开发流程!在嵌入式系统开发中,文件系统是数据存储、配置管理和资源访问的核心基础。然而在实际开发中,文件操作效率低下、镜像打包流程复杂、
    的头像 发表于 11-11 11:53 382次阅读
    明晚8点|睿擎<b class='flag-5'>文件系统</b>实战:从开发到发布全流程解析

    睿擎派文件系统指南:从开发到发布全流程实践 | 技术解析

    在嵌入式系统开发中,文件系统扮演着至关重要的角色,它负责数据的持久化存储、配置文件管理和资源访问等核心功能。睿擎平台提供了一套完整的文件系统解决方案,从开发阶段的API调用到调试阶段的
    的头像 发表于 11-05 18:13 7706次阅读
    睿擎派<b class='flag-5'>文件系统</b>指南:从开发到发布全流程实践 | 技术解析

    如何在 nuc980 上切换到持久文件系统

    ” General setup > 初始 RAM 文件系统和 RAM 磁盘 (initramfs/initrd) 支持 然后当尝试构建(制作)时,它再次被自动选择。 因此无法取消选择 ramfs 。 如何在 nuc980 上切换到持久
    发表于 08-29 07:58

    Linux三大主流文件系统解析

    还在为选择哪个文件系统而纠结?作为一名摸爬滚打多年的运维老鸟,我将用最接地气的方式,带你彻底搞懂 Linux 三大主流文件系统的奥秘。
    的头像 发表于 08-05 17:37 1044次阅读

    【创龙TL3562-MiniEVM开发板试用体验】问题3 扩展ubuntu文件系统

    在ubuntu系统,没放多少自定义的东西,报空间不够,原以为是内存不够,故换一个32G的SD卡作为文件系统(其实根本原因是rootfs.img镜像大小,默认rootfs.img分区
    发表于 07-08 22:11

    飞凌嵌入式ElfBoard ELF 1板卡-文件系统简介

    /3/4等,ELF 1开发板使用的是Ext3文件系统,每种文件系统类型都有自己的特性,下面我们逐一介绍一。一、Ext2/3/4Ext全称Linux extended file system
    发表于 06-19 17:22

    服务器数据恢复—ocfs2文件系统被格式化为Ext4文件系统的数据恢复案例

    服务器存储数据恢复环境&故障: 人为误操作将Ext4文件系统误装入一台服务器存储上的Ocfs2文件系统数据卷上,导致原Ocfs2文件系统被格式化为Ext4文件系统
    的头像 发表于 06-10 12:03 563次阅读
    服务器数据恢复—ocfs2<b class='flag-5'>文件系统</b>被格式化为Ext4<b class='flag-5'>文件系统</b>的数据恢复案例

    Linux文件系统打包及镜像制作,触觉智能RK3562开发板演示

    本文介绍Linux开发板文件系统打包及镜像制作的方法,演示Linux文件系统打包及镜像制作,适用于想将配置好的系统环境打包成镜像批量烧录。触
    的头像 发表于 04-28 16:45 767次阅读
    Linux<b class='flag-5'>文件系统</b>打包及镜像<b class='flag-5'>制作</b>,触觉智能RK3562开发板演示

    君正内核加载文件系统问题

    利用 mksquashfs root-uclibc-toolchain720-r519 uvc_fs.squashfs -comp xz -all-root制作了squashfs文件系统一开始烧录可以,后面放了一些文件进去就出现
    发表于 04-12 09:30

    rootfs镜像制作其实没那么难

    在嵌入式Linux开发中,文件系统的打包和镜像制作是关键步骤。本文介绍了Linux核心板文件系统的打包与镜像制作方法,适合嵌入式开发人员快速上手。前言致远电子Linux核心板提供的
    的头像 发表于 04-03 11:37 902次阅读
    rootfs镜像<b class='flag-5'>制作</b>其实没那么难

    如何正确选择嵌入式文件系统

    Linux嵌入式系统中,文件系统和缓存机制常导致数据存储稳定性问题。本文通过案例分析原因,对比不同文件系统特性,为开发者提供优化建议,助力提升数据稳定性和系统可靠性。前言基于Linux
    的头像 发表于 03-17 11:35 863次阅读
    如何正确选择嵌入式<b class='flag-5'>文件系统</b>?

    在stm32cubeprogrammer上烧录时,取消勾选文件系统,烧录后发现sd卡上文件系统的分区没有了,为什么?

    在修改了linux内核后,我想只把bootfs烧录到sd卡上,而不擦除根文件系统的分区。 我在stm32cubeprogrammer上烧录时,取消勾选文件系统,烧录后发现sd卡上
    发表于 03-07 06:38

    NFS网络文件系统深度解析

    NFS:Network File System 网络文件系统,基于内核的文件系统。Sun 公司开发,通过使用 NFS,用户和程序可以像访问本地文件一样访问远端系统上的
    的头像 发表于 03-01 14:15 1173次阅读

    防止文件系统破坏,OverlayRootfs 让你的设备更安全

    OverlayRootfs介绍OverlayRootfs是指利用OverlayFS技术创建的文件系统(rootfilesystem)。OverlayFS是一种联合文件系统(UnionFS),允许将
    的头像 发表于 01-08 16:33 2457次阅读
    防止<b class='flag-5'>根</b><b class='flag-5'>文件系统</b>破坏,OverlayRootfs 让你的设备更安全

    关于更新openharmony文件系统时遇到的问题

    用的固件,文件系统,内核是之前的,之前版本用起来没问题。但是 用下面三个的时候 固件可以正常烧录,也按照文档里面加载了环境变量,但是烧录内核和文件系统(都是U盘更新的)的时候出现了这样的问题
    发表于 12-30 11:55