ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

25_实验二十四_根文件系统全景

25_实验二十四_根文件系统全景 实验二十四 根文件系统全景——内核之外系统还需要什么对应课件《第6章 构建Linux根文件系统-V2》6.1 节Slide 2-16系列说明本系列基于华清远见 FS-MP1ASTM32MP157A开发板对应课件《第6章 构建Linux根文件系统》。实验二十三我们借出厂根文件系统走进了 Linux 命令行——系统栈四个部件U-Boot、内核、设备树、根里只剩根不是自己的。第 6 章补上最后一块用 busybox 从零构建自己的根文件系统、挂上 NFS。本篇是开篇认知篇根文件系统到底指什么、里面必须有哪些目录和文件、Linux 的文件类型与设备文件是怎么回事——这些概念不立住后面照抄的每个配置文件都是天书。前置实验二十三借根点过火本篇所有概念都挂在那次经历上。一、先把三组名词对齐内核与根文件系统的边界实验十八划过这里落到文件上内核负责驱动硬件、调度进程ls、sh、mount这些命令、C 库、配置文件、启动脚本全在根文件系统里。实验二十三点火后uname -a查的是内核敲的每条命令却都来自挂载的那个根——两样缺一不可。文件系统一词的两个含义一是指分区上存文件的格式ext2/ext3/ext4、fat、ntfs、jffs2、yaffs……同一块数据用哪种格式组织二是指 proc、sysfs、tmpfs 这类虚拟文件系统——它们的文件不落在外存上而是访问时由内核临时生成的在内存里。后文说挂载 sysfs、“fstab 里那行 tmpfs”用的都是第二义。挂载点Linux 以一棵树管理所有目录与文件其他分区或虚拟文件系统接到树上某个目录——这个目录就叫挂载点。根文件系统挂载在/上是树的根bootargs 里root/dev/xxx指的就是它。实验十四看过的 eMMC 分区表里rootfs那格与bootfs一样只是装根文件系统的分区这个角色。二、根文件系统里有什么目录逐个认制作根文件系统本质就是创建一堆目录、往里放该放的文件。哪些目录必须有课件按挂载其他文件系统之前就要能用划了一条线目录必须有放什么与我们经历的对号/bin必须所有用户可用的基本命令ls、sh、chmod、mount、mkdir、mknod…挂载其他文件系统之前就能用实验二十三借根时敲的ls、uname就住在类似的地方/sbin必须只有管理员用的系统命令shutdown、reboot、fdisk、fsck…同样挂载前可用——/dev必须设备文件——Linux一切皆文件的入口/dev/ttySTM0就是我们的串口实验二十六专题/etc必须系统与应用的配置文件——第 6 章的核心工作就是写它的四件套——/lib必须共享库.so、可加载模块.ko嵌入式为省空间不放静态库.abusybox 动态编译就靠它实验二十五/home、/root可选普通用户 / root 用户的登录目录——/usr建议共享、只读的程序与数据Unix Software Resource——/var建议可变数据log、spool、临时文件——/proc建议空目录proc 虚拟文件系统的挂载点——内核运行状态的窗口cat /proc/cpuinfo实验二十三/mnt建议空目录临时挂载点——/tmp建议空目录临时文件挂 tmpfs 可减少对 Flash 的读写fstab 里那行就是它/sys建议空目录sysfs 挂载点——设备管理重地mdev 靠它——/opt可选用户自选软件——图课件 Slide 4——根文件系统目录结构图根目录/下依次列出/bin、/sbin、/dev、/etc、/lib、/home、/root、/usr、/var、/proc、/mnt、/tmp等目录——实验二十五之后我们亲手建的目录树就是这张图的落地版。发行版里的一个常见变形桌面 Linux比如我们虚拟机的 Ubuntu常把/bin、/sbin做成指向/usr/bin、/usr/sbin的符号链接——别在虚拟机里看到bin - usr/bin就以为自己认错了图课件 Slide 4——终端ls /bin -l输出lrwxrwxrwx 1 root root 7 5月 11 12:44 /bin - usr/bin红框标出/bin是指向usr/bin的符号链接权限位首字母l link第三节的文件类型里会再碰到它。图课件 Slide 5——同理ls /sbin -l显示/sbin - usr/sbin。我们做的嵌入式根文件系统不搞这套busybox 安装出来的/bin、/sbin是货真价实的目录。两个必须目录的内容表图课件 Slide 9——/lib目录内容表libc.so.*动态连接 C 库、ld*连接器/加载器负责把程序和它依赖的.so接起来、modules内核可加载模块.ko的存放目录第 7 章驱动就住这里。实验二十五会从交叉编译器里把前两者拷进来。图课件 Slide 11——/usr目录内容表bin、lib、sbin、share、includeC 头文件嵌入式系统不需要——那是 PC 上编译时用的、local、src、X11R6、games等。我们只建usr/bin、usr/sbin两个busybox 安装时自动建。三、Linux 的文件类型ls 输出的第一个字母Linux 把七种东西都当文件靠ls -l输出的第一个字母区分首字母类型干什么-普通文件最常见的文件d目录文件目录本身也是一种文件c字符设备文件按字节流顺序访问的设备串口、键盘b块设备文件可随机访问固定大小块的设备硬盘、Flash、eMMCpFIFO / 命名管道进程间通信l符号连接指向另一个文件软连接硬连接不显示ls套接口socket进程间网络通信图课件 Slide 15——Linux 文件类型表普通文件、目录文件、字符设备文件、块设备文件、FIFO命名管道、套接口、连接文件软/硬连接。ls -l的完整输出怎么读第三个字段硬连接个数是新面孔图课件 Slide 16——ls命令输出示例readme.txt-rw-r--r--、inode 228883、硬连接数 2普通文件、ln_soft - readme.txtlrwxrwxrwx符号连接、ln_hard与 readme.txt同一个 inode 228883硬连接、tmp_dirdrwxr-xr-x目录、ttySAC0crw-r--r--字符设备 4,64、mtdblock0brw-r--r--块设备 31,0、my_fifoprw-r--r--管道、*.slave-socketsrwxr-xr-x套接字。inode 是文件的身份证号一个 inode 对应一份文件实体目录里的文件名只是指向它的硬连接。硬连接ln_hard与原文件共享同一个 inode——所以删掉其中一个名字文件还在引用计数归零才真删符号连接ln_soft有自己的 inode存的只是路径——原件删了它就悬空。这个概念第 8 章 GPIO、第 9 章驱动调试时还会在/dev、/sys里反复碰到。四、设备文件专题/dev、主次设备号与 mknod设备文件是 Linux 特有的文件类型对它读写 对设备读写。两类设备的差别就一条字符设备按字节流顺序访问串口、键盘块设备按固定大小的块随机访问eMMC、SD、NAND——实验十四 U-Boot 侧mmc read/write按扇区512 字节块操作的就是块设备的读法。图课件 Slide 6——ls -l显示的两类设备文件brw-rw---- ... 8, 0 ... /dev/sdab开头块设备主设备号 8、次设备号 0与crw-rw---- ... 4, 64 ... /dev/ttyS0c开头字符设备主设备号 4、次设备号 64。设备大小的位置显示的是主设备号, 次设备号。主设备号定位驱动次设备号定位设备一个主设备号代表一个驱动程序次设备号区分这个驱动管的第几台设备SATA 盘主 8、串口主 4 是内核的约定。手工创建设备文件的命令mknod /dev/ttySAC0 c 4 64 # 字符设备主 4 次 64串口 mknod /dev/hda1 b 3 1 # 块设备主 3 次 1IDE 硬盘第一分区/dev 下的文件从哪来三种方法手动mknod启动前把要用的设备文件建好——土办法设备一多就累devfs内核 2.6.13 之前的老机制已过时认识一下就行udev用户空间的守护程序根据硬件状态动态创建/删除设备文件需要内核支持 sysfs提供设备信息与 tmpfs给设备文件落脚。busybox 里的mdev是 udev 的简化版——嵌入式标配。这条线在第 6 章的落点实验二十六的 rcS 脚本会照 busybox 官方文档把 mdev 的七步挂载流程跑起来挂 sysfs →echo /sbin/mdev /proc/sys/kernel/hotplug→mdev -s让内核在设备插拔时自动调 mdev 建删文件——上面这段概念到时会一一对号。五、实验环境实际项目实际值板子状态第 5 章收官形态自己的 U-Boot 自己的内核 bootargs 借出厂根实验二十三Ubuntu 虚拟机实验十九装的 ARM 官方 gcc-arm-9.2busybox 就用它编、tftpd-hpa实验十三本篇新增材料无——认知篇不上板不编译开工自检10 秒本篇不上板。要做的只是把概念与已跑过的经历对号并确认第 6 章的两份材料已在手busybox-1.32.0.tar.bz2、buildroot-2020.02.6.tar.bz2——都已从资料包复制到本章目录04_构建Linux根文件系统/实验二十五、二十八分别解压。六、课件 ↔ 步骤对应表课件 Slide内容对应本篇2~3文件系统概述、文件系统类型两义、挂载点第一节4~14根文件系统目录逐个认bin/sbin/dev/etc/lib/home/root/usr/var/proc/mnt/tmp/sys/opt第二节15~16文件类型表、ls 输出与 inode第三节6~8设备文件、主次设备号、mknod、/dev 三种创建方法第四节本篇概念 → 后面谁用 → 现在含糊的后果本篇概念后面哪一篇用现在含糊的后果/bin、/sbin挂载前可用实验二十五busybox 安装产物就是填这两个目录的不知道为什么安装目录里先有 bin/sbin/lib 的共享库与加载器实验二十五从交叉编译器拷 glibc缺了它 busybox 直接起不来动态编译三个字没感觉拷库时不知道拷的是什么/etc 是配置文件的家实验二十六inittab/rcS/fstab/profile 四件套逐个写照抄四个文件却不知道谁在什么时候读它设备文件 主次设备号 mdev实验二十六mdev 七步流程第 7 章驱动的主设备号rcS 里echo /sbin/mdev /proc/sys/kernel/hotplug不知道在干嘛proc/sysfs/tmpfs 三个虚拟文件系统实验二十六 fstab 与 rcS 的挂载行第 9 章 /sys/kernel/debug 调试mount -t 那几行命令永远是天书inode 与文件类型首字母实验二十九chmod a-s busybox的 Set UID 位、ll看权限权限串里的s看不出来是问题根源本篇不需要任何新资料。第 6 章要用的两份材料已从资料包D:\桌面文件\资料\嵌入式linux复制到本章目录busybox-1.32.0.tar.bz2实验二十五、buildroot-2020.02.6.tar.bz2实验二十八md5 与源一致。七、自测一览自测问题达标答案在哪一节根文件系统和内核是什么关系谁先谁后内核启动后首先挂载根文件系统bootargs 的 root再执行其中的 init 程序——内核管硬件根管软件环境第一节文件系统一词的两种含义分区格式ext4 等与虚拟文件系统proc/sysfs/tmpfs文件在内存中由内核临时生成第一节哪些目录必须有判据是什么/bin、/sbin、/dev、/etc、/lib——判据是挂载其他文件系统之前就要能用第二节crw-rw----里 c 和 4, 64 各是什么c 字符设备4 主设备号定位驱动64 次设备号定位同驱动的第几台设备第四节/dev 的三种创建方法手动 mknod、devfs已过时、udev——busybox 的 mdev 是 udev 简化版第四节硬连接与符号连接的区别硬连接与原文件共享 inode符号连接有自己的 inode、只存路径原件删除即悬空第三节八、下一步busybox 构建根文件系统下一篇实验二十五动手解压 busybox-1.32.0、改 Makefile 指定交叉编译器就是实验十九装的那套arm-none-linux-gnueabihf-——当时说它编不了 busybox 的 SDK 编译器的反面就是它、menuconfig 配四处、编译安装再把交叉编译器里的 glibc 库拷进 lib——根文件系统的骨架一次成型。
返回列表