rootfs主要文件介绍

初识根文件系统rootfs 初识根文件系统rootfs 初识根文件系统rootfs 1. 简要介绍 2. 参考资料 3. 启动命令 1. 简要介绍   现代操作系统比如Linux按照启动流程可以分为3个层次:bootloader、kernel、rootfs,根文件系统 rootfs 是内核启动时所 mount 的第一个文件系统,系统引导启动程序会在根文件系统挂载之后执行一些基本的初始化脚本,系统正常挂载根文件系统之后可以自动或手动挂载其他的文件系统(根文件系统是其他文件的最终挂载点)。 2. 参考资料 ramfs,.. 阅读详情

一、/linuxrc

1. /linuxrc是一个可执行的应用程序

(1)/linuxrc是应用层的,和内核源码一点关系都没有。

(2)/linuxrc在开发板当前系统下是可执行的。因此在ARM SoC的linux系统下,这个应用程序就是arm-linux-gcc编译链接的;如果是在PC机linux系统下,那么这个程序就是用gcc编译链接的。

(3)/linuxrc如果是静态编译链接的,那么可以直接运行;如果是动态编译链接的,那么还必须给它提供必要的库文件才能运行。但是由于/linuxrc是由内核直接调用执行的,因此在这里没有机会导出库文件的路径,所以这个/linuxrc没法动态链接,一般都是静态链接的。

2. /linuxrc执行时引出用户界面

(1)操作系统启动后,首先会进行一系列运行配置,然后会给用户提供一个操作界面(有可能是cmdline,有可能是GUI),这个用户操作界面就是由/linuxrc带出来的。

(2)用户界面等很多事并不是在/linuxrc中负责的,用户界面有自己专门的应用程序,但是用户界面的应用程序是直接或间接的被/linuxrc调用执行的。用户界面程序和其他的应用程序就是进程2、3、4...,这就是曾经说过的进程1(init进程,也就是/linuxrc)是其他所用应用程序的祖宗。

3. /linuxrc负责系统启动后的配置

(1)就好像房子建好之后不能直接入住,还要装修一样;操作系统启动起来之后也不能直接使用,要配置下。

(2)操作系统启动后的应用层的配置(一般叫运行时配置,英文简写etc)是为了让我们的操作系统使用更方便,更适合个人的爱好或者使用性。

4. /linuxrc在嵌入式linux中一般就是busybox

(1)busybox是一个C语言写出来的项目,里面包含很多的.c和.h文件。这个项目可以被配置编译成各个平台下可以运行的应用程序。如果用arm-linux-gcc来编译busybox就会得到一个可以在自己的开发板的linux内核上运行的应用程序。

(2)busybox这个程序开发出来就是为了在嵌入式环境下构建rootfs使用的,也就是说它就是专门开发的init进程应用程序。

(3)busybox为当前系统提供了一整套的shell命令程序集,例如vi、cd、mkdir、ls等。在桌面版的linux发行版(例如Ubuntu、redhat、centOS等)中的vi、cd、ls等都是一个一个单独的应用程序,但是在嵌入式linux中,为了省事把vi、cd等所有常用的shell命令集合到一起构成了一个shell命令包,起名叫busybox。

5. 总结

(1)/linuxrc是应用层执行的第一个程序,通过uboot中参数bootargs中的init指定。

(2)/linuxrc的主要工作:系统配置(/etc)、启动用户界面。

(3)/linuxrc是/bin/busybox的一个软连接,也就是说真正执行的/bin/busybox程序。

(4)busybox是所有常用的shell命令的集合,也就是说有的shell的常用命令都是busybox的软连接。

二、inittab

1. inittab格式解析

(1)inittab的工作原理就是被/linuxrc(也就是busybox)执行时调用起作用。

(2)inittab在/etc目录下,属于运行时配置文件,是文本格式的。实际工作时,busybox按照一定的格式解析这个inittab文本文件,然后根据解析的内容决定具体的工作。

(3)busybox如何完成解析并根据解析结果如何工作并不是我们的目标,重点是理解inittab的格式,以及看到一个inittab文件后去分析这个inittab对启动的影响。

(4)inittab格式(具体的去网上搜索):

第1个:#开始的行是注释行

第2个:冒号在里面是分隔符,分隔开各个部分

第3个:inittab的内容是以行为单位的,行与行之间没有关联,每行都是一个独立的配置项,每一个配置项表示一个具体的含义。

