首页 > 其他分享 >根文件系统简介与BusyBox构建根文件系统

根文件系统简介与BusyBox构建根文件系统

时间:2024-03-22 22:12:00浏览次数:26  
标签:BusyBox lib 文件 简介 文件系统 etc 内核 挂载

参考资料: https://www.bilibili.com/video/BV12E411h71h?p=43&vd_source=432ba293ecfc949a4174ab91ccc526d6  

根文件系统简介:

根文件系统也成为rootfs,fatfs这类的文件系统属于Linux内核的一部分,属于软件代码 如果没根文件系统,内核会出现kernel panic。根文件系统就是一堆文件,比如软件、配置文件等,这些文件是linux运行所必须的,将他们组合在一起就构成了根文件系统 如ubuntu上/目录: 0 百度百科关于根文件系统的描述: 根文件系统首先是内核启动时所 mount(挂载)的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。 百度百科上说内核代码镜像文件保存在根文件系统中,但是我们嵌入式 Linux 并没有将内核代码镜像保存在根文件系统中,而是保存到了其他地方。比如 NAND Flash 的指定存储地址、EMMC 专用分区中。根文件系统是 Linux 内核启动以后挂载(mount)的第一个文件系统,然后从根文件系统中读取初始化脚本,比如 rcS,inittab 等。根文件系统和 Linux 内核是分开的,单独的 Linux 内核是没法正常工作的,必须要搭配根文件系统。如果不提供根文件系统,Linux 内核在启动的时候就会提示内核崩溃(Kernel panic)的提示 根文件系统的这个“根”字就说明了这个文件系统的重要性,它是其他文件系统的根,没有这个“根”,其他的文件系统或者软件就别想工作。比如我们常用的 ls、mv、ifconfig 等命令其实就是一个个小软件,只是这些软件没有图形界面,而且需要输入命令来运行。这些小软件就保存在根文件系统中  

根文件系统目录和文件介绍:

/bin:可执行文件,常用的一些软件,如ls /etc:跟配置相关的文件 /lib:库文件,系统软件运行,如gcc /mnt:挂载目录 /proc:存在系统运行时的信息 /sys:sysfs 文件系统的挂载点 /dev:所以此目录下的文件都是和设备有关的,此目录下的文件都是设备文件 /var:一些可变数据 /usr:Unix Software Resource,unix操作系统软件资源目录 /opt:可选的文件、软件存放区 /sbin:用户存放一些可执行文件,但是此目录的文件或者命令只有管理员才能使用 /tmp:临时文件   根文件系统构建方式有:busybox、buildroot、yocto  

BusyBox:

网址:https://busybox.net/ 此处构建出来的根文件系统调试使用nfs挂载,也就是根文件系统放在ubuntu下,开发板启动以后通过nfs服务使用ubuntu下的根文件系统

1、修改Makefile,添加ARCH和CROSS_COMPILE

2、busybox支持中文字符,在libbb/printable_string.c文件中修改

0 libbb/unicode.c文件中修改: 0  

3、配置busybox

使用make defconfg进行默认配置,如果生成.config就表示配置成功了 make menuconfig进行配置 0  

4、编译busybox

配置好busybox以后就可以编译了,可以指定编译结果的存放目录,如下: make install CONFIG_PREFIX=/home/lethe/linux/nfs/rootfs busybox源码编译完成之后会生成bin linuxrc sbin usr四个目录  

5、拷贝库文件

添加/lib库 将arm-linux-gnueabihf/libc/lib文件夹拷贝到rootfs/lib下 在拷贝时需要加-d,-d表示符号链接 0 再将arm-linux-gnueabihf/lib也拷贝到rootfs/lib下   添加/usr/lib 将arm-linux-gnueabihf/libc/usr/lib拷贝到rootfs/usr/lib下 可通过du ./lib ./usr/lib -sh查看lib和usr/lib目录的大小  

6、创建其他根文件系统文件夹

dev proc mnt sys tmp root  

7、nfs挂载根文件系统

  • 要求linux内核网络驱动要工作正常
  • 设置uboot的bootargs,也就是linux内核的命令行参数
