尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
《嵌入式操作系统》_根文件系统相关知识_20260303
1.根文件系统有什么用(1)init进程的应用程序在根文件系统上(2)根文件系统提供了根目录/(3)内核启动后的应用层配置(etc目录)在根文件系统上。几乎可以认为发行版内核rootfs(4)shell命令程序在根文件系统上。譬如ls、cd等命令进程0空闲进程cpu空闲时进入该进程进程1初始进程init。其他进程的父本进程2守护进程kthreadd内核线程的守护进程负责管理和调度其他内核线程的创建。2.根文件系统的本质根文件系统包含了文件系统文件系统存储设备块设备像硬盘、flash等是分块扇区的访问存储设备时是按照块号扇区号来访问的这很麻烦。文件系统通过代码实现了对存储设备的管理向我们呈现目录和路径向下进行管理块设备。不同的文件系统对对存储空间的管理方法不同比如碎片管理和坏快管理。3.根文件系统的形式3.1镜像文件形式镜像文件Image File就是某块存储介质光盘、U 盘、硬盘分区、整个硬盘的完整克隆包。它不只是复制里面的文件而是把所有数据文件结构引导信息分区表原封不动打包成一个单独文件相当于给磁盘拍了一张1:1 完整快照。烧录镜像就是将对应分区1比1还原镜像。包含数据、文件结构、引导信息、分区表。文件系统有类型那么镜像文件就也有类型。3.2文件夹格式他就是个上位机中做好了根文件系统的文件夹等着你制作镜像呢4.制作一个根文件系统此文件系统仅仅可以用来挂载用以学习根文件系统的制作流程和原理。4.1mke2fs制作镜像工具ubuntu默认安装工具。用以制作ext2,ext3,ext4等格式的根文件系统。mkfs.ext2制作ext2格式的文件系统等等都是mke2fs的符号链接4.2制作镜像并挂载参考文档https://blog.csdn.net/zhengmeifu/article/details/24174513mkdir rootfs dd if/dev/zero ofrootfs.ext2 bs1024 count2048 #dd烧写命令生成一个空的、大小为 2048 * 1024 2MB 的文件 rootfs.ext2 losetup /dev/loop13 rootfs.ext2 #把普通文件 rootfs.ext2 映射为 Linux 循环设备 /dev/loop13让系统把这个文件当成一个 “虚拟磁盘设备” 来处理。 mkfs.ext2 -m 0 /dev/loop13 2048 #将 /dev/loop1即映射后的 rootfs.ext2 文件格式化为 ext2 文件系统。 mount -t ext2 /dev/loop13 ./rootfs/ #将格式化后的 ext2 虚拟设备 /dev/loop1 挂载到当前目录下的 ./rootfs/ 文件夹之后你就可以像操作普通目录一样读写这个 ext2 镜像里的内容。代码执行结果如下4.3给镜像中写文件进入rootfs文件夹创建文件rootlxy-JIAOLONG-Series:/home/lxy/qianrushi/rootfs# cd rootfs/ rootlxy-JIAOLONG-Series:/home/lxy/qianrushi/rootfs/rootfs# touch linuxrc rootlxy-JIAOLONG-Series:/home/lxy/qianrushi/rootfs/rootfs# ll total 24 drwxr-xr-x 3 root root 4096 3月 4 10:49 ./ drwxr-xr-x 3 root root 4096 3月 4 10:47 ../ -rw-r--r-- 1 root root 0 3月 4 10:49 linuxrc drwx------ 2 root root 16384 3月 4 10:24 lostfound/这个linuxrc就会成为制作镜像中的/linuxrc。当然这个空文件是不可能成功执行的。如果真要做有用的rootfs就是在这一步添加真正可以执行的linuxrc程序还包括添加/lib目录下的库文件/etc目录下的配置文件。4.4卸载镜像rootlxy-JIAOLONG-Series:/home/lxy/qianrushi/rootfs# umount /dev/loop13 rootlxy-JIAOLONG-Series:/home/lxy/qianrushi/rootfs# losetup -d /dev/loop135.开发板烧写根文件系统镜像5.1为开发板烧录镜像开发板进入uboot命令行之后进入fastbootlinux操作系统寻找设备rootlxy-JIAOLONG-Series:/home/lxy/qianrushi/rootfs# fastboot devices SMDKC110-01 fastboot上位机烧录设备fastboot flash system rootfs.ext25.2开发板效果fastboot reboot重启设备挂载根文件系统成功但执行linuxrc失败。一切正常。[ 1.723645] EXT2-fs (mmcblk0p2): warning: mounting unchecked fs, running e2fsck is recommended [ 1.734693] VFS: Mounted root (ext2 filesystem) on device 179:2. [ 1.739263] Freeing init memory: 148K [ 1.743202] Failed to execute /linuxrc. Attempting defaults...6.NFS网络根文件系统NFSNetwork File System是一种分布式文件系统协议允许用户通过网络访问远程计算机上的文件就像访问本地文件一样。它由 Sun Microsystems 开发现已成为 Unix/Linux 系统中广泛使用的标准协议。开发板运行linux kernel做客户端上位机ubuntu做服务端。上位机运行nfs服务器在服务器中添加文件夹形式的rootfs目录。我们使用的内核已支持nfs客户端,但还需稍做修改6.1内核配置网络部分内核部分保存后重新make -j166.2上位机nfs服务器搭建安装nfs服务端sudo apt update sudo apt install -y nfs-kernel-server创建共享文件夹rootlxy-JIAOLONG-Series:/home/lxy# mkdir nfs_rootfs rootlxy-JIAOLONG-Series:/home/lxy# chmod 777 nfs_rootfs rootlxy-JIAOLONG-Series:/home/lxy# chown nobody:nogroup nfs_rootfs编辑NFS 配置文件vim /etc/exports直接在文档最后添加以下代码/home/lxy/nfs_rootfs *(rw,sync,no_root_squash,no_subtree_check) # *允许所有 IP 访问 # rw读写 # sync同步写入安全 # no_root_squash开发板 root 用户能拥有服务器端 root 权限嵌入式必须开 # no_subtree_check关闭子目录检查稳定配置生效sudo exportfs -rv重启nfs并设置为开机自启sudo systemctl restart nfs-kernel-server sudo systemctl enable nfs-kernel-server # 开机自启查看nfs是否共享成功showmount -e localhost6.3修改bootargs修改uboot的传参bootargssetenv bootargs root/dev/nfs nfsroot192.168.1.141:/home/lxy/nfs_rootfs,nfsvers3,tcp,nolock ip192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off init/linuxrc consolettySAC2,115200 rootwait rw6.4修改nfs配置文件以前使用的16.04版本的ubuntu没问题现在更换了20.04版本开始报错。从Ubuntu17.04开始nfs默认只支持协议3和协议4而kernel中默认支持协议21.修改配置文件vim /etc/default/nfs-kernel-server2.在末尾添加RPCNFSDOPTS--nfs-version 2,3,4 --debug --syslog3.重启nfs服务sudo /etc/init.d/nfs-kernel-server restart可以看到根文件系统挂载成功linuxrc程序启动失败。一切正常7.linuxrc是什么可执行的应用程序用户态7.1他干了什么1.用户操作界面cmdline、gui。就是linuxrc程序引导的。直接或者间接被/linuxrc调用执行2.负责操作系统启动之后的配置一般叫运行时配置。7.2嵌入式linux中的linuxrcBUSYBOX一般就是busybox一个c语言写的项目用什么编译器就能在什么平台上运行他就是专门开发的init进程。其为当前系统提供了一整套的shell命令程序集比如vi、cd等等。在桌面版的linux中每个shell命令都是单独的可执行程序在嵌入式linux操作系统中我们集合到了一起构成了一个shell命令包。起名叫busybox。8.一个真正的根文件系统需要包括什么1.linuxrc2.dev目录设备文件在linux操作系统中一个硬件设备被当做一个设备文件来访问。read/write/ioctl/close操作设备3.sys和proc目录是个空文件夹就行但不可省略和驱动有关属于linux中的虚拟文件系统。4.usr目录存放系统用户所有的一些文件将来busybox安装时自动生成5.etc目录非常重要目录中的文件全都是运行时配置文件。/etc目录中的配置文件会直接或间接的被linuxrc程序调用完成操作系统的运行时配置。etc目录是制作rootfs的关键6.lib目录很关键不可省略。目录下存放当前操作系统中的动态和静态链接库文件。动态链接比如说printf函数其本体并未放置在a.out这个可执行程序中而在/lib/stdio.o这个文件中只有在a.out运行时程序会去/lib文件夹下找。9.VFSvirtual file system1.将硬件设备的访问虚拟为对文件目录的访问。我们就可以通过设备文件的方式访问硬件设备。2.形成隔离层协调多个文件系统的文件处理操作系统直接对接的是vfsvfs再去处理下层的文件系统文件系统调用驱动。
RELATED