第4个:每一行的配置项都是由3个冒号分隔开的4个配置值共同确定的。这4个配置值就是id:runlevels:action:process。值得注意的是有些配置值可以空缺,空缺后冒号不能丢失,所以有时候会看到两个连续的冒号。

第5个:每一行的配置项中4个配置值中最重要的是action和process,action是一个条件/状态,process是一个可被执行的程序的pathname。合起来的意思就是:当满足action的条件时就会执行process这个程序。

第6个:明白各个action的意思。

2. inittab解析与执行

(1)inittab的解析是在busybox/init/init.c中的init_main函数中。

(2)执行逻辑:先通过parse_inittab函数解析/etc/inittab(解析的重点是将inittab中的各个action和process解析出来),然后再执行sysinit、wait和once(注意在这里只执行一遍),最后在while(1)死循环中执行respwan和askfirst。

三、rcS

/etc/init.d/rcS文件是linux运行配置文件中最重要的一个,其他的一些配置都是由这个文件引出来的。这个文件可以很简单也可以很复杂,里面有很多的配置项。

1. PATH=xxx

(1)从shell脚本的语法角度分析,这一行定义了一个变量PATH,值等于后面的字符串。

(2)后面用export导出这个PATH,那么PATH就变成了一个环境变量。

(3)PATH这个环境变量是linux系统内部定义的一个环境变量,含义是操作系统去执行程序时会默认到PATH指定的各个目录下去寻找。如果找不到就认定这个程序不存在;如果找到就执行它。将一个可执行程序的目录导出到PATH,可以不带路径去执行这个程序。

(4)rcS为什么要先导出PATH?是因为希望在进入命令行时,PATH环境变量中就有默认的/bin、/sbin、/usr/bin、/usr/sbin这几个常见的可执行程序的路径,这样在命令行中就可以直接使用ls、pwd等命令了。

(5)为什么rcS文件还没添加,系统中就有PATH的值?原因在于busybox自己用代码硬编码导出了一些环境变量,其中就有PATH。

2. runlevel=

(1)runlevel也是一个shell变量,并且被导出为环境变量。

(2)runlevel环境变量的作用:指定系统状态。(具体的网上自查)

(3)runlevel=S表示将系统状态设置为单用户模式。

3. umask=

(1)umask是linux的一个命令,作用是设置linux系统的umask值。

(2)umask值决定当前用户在创建文件时的默认权限。

4. mount -a

(1)mount命令是用来挂载文件系统的。

(2)mount -a是挂载所有的应该被挂载的文件系统。在busybox中mount -a时,busybox会去查找/etc/fstab文件,这个文件按照一定的格式列出来所有应该被挂载的文件系统(包括虚拟文件系统)。

5. mdev

(1)mdev是udev的嵌入式简化版本,udev/mdev是用来配合linux驱动工作的一个应用层的软件,udev/mdev的工作就是配合linux驱动生成相应的/dev目录下的设备文件。

(2)在rcS中没有启动mdev的时候,/dev目录下启动后是空的,在rcS文件中添加mdev有关的2行配置项后,再次启动系统后,可以看到/dev目录下生成了很多的设备驱动文件。

(3)/dev目录下的设备驱动文件就是mdev生成的,这就是mdev的效果和意义。

6. hostname

(1)hostname是linux中的一个shell命令,可以用来设置当前系统的主机名。直接使用hostname(不加参数)可以显示当前系统的主机名。

(2)/bin/hostname -F /etc/sysconfig/HOSTNAME中的-F用来指定一个主机名配置文件(这个文件名一般是hostname或HOSTNAME)

7. ifconfig

(1)有时候希望在开机时指定一个ip地址,这时候就可以在rcS文件中ifconfig eth- 192.168.1.10

四、profile

profile文件的工作原理:profile文件被busybox(init进程)调用,与inittab一样。

五、用户登录

1. 用户登录程序

(1)在busybox中集成了用户登录程序(/bin/login或/sbin/gettty),因此要实现用户登录,就要在系统启动后执行用户登录程序。在inittab中有一个配置项::askfirst:-/bin/sh,这个配置项的作用就是当系统启动后去执行/bin/sh,执行这个就会出现命令行,这样就会直接进入命令行而不会出现登录界面,因此在这里将/bin/sh直接替换成用户登录程序/bin/login或者/sbin/getty,就会出现登录界面,而不是直接进入命令行。

2. passwd和shadow文件