rw如果没有设置在开发板中touch会出现read-only文件系统
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.31.230:/home/lethe/linux/nfs/rootfs,proto=tcp rw ip=192.168.31.62:192.168.31.230:192.168.1.1:255.255.255.0::eth0:off'
0  

8、根文件系统完善

/etc/init.d/rcS文件

can't run '/etc/init.d/rcS': No such file or directory
/etc/init.d/rcS是一个shell脚本,Linux内核启动之后需要启动一些服务,rcS就是规定启动哪些文件的脚本文件,rcS内容如下:
#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH            // 可执行文件可能存在的目录,$PATH表示追加的
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib        // 相关库的路径,表示加入/lib和/usr/lib两个路径
export PATH LD_LIBRARY_PATH                         // 将可执行文件和相关库的路径导出
mount -a                                            // 自动挂载所有支持挂载的设备,这些系统文件由文件/etc/fstab来指定
mkdir /dev/pts                                        // 将devpts挂载到/dev/pts中
mount -t devpts devpts /dev/pts

echo /sbin/mdev > /proc/sys/kernel/hotplug            // 使用mdev实现热插拔,通过这两行,Linux 内核就可以在/dev 目录下自动创建设备节点
mdev -s
 

/etc/fstab文件

再次重启之后会提示: can't read '/etc/fstab': No such file or directory /etc/fstab在linux开机之后自动配置哪些需要自动挂载的分区,格式如下:
<file system> <mount point> <type> <options> <dump> <pass>
file system:要挂载的特殊的设备,也可以是块设备,比如/dev/sda 等等。 mount point:挂载点。 type:文件系统类型,比如 ext2、ext3、proc、romfs、tmpfs 等等。 options:挂载选项,在 Ubuntu 中输入“man mount”命令可以查看具体的选项。一般使用 defaults,也就是默认选项,defaults 包含了 rw、suid、 dev、 exec、 auto、 nouser 和 async。 dump:为 1 的话表示允许备份,为 0 不备份,一般不备份,因此设置为 0。 pass:磁盘检查设置,为 0 表示不检查。根目录‘/’设置为 1,其他的都不能设置为 1,其他的分区从 2 开始。一般不在 fstab 中挂载根目录,因此这里一般设置为 0。 fstab文件输入以下内容:
#<file system> <mount point> <type> <options> <dump> <pass>
proc             /proc         proc defaults     0     0
tmpfs             /tmp         tmpfs defaults     0     0
sysfs             /sys         sysfs defaults     0     0
 

/etc/inittab文件

最终还需要创建一个/etc/inittab文件: inittab 的详细内容可以参考 busybox 下的文件 examples/inittab。init 进程会读取/etc/inittab这个文件,inittab 由若干条指令组成。每条指令的结构都是一样的,由以“:”分隔的 4 个段组成,格式如下:
<id>:<runlevels>:<action>:<process>
id:每个指令的标识符,不能重复。但是对于 busybox 的 init 来说,有着特殊意义。对于 busybox 而言用来指定启动进程的控制 tty,一般我们将串口或者 LCD 屏幕设置为控制 tty。 runlevels:对 busybox 来说此项完全没用,所以空着。 action:动作,用于指定可能用到的动作。 busybox 支持的动作如下: 0 process:具体的动作,比如程序、脚本或命令等。 创建一个/etc/inittab,在里面输入如下内容:
#etc/inittab
::sysinit:/etc/init.d/rcS            // 系统运行之后运行/etc/init.d/rcS脚本文件
console::askfirst:-/bin/sh            // 将console作为控制台终端
::restart:/sbin/init                // 重启会执行/sbin/init
::ctrlaltdel:/sbin/reboot            // ctrl+alt+del组合键会运行/sbin/reboot
::shutdown:/bin/umount -a -r        // 关机的时候执行/bin/umount
::shutdown:/sbin/swapoff -a           // 关机的时候执行/sbin/poweroff,也就是关闭交换分区

标签:BusyBox,lib,文件,简介,文件系统,etc,内核,挂载
From: https://www.cnblogs.com/lethe1203/p/18090503