相关推荐

网站的建设与维护实践报告:不会代码也能做的保姆级建站教程

网站的建设与维护实践报告:不会代码也能做的保姆级建站教程

网站的建设与维护实践报告:不会代码也能做的保姆级建站教程 自己不会代码想做网站,是不是看着满屏的HTML和CSS就头大?别慌,今天这篇网站的建设与维护实践报告,就是为你准备的保姆级建站教程。…

📅 2026/9/27 21:35:31
这几款 IDEA 插件让效率起飞!用 TaoToken 统一 Key 打通 Copilot、Apifox 与 MyBatis 工作流

这几款 IDEA 插件让效率起飞!用 TaoToken 统一 Key 打通 Copilot、Apifox 与 MyBatis 工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/27 21:30:31
ChatGPT-Shortcut(AiShort)提示词库使用 FAQ:使用、优化、商用授权与数据隐私全解析

ChatGPT-Shortcut(AiShort)提示词库使用 FAQ:使用、优化、商用授权与数据隐私全解析

AI 应用提示工程人工智能前端 【免费下载链接】ChatGPT-Shortcut Stop writing prompts from scratch — a searchable prompt library for ChatGPT, Claude, Gemini and Cursor Русский 한국어 العربية हिन्दी ไทย | 别再从头写提示词&…

📅 2026/9/27 21:30:31
MORE NEWS

更多资讯

📰

STM32F407+W5500实现TCP客户端:基于HAL库的以太网通讯实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

射频频率计模块选型避坑指南:50Ω阻抗、TCXO时基与前端架构

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

改需求拖一周?3步搞定wordpress个人下载网站模板怎么选

改需求拖一周?3步搞定wordpress个人下载网站模板怎么选 找建站公司改个按钮位置,对方回一句“需求变更,需排期一周”,你心里那个火是不是压都压不住?这行水太深,很多独立站长为了省那点开发费,最后被坑得连域名都保不住。面对市面上琳琅满目…

📰

UART本质解析:异步串行通信原理与嵌入式实战避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

C语言循环语句深度解析:从语法到实战优化与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

防震锤缺陷检测数据集:VOC转YOLO与YOLOv8训练实战解析

简介:电力场景防震锤缺陷检测数据集提供705张输电线路防震锤缺陷图片样本,面向电力巡检视觉算法工程师与目标检测学习者,适合训练damper_defect单类别小目标检测模型。压缩包共2000个文件,以txt标注文件、xml标注文件和jpg图片为主…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