(1)linux系统下用来描述用户名和密码的文件是passwd和shadow文件,这两个文件都在etc目录下。passwd文件中存储的是用户的密码设置,shadow文件中存储的是加密后的密码。

(2)可以直接复制ubuntu系统中的/etc/passwd和/etc/shadow文件到rootfs中,然后再做修改即可。

六、拷贝动态链接库

1. 复制动态链接库到rootfs下

复制动态链接库到rootfs下的/lib目录下,复制时要注意使用参数-rdf,主要目的是符号链接复制过来还是符号链接。

2. 使用strip工具去掉库中符号信息

(1)动态链接库so文件中包含了调试符号信息,这些符号信息在运行时是没有用的(调试时用的),这些符号会占用一些空间,在传统的嵌入式系统中Flash空间是有限的,为了节省空间常常把这些符号信息去掉。这样节省空间并不影响运行。

(2)去掉符号的命令使用arm-linux-strip。

 

 

 

 

超级详细讲解根文件系统rootfs的制作 文章目录????1 下载工具☕2 构建目录????3 使用busybox4 ????补全lib库5 ????生成etc配置文件6 ????修改 etc/init.d/rcS 文件????6.1.根据 fstab 配置文件挂载相应的文件系统????6.2.配置 telnetd 服务器的时候需要以下文件夹及文件系统????6.3.启动需要以下文件夹????6.4.在 lib 下创建相应文件夹(与当前内核版本相同),为驱动模块加载作准备????6.5.自动在/dev 下创建设备节点????7 修改 etc/fst 阅读详情

相关推荐

kernel启动流程-start_kernel的执行_8.cpio initrd解包

目录1. 前言2.populate_rootfs3.GotName的处理参考文档 1. 前言 本专题文章承接之前《kernel启动流程_head.S的执行》专题文章,我们知道在head.S执行过程中保存了bootloader传递的启动参数、启动模式以及FDT地址等,创建了内核空间的页表,最后为init进程初始化好了堆栈,并跳转到start_kernel执行。 在《kernel启动流程-start_kernel的执行_7.arch_call_rest_init》中提到kernel_init->do_ba

HZero 2377

文件分析——分析/linuxrc文件(即分析busybox的源码)

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

主要记录嵌入式学习与开发过程。 6867

Buildroot中添加脚本、lib库或文件并固化到rootfs中

文章摘要:构建嵌入式Linux系统时,可通过两种标准方式向文件系统添加自定义文件:1)RootFSOverlay(推荐简单场景):创建与目标目录结构一致的overlay目录,配置Buildroot后自动复制文件到output/target/;2)自定义Package(适合复杂场景):在package/下创建包目录,通过.mk文件定义安装逻辑,支持条件编译和依赖管理。两种方法均避免直接修改易被覆盖的output/target/目录,确保构建过程规范可靠。(149字)

Hyjks的博客 1086

根文件系统(linuxrc、inittab、fstab)

根文件系统 根文件系统是除内核映像文件外,init程序、shell程序、各种程序运行需要的的库等不可缺少文件的集合。 构建根文件系统时,一般遵循FHS标准,详见维基百科 (https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard)。 简单介绍: /bin存放着所有用户可以使用的命令。 /sbin中是系统关键命令。

win9 4153

嵌入式linux文件系统启动脚本及分析 linuxrc init shell busybox 分析

在内核初始化完成后,嵌入式linux 文件系统的启动过程主要包含一下几个步骤: 1. 执行/sbin/init 文件 2. 执行/etc/inittab 文件 3. 执行/etc/init.d/rcS 文件 4. 执行挂载文件系统脚本 5. 执行内核模块脚本 6. 执行网络初始化脚本 7. 执行应用程序启动等脚本,如qtopia 的启动

Unidbg补环境实战:复现Shopee风控Native层运行环境

Android App风控已从HTTP层签名校验,演进为深度依赖Native层系统调用与硬件特征的多维验证。其核心原理在于通过JNI桥接Java与Native代码,调用openat、sysconf、getrandom等系统接口读取/proc、/sys、/dev等路径的真实状态,并结合SELinux策略、CPU拓扑、分区哈希等硬性指标构建设备可信画像。这种技术架构显著提升了对抗黑灰产的能力,但也对逆向分析与自动化调用提出更高要求——必须精准模拟底层环境而非仅Hook逻辑。Unidbg补环境正是为此而生:它支持

weixin_30533109的博客 640

rootfs 制作ubuntu_【整理】为何要把文件夹形式的rootfs制作成单个rootfs镜像文件...

【背景】之前折腾嵌入式linux,有个事情,一直没注意,那就是:对于rootfs的话,已经有了,已经制作好了对应的rootfs,已经包含了对应各种文件(bin下面各种工具等等)和文件夹(/bin,/include,/dev,等等):CLi@PC-CLI-1 ~/develop/rootfs/wirelessHART$ ls -lhatotal 18Mdrwxr-xr-x+ 1 Administra...

weixin_39531834的博客 267

别再手动调参了!用MATLAB+改进PSO算法,5步搞定机械臂轨迹优化(附完整代码)

本文介绍如何利用MATLAB和改进PSO算法快速优化机械臂轨迹规划,仅需5步即可完成传统耗时的手动调参过程。通过混沌初始化、自适应权重等创新方法,改进PSO算法显著提升优化效率,实现全局最优解搜索,适用于工业自动化中的机械臂控制。文章包含完整MATLAB代码实现,帮助工程师轻松应用于实际生产场景。

weixin_29232121的博客 356

Alpine Linux RootFS 项目教程

Alpine Linux RootFS 项目教程 1. 项目的目录结构及介绍 Alpine Linux RootFS 项目的目录结构相对简单,主要包含以下文件和目录: alpine-make-rootfs/ ├── alpine-make-rootfs ├── editorconfig ├── LICENSE ├── Makefile ├── README.adoc 文件和目录介绍 alpin...

gitblog_00378的博客 600

GROMACS+PLUMED联合安装避坑指南:为什么你的plumed patch总是失败?

本文深入解析GROMACS与PLUMED联合安装中补丁失败的常见原因,并提供详细的避坑指南。针对版本兼容性、环境配置和编译选项等关键问题,给出从源码选择、环境搭建到手动合并补丁的完整解决方案,帮助用户成功整合这两个强大的分子动力学工具,实现增强采样模拟。

weixin_29302047的博客 289

IEEE ACCESS Please note that all author names should be listed in English.(所有作者名需用英文名列出)

很奇怪哈,我明明手稿和提交页面作者都是用的英文,但是为什么还是会提示我没用英文呢?后来给编辑发消息,回的很快,他给我发了一个截图,确实是出现中文,但是我还是不知道为啥会出现中文。直到晚上回寝室洗澡的时候忽然想起来了是不是orcid的原因,因为它会强制作者绑定一个orcid账号,而我的orcid账号的名字刚好是中文的。当然这个只是我的一个猜想,但是我觉得可能性很大。我的第二篇论文已经投稿了快三个月了,效果非常的不好,所以我打算转投IEEE ACCESS了,希望这里可以给我一点好的建议。

kuyecsl的博客 3311

用NFS启动rootfs的浅度总结

平台:海思hi3716c linux kernel:3.0.8 rootfs: mer-core based on release 20121018.1 使用下面的bootargs: setenv bootargs 'mem=764M vmalloc=600Mconsole=ttyAMA0,115200 mmz=ddr,0,0xb3c00000,100M mtdparts=hi_sf

sonach的专栏 4089

「UG/NX」BlockUI 树列表(回调函数)

官方对树控件提供了21种回调函数,树的一些操作可以在这些回调函数中进行操作。

何曾参静谧的博客 1332

deb 解压方法

deb文件组成主要包括tar文件,con文件Tar文件dpkg-deb --fsys-tarfile "$1"/$i > extra/$T3.bin.tar tar -tvf extra/$T3.bin.tar > extra/$T3.bin.list 使用 --fsys-tarfile 可以解

Programer From Scrach 2160

EtherCAT ROS2 入门教程(一)

本文介绍了EtherCAT驱动与ROS2的集成方案,主要包括三部分内容:1)在Ubuntu 22.04上安装IgH EtherCAT主站的详细步骤,包括内核配置、源码编译和网络适配器设置;2)构建ethercat_driver_ros2,通过ros2_control描述文件配置硬件接口和EtherCAT从站模块插件;3)使用方法,包括启动EtherCAT主站和运行配置包。该方案支持通过参数文件定义硬件接口,并提供通用和专用两种EtherCAT模块插件,便于开发基于EtherCAT的工业应用。

机器人控制与仿真应用 1530

2025实战|C#上位机+STM32实现LED串灯控制:串口通信+PWM调光+自定义帧协议(附上下位机源码)

粘包:一次收到“BRIGHT:50LED_OFF”,解析完全错乱;乱码:串口波特率/编码不匹配,指令变成“??H??50”;丢帧:数据传输中少字符,比如“BRIGHT:5”,解析出亮度5而非50。因此我们设计字节级自定义帧协议协议先行:无论简单还是复杂场景,先定义清晰的帧协议,避免数据错乱;串口稳字当头:下位机用环形缓冲区接收,上位机加锁发送,避免丢包/粘包;跨线程必处理:C#上位机所有UI更新必须用Invoke,否则必崩溃;硬件是基础:接线、供电、共地这些细节,比代码更易出问题;

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 756

linux 合并uboot dtb kernel rootfs 文件制作nor flash 烧录镜像

linux 环境,用dd命令合并uboot dtb kernel rootfs 等文件制作nor flash 烧录镜像

somnus.清澈的博客 395

安卓讲课笔记1.1 安装Android Studio

1. 能安装配置Android Studio; 2. 能创建安卓虚拟机(AVD); 3. 能创建简单安卓应用

howard2005的专栏 3378

set_rootfs_boot外挂磁盘系统

【代码】set_rootfs_boot。

canyingfeixue的专栏 201

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

linux文件系统初始化过程

从图中可以看出将文件分为符号链接和非符号链接两种情况处理,这是因为符号链接文件是一种特殊的文件,只有第一个符号链接文件的inode存储的是真实数据,而其他符号链接文件inode中存储的是第一个符号链接文件的路径名,因此需要把第一个符号链接文件的路径名缓存起来,缓存的数据结构是hash表,所以在处理符号链接文件时多了一些hash表的操作,因此分为了符号链接文件和非符号链接文件这两种情况来处理。另外,rootfs为VFS提供了'/'根目录,所以文件操作和文件系统的挂载操作都可以在VFS上进行了。

tecoes的博客 323

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

荔枝派Zero(全志V3S)烧录Uboot、Kernel及rootfs到SD卡并运行在板子上

通过前面Uboot编译及配置我们获得了 u-boot-sunxi-with-spl.bin通过前面Kernel编译我们获得了zImage镜像文件及sun8i-v3s-licheepi-zero-dock.dtb设备树文件通过前面rootfs编译我们获得了 rootfs.tar 文件系统那么下面就将相关文件烧录到 SD 卡并运行在板子上看下效果。

明天你好的博客 3545

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

《Linux Root File System :rootfs》学习导图

《Linux Root File System :rootfs》学习导图 /etc /dev /usr /bin /sbin 逐步更新中。。。

yexiang优快云的专栏 780

ARM:TI AM335X制作linux rootfs

关于制作linux rootfs Ubifs文件系统和mkfs.ubifs以及ubinize工具的用法

what, when, why, how... 359

linux文件系统基本组成

典型的Linux文件系统构成:    bootfs与rootfsbootfs(boot file system)主要包含bootloader和kernel,bootloader主要是引导加载kernel,当kernel被加载到内存中后bootfs就被umountlerootfs(root file system)包含的就是典型linux中的/dev,/proc./bin,/etc等标准目录和文件 ...

weixin_42135997的博客 1835

如何生成适合mpsoc sd卡的rootfs的镜像文件(petalinux22.2)

更改/home/ljp/Desktop/tsn/tct_tsn_peta22.2_0718/tct_tsn/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi。petalinux-config filesystem type选择 ext4。通过U-Boot的命令行检查设备和分区是否存在,然后更改bootargs配置。格式化分区和添加rootfs。去除掉SD卡文件系统及分区。增加bootargs配置。

yiyi201200的博客 511

linux文件系统初始化过程(2)---挂载rootfs文件系统

一、目的     本文主要讲述linux3.10文件系统初始化过程的第一阶段:挂载rootfs文件系统。     rootfs是基于内存的文件系统,所有操作都在内存中完成;也没有实际的存储设备,所以不需要设备驱动程序的参与。基于以上原因,linux在启动阶段使用rootfs文件系统,当磁盘驱动程序和磁盘文件系统成功加载后,linux系统会将系统根目录从rootfs切换到磁盘文件系统。   ...

weixin_34283445的博客 100
上一篇: Linux杂谈
下一篇: uboot简介
linuxweiyh
博客等级 码龄11年 171粉丝 152原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值