PetaLinux 文件系统目录详解:嵌入式 Linux 根文件系统各文件夹的作用与内容

PetaLinux 文件系统目录详解:嵌入式 Linux 根文件系统各文件夹的作用与内容

文章目录

  • [PetaLinux 文件系统目录详解:嵌入式 Linux 根文件系统各文件夹的作用与内容](#PetaLinux 文件系统目录详解:嵌入式 Linux 根文件系统各文件夹的作用与内容)
    • 一、根文件系统总览
    • 二、各目录详细说明
      • [1. `/bin` - 基本用户命令二进制文件](#1. /bin - 基本用户命令二进制文件)
      • [2. `/sbin` - 系统管理命令](#2. /sbin - 系统管理命令)
      • [3. `/usr` - 用户系统资源(二级层次)](#3. /usr - 用户系统资源(二级层次))
      • [4. `/lib` - 系统引导和根文件系统运行所需的基本共享库与内核模块](#4. /lib - 系统引导和根文件系统运行所需的基本共享库与内核模块)
      • [5. `/etc` - 系统配置文件](#5. /etc - 系统配置文件)
      • [6. `/dev` - 设备文件](#6. /dev - 设备文件)
      • [7. `/proc` - 进程信息伪文件系统](#7. /proc - 进程信息伪文件系统)
      • [8. `/sys` - 内核对象信息与驱动模型](#8. /sys - 内核对象信息与驱动模型)
      • [9. `/boot` - 引导加载程序相关文件](#9. /boot - 引导加载程序相关文件)
      • [10. `/home` - 普通用户主目录](#10. /home - 普通用户主目录)
      • [11. `/root` - root 用户主目录](#11. /root - root 用户主目录)
      • [12. `/var` - 可变数据文件](#12. /var - 可变数据文件)
      • [13. `/tmp` - 临时文件](#13. /tmp - 临时文件)
      • [14. `/run` - 运行时变量数据](#14. /run - 运行时变量数据)
      • [15. `/mnt` 与 `/media` - 临时挂载点](#15. /mnt/media - 临时挂载点)
      • [16. `/opt` - 可选应用软件包](#16. /opt - 可选应用软件包)
      • [17. `/srv` - 服务数据](#17. /srv - 服务数据)
    • [三、PetaLinux 特有的目录或注意事项](#三、PetaLinux 特有的目录或注意事项)
    • 四、实际使用中的小贴士
      • [1. 如何查看当前目录使用情况?](#1. 如何查看当前目录使用情况?)
      • [2. 如何判断某个命令来自哪个包?](#2. 如何判断某个命令来自哪个包?)
      • [3. 如何自定义根文件系统内容?](#3. 如何自定义根文件系统内容?)
      • [4. 如何固化自定义脚本或配置文件?](#4. 如何固化自定义脚本或配置文件?)
    • 五、总结

在嵌入式 Linux 开发中,PetaLinux 是 Xilinx 官方推荐的一套嵌入式 Linux 构建工具,能够快速生成针对 Zynq、Zynq UltraScale+ MPSoC 等平台的 Linux 镜像。PetaLinux 构建出的根文件系统(rootfs)遵循标准的 Linux 文件系统层次结构(Filesystem Hierarchy Standard, FHS),同时又针对嵌入式场景做了一些定制与精简。

对于刚接触 PetaLinux 或嵌入式 Linux 的开发者来说,理清根文件系统下各个目录的用途、存放内容,以及它们与实际系统运行的关系,是调试和定制系统的基础。本文将详细介绍 PetaLinux 生成的根文件系统中常见文件夹的作用和内容,帮助你快速掌握嵌入式 Linux 的文件布局。


一、根文件系统总览

一个典型的 PetaLinux 根文件系统(以 rootfsrootfs.cpio 形式呈现)挂载到目标板的 / 下,使用 ls / 可以看到如下目录:

复制代码
bin   boot  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

有些目录在 PetaLinux 默认配置下可能为空(如 /home/srv),但仍保留以满足标准应用程序的预期。下面我们逐一剖析这些目录的用途。


二、各目录详细说明

1. /bin - 基本用户命令二进制文件

用途:存放系统启动和单用户模式下必需的用户级命令,所有用户均可执行。

典型内容

  • 常用 Shell 命令:shlscpmvrmcatechomountumount 等。
  • 在 PetaLinux 中,这些命令通常来自 BusyBox (一个集成众多常用命令的精简工具集),因此 /bin 下的可执行文件多为指向 BusyBox 的符号链接。
bash 复制代码
$ ls -l /bin/ls
lrwxrwxrwx 1 root root 7 Mar  9  2023 /bin/ls -> busybox

注意 :现代 Linux 发行版倾向于将 /bin/sbin/lib 合并到 /usr 下(即 UsrMerge)。但在 PetaLinux 构建的嵌入式系统中,为了精简仍保留传统的分离结构。

2. /sbin - 系统管理命令

用途:存放系统管理员使用的关键系统命令,通常需要 root 权限执行。

典型内容

  • ifconfigroute(网络配置)
  • fsckmkfs(文件系统检查与创建)
  • reboothaltpoweroff(系统控制)
  • 与硬件交互的工具:fw_printenvi2cgetgpio 等(取决于 PetaLinux 配方中是否添加相关软件包)

/bin 类似,这些命令大多也链接至 BusyBox。

3. /usr - 用户系统资源(二级层次)

/usr 是根文件系统中内容最丰富的目录之一,它包含了大部分用户程序、库、文档和共享数据。

子目录 用途
/usr/bin 绝大多数用户命令,如 gccpythonmakessh 等(如果安装了)
/usr/sbin 非必需的系统管理命令,如 sshdtcpdumpuseradd
/usr/lib 应用程序和系统服务使用的共享库、目标文件
/usr/include C/C++ 头文件,用于交叉编译环境
/usr/share 架构无关的共享数据,如帮助文档、时区信息、字体、图标等
/usr/local 本地安装的软件,PetaLinux 默认通常为空,供用户自定义安装使用

PetaLinux 特有说明 :在 /usr/bin 下可能会包含一些与 Xilinx 硬件相关的工具,如 xbutil(管理 Alveo 加速卡)、dfx-mgr(动态功能交换管理器)等,具体取决于你启用的 IMAGE_FEATURES 和添加的 recipes。

4. /lib - 系统引导和根文件系统运行所需的基本共享库与内核模块

用途 :存放系统启动和 /bin/sbin 下程序所依赖的动态链接库,以及内核模块。

子路径 内容
/lib/ld-linux-*.so* 动态链接器/加载器
/lib/libc.so.* C 标准库(通常为 glibc 或 musl)
/lib/libm.so.* 数学库
/lib/modules/$(uname -r)/ 内核模块目录 ,存放编译好的 .ko 文件及其依赖关系文件(modules.dep)

PetaLinux 特别注意

  • 若你在 PetaLinux 配置中使能了内核模块(CONFIG_xxx=m),这些模块会被安装到 /lib/modules/<kernel-version>/ 下。
  • 启动时,depmod 会生成模块依赖关系,确保 modprobe 能正确加载模块。

5. /etc - 系统配置文件

用途:存放系统全局的配置文件(文本文件),启动脚本和网络配置等均在此处。

重要文件/子目录

文件/目录 作用
/etc/inittab 定义 init 进程的运行级别及启动的任务(若使用 sysvinit)
/etc/init.d/ SysV init 风格的服务启动脚本
/etc/rc*.d/ 各个运行级别下服务的符号链接(K 开头表示停止,S 开头表示启动)
/etc/fstab 文件系统挂载表,定义启动时自动挂载的分区
/etc/passwd/etc/shadow 用户账户信息(密码哈希存储在 shadow 中)
/etc/group 用户组信息
/etc/hostname 主机名
/etc/hosts 静态主机名解析
/etc/resolv.conf DNS 解析服务器配置(可能由 DHCP 或 network manager 动态生成)
/etc/network/interfaces 网络接口静态配置(若使用 ifupdown)
/etc/udev/ udev 设备管理器的规则和配置
/etc/dropbear/ Dropbear SSH 服务器的密钥和配置(PetaLinux 常用轻量级 SSH)

PetaLinux 特性

PetaLinux 生成的根文件系统默认使用 BusyBox initSysVinit (可配置)。/etc/init.d/rcS 是系统启动时的主要初始化脚本,你可以在这里添加自定义启动命令。

6. /dev - 设备文件

用途 :Linux "一切皆文件"哲学的体现,所有硬件设备(包括虚拟设备)都以特殊文件的形式存在于 /dev 下。

典型内容

  • 块设备:/dev/mmcblk0(SD 卡)、/dev/mtdblock0(NAND/NOR Flash)
  • 字符设备:/dev/ttyPS0(Zynq UART)、/dev/i2c-0(I2C 总线)、/dev/gpiochip*(GPIO 控制器)
  • 虚拟设备:/dev/null/dev/zero/dev/random/dev/urandom
  • 终端:/dev/tty/dev/console/dev/pts/*

在 PetaLinux 中,/devdevtmpfsudev/mdev 动态管理。启动时内核挂载 devtmpfs,用户空间的 udev/mdev 负责处理热插拔事件并创建设备节点。

7. /proc - 进程信息伪文件系统

用途:一个内存中的虚拟文件系统,提供了内核和进程信息的实时视图。不占用磁盘空间。

常用文件

  • /proc/cpuinfo - CPU 信息
  • /proc/meminfo - 内存使用情况
  • /proc/version - 内核版本
  • /proc/uptime - 系统启动时长
  • /proc/<PID>/ - 每个进程的详细信息(如 cmdlinestatusfd/
  • /proc/device-tree/ - 设备树(Device Tree)的运行时视图(对嵌入式开发极其有用!)

例如,查看 Zynq MPSoC 的 CPU 信息:

bash 复制代码
cat /proc/cpuinfo

8. /sys - 内核对象信息与驱动模型

用途 :类似于 /proc,但提供的是关于内核对象、设备和驱动模型的统一视图。

常用目录

  • /sys/class/ - 按设备类别分类(如 /sys/class/gpio/ 用于操作 GPIO)
  • /sys/devices/ - 按实际设备拓扑组织
  • /sys/kernel/debug/ - debugfs 挂载点 ,提供内核调试信息(需挂载 debugfs

PetaLinux 默认启用 sysfs,许多硬件调试都依赖 /sys

9. /boot - 引导加载程序相关文件

注意 :在嵌入式 Linux 中,/boot 目录不一定被挂载为单独的分区,其内容可能直接存放在根文件系统中。

PetaLinux 环境下 /boot 的典型内容

  • ImageuImage - 编译好的 Linux 内核镜像
  • system.dtbsystem-top.dtb - 设备树二进制文件
  • boot.scrboot.bin - U-Boot 启动脚本或综合引导文件(对于 Zynq,BOOT.BIN 包含 FSBL、bitstream 和 U-Boot,通常放在 FAT 分区,不在 /boot 下)

对于使用 ext4 根文件系统 且由 U-Boot 加载内核的场景,U-Boot 会从 FAT 分区读取内核和 DTB,因此 /boot 可能为空或仅用于存放备份镜像。具体情况取决于你的启动介质配置。

10. /home - 普通用户主目录

用途:为系统上的普通用户提供个人文件存储空间。

PetaLinux 默认通常只创建 root 用户,因此 /home 目录多为空。如果需要创建多用户环境,可以在 petalinux-config -c rootfs 中添加用户支持包,并在此处创建用户目录。

11. /root - root 用户主目录

用途 :root 用户的专属主目录,路径固定为 /root(不同于 /home/root)。

12. /var - 可变数据文件

用途:存放系统运行过程中内容会频繁变化的文件,如日志、缓存、锁文件、临时数据库等。

子目录 内容
/var/log 系统和应用程序日志文件(如 messagesdmesgboot.log
/var/run 运行时进程 PID 文件和 socket 文件(现多软链接到 /run
/var/lock 锁文件,确保资源互斥访问(软链接到 /run/lock
/var/tmp 持久化的临时文件(系统重启后通常保留)
/var/spool 邮件、打印任务等队列数据
/var/lib 应用程序状态信息,如包管理器数据库(opkgrpm

13. /tmp - 临时文件

用途 :所有用户和程序存放临时文件的目录。系统重启后该目录内容会被清空

在 PetaLinux 中,/tmp 通常挂载为 tmpfs(内存文件系统),这样可以减少对 Flash 的写入磨损。

14. /run - 运行时变量数据

用途:自系统启动以来描述系统状态的数据,通常也挂载为 tmpfs。系统启动早期即可用,且重启后消失。

典型内容

  • /run/utmp - 当前登录用户信息
  • /run/udev/ - udev 运行时数据
  • /run/dbus/ - D-Bus 系统总线的 socket 文件
  • /run/media/ - 自动挂载的可移动介质(如 U 盘)挂载点

15. /mnt/media - 临时挂载点

  • /mnt:系统管理员手动挂载文件系统的临时挂载点。PetaLinux 中常用于挂载 SD 卡的其他分区、NFS 共享等。
  • /media :自动挂载可移动介质(如 USB 存储设备)的基础目录。若系统使用 udisksautomount 工具,U 盘会被挂载到 /media/sda1 等子目录下。

16. /opt - 可选应用软件包

用途 :存放额外安装的第三方软件。PetaLinux 镜像默认可能为空,但当你通过 Yocto recipe 添加独立的大型软件(如 Xilinx Vitis AI 运行时、自定义应用程序)时,常将它们安装到 /opt 下。

例如,Xilinx 提供的 AI 示例可能安装至 /opt/xilinx/

17. /srv - 服务数据

用途 :存放系统服务提供的数据,如 HTTP 服务器(/srv/www)或 FTP 服务器(/srv/ftp)。嵌入式系统中较少用到,默认多为空。


三、PetaLinux 特有的目录或注意事项

  1. /lib/firmware/

    PetaLinux 内核可能通过 request_firmware() 接口加载固件到硬件设备(如 WiFi/BT 芯片、Xilinx AI Engine 固件)。这些固件文件(.bin.fw)会被放置在 /lib/firmware/ 下。

  2. /usr/bin/petalinux-* 并不存在!

    注意,PetaLinux 是构建工具 ,生成的根文件系统里没有 petalinux- 开头的命令。这些命令只在开发主机上使用。

  3. 设备树叠加层(DTBO)

    若使用动态设备树叠加层,.dtbo 文件常放在 /lib/firmware//boot/ 下,由 dfx-mgr 或用户脚本加载。

  4. 挂载点与分区布局

    PetaLinux 构建的映像通常将根文件系统打包为 rootfs.cpio.gz.u-bootrootfs.ext4,而引导文件(BOOT.BINimage.ub)放在 FAT 分区中。因此在目标板上,根文件系统的 /boot 可能为空,而真正的内核/DTB 在第一个 FAT 分区(挂载为 /run/media/mmcblk0p1 等)。


四、实际使用中的小贴士

1. 如何查看当前目录使用情况?

使用 df -h 查看各挂载点的磁盘使用量:

bash 复制代码
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       3.5G  320M  3.0G  10% /
devtmpfs        494M     0  494M   0% /dev
tmpfs           494M  1.2M  493M   1% /run
tmpfs           494M  132K  494M   1% /var/volatile

2. 如何判断某个命令来自哪个包?

在 PetaLinux 环境中可以使用 which 找到命令位置,然后检查其链接:

bash 复制代码
which ls
# /bin/ls
ls -l /bin/ls
# lrwxrwxrwx 1 root root 7 Mar  9  2023 /bin/ls -> busybox

3. 如何自定义根文件系统内容?

  • 通过 petalinux-config -c rootfs 菜单增减软件包。
  • project-spec/meta-user/recipes-core/images/petalinux-image.bbappend 中添加 IMAGE_INSTALL += "your-package"
  • project-spec/meta-user/ 下创建自定义 recipe 或添加文件到 rootfs 的特定路径。

4. 如何固化自定义脚本或配置文件?

将文件放在 project-spec/meta-user/recipes-core/base-files/ 下,通过 bbappend 覆盖原 /etc 下的文件,或者编写自己的 recipe 安装到目标目录。


五、总结

PetaLinux 生成的根文件系统遵循标准的 Linux 目录结构,但针对嵌入式做了大量精简。理解各目录的作用,能够帮助你:

  • 快速定位问题 :比如配置文件在 /etc,日志在 /var/log,模块在 /lib/modules
  • 进行系统定制:知道在哪里添加自启动脚本,在哪里放置固件。
  • 有效调试硬件 :利用 /sys/proc/device-tree 查看设备状态。

参考资料

相关推荐
曼岛_1 小时前
[网络安全]Linux权限维持-后门篇
linux·chrome·web安全
小陈99cyh1 小时前
redis 一直报错# Fatal: Can‘t initialize Background Jobs.
运维·redis
Fanfanaas1 小时前
Linux 系统编程 进程篇 (三)
linux·运维·服务器·c语言·单片机·学习
历程里程碑1 小时前
Linux 50 IP协议深度解析:从报头结构到子网划分与NAT
java·linux·开发语言·网络·c++·python·智能路由器
九天鸟1 小时前
ESXI里面虚拟机服务器始终保持免用户认证状态
linux·运维·centos
青城山下————1 小时前
CentOS 7 安装 Redis(使用默认 6379 端口)完整实践与踩坑总结
linux·redis·centos
汽车仪器仪表相关领域1 小时前
GT-NHVR-20-A1工业及商业用途点型可燃气体探测器:精准感知隐患,筑牢工商业安全防线
运维·网络·人工智能·功能测试·单元测试·汽车·压力测试
wanhengidc2 小时前
如何有效防范网络安全威胁
运维·服务器·网络·网络协议·安全·web安全·智能手机
王琦03182 小时前
第十一章 管理Linux软件包和进程
linux·运维·服务器