相关文章

  • 海思 SS927V100 HI3519AV200 简介
    海思SS927V100HI3519AV200简介HI3519AV200是一颗专业ultra-HDSmartIPCameraSOC。SS927V100(另称:22AP70、SD3402)功能以及封装与HI3519AV200完全一致,可以平替HI3519AV200。最高支持四路sensor输入,支持最高4K60的ISP图像处理能力,支持3FWDR、多级降噪、六轴......
  • 宽动态(WDR)简介
    WDR,全称WideDynamicRange,即宽动态范围。宽动态就是场景中特别亮的部位和特别暗的部位同时都能看得特别清楚。宽动态范围是图像能分辨最亮的亮度信号值与能分辨的最暗的亮光信号值的比值。 宽动态图像对比宽动态未开启:只能看清窗外的建筑物,房间内的人无法看清宽动态开启:无......
  • 【教程】高效数据加密混淆方法及实现简介
     背景在需要对数据进行传输或者表达时,通常要求数据加密的安全级别不高,但希望加解密时间复杂度尽可能低。这时使用传统的对称加密(如3DES、AES)或非对称加密(如RSA、ECC)显然不太适合。因为加密的安全级别和加解密时间复杂度之间存在矛盾。所以,我们需要寻找一种方法,在保证安全性的同......
  • Linux内核有什么之块设备驱动有什么第六回 —— 邂逅的三个文件系统之二:实际文件系统(3
    接前一篇文章:Linux内核有什么之块设备驱动有什么第五回——邂逅的三个文件系统之二:实际文件系统(2)本文内容参考:34|块设备(上):如何建立代理商销售模式?-趣谈Linux操作系统-极客时间特此致谢!上回书以F2FS文件系统为例,开始分析块设备邂逅的第二个文件系统:实际文件系统。本回......
  • Linux内核启动流程简介
    参考资料:https://www.bilibili.com/video/BV12E411h71h?p=38&vd_source=432ba293ecfc949a4174ab91ccc526d6 Linux内核链接脚本arch/arm/kernel/vmlinux.lds arch/arm/kernel/vmlinux.lds中OUTPUT_ARCH(arm)ENTRY(stext)//Linux内核入口,入口函数stextjiffies=......
  • Linux mke2fs命令教程:创建和管理你的ext2/ext3/ext4文件系统(附案例详解和注意事项)
    Linuxmke2fs命令介绍mke2fs(makeext2filesystem)命令是用来创建ext2/ext3/ext4文件系统的。它通常在磁盘分区上创建文件系统,设备是对应设备的特殊文件(例如/dev/hdXX)。如果省略了块数,mke2fs会自动计算文件系统的大小。Linuxmke2fs命令适用的Linux版本mke2fs命令在所有......
  • 【Linux】内核学习笔记(八)——网络栈简介 转载
    转载:https://void-star.icu/archives/601网络栈从定义上还比较抽象。不过从功能上看,它是为了让主机之间交换数据而生的。要实现网络栈,最原始的一个方式就是:将想发送的报文封装成帧,然后发出去就完事了。接收主机会按约定好的方式解析。不过这种存在一个问题,如果要加密怎么办?要支......
  • parted划分大于2T文件系统
    场景:在CentOS系统中,添加了一块大于2T的数据盘     使用fdisk/dev/xxx的方式划分该盘时提示:Thesizeofthisdiskis2TiB(2199023255552bytes).DOSpartitiontableformatcannotbeusedondrivesforvolumeslargerthan2199023255040b......
  • DHCP服务器的优缺点简介
    DHCP服务器的优点和缺点主要体现在以下几个方面:优点:自动化配置:DHCP服务器可以自动为接入网络的客户端分配IP地址、子网掩码、默认网关、DNS服务器等网络配置信息,从而简化了网络配置过程,减少了手动配置的工作量。减少IP地址冲突:DHCP服务器能够跟踪已分配的IP地址,避免将相同的IP......
  • fsutil,您可以执行多种文件系统操作,包括查询和设置文件系统特性,refsutil 是用于管理和
    fsutil/?fsutil:fsutil是一个用于执行各种文件系统相关操作的Windows命令行实用程序。通过fsutil,您可以执行多种文件系统操作,包括查询和设置文件系统特性。----支持的命令----8dot3name   8.3文件名管理behavior    控制文件系统行为dax    ......