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- 服务数据)
- [1. `/bin` - 基本用户命令二进制文件](#1.
- [三、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 根文件系统(以 rootfs 或 rootfs.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 命令:
sh、ls、cp、mv、rm、cat、echo、mount、umount等。 - 在 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 权限执行。
典型内容:
ifconfig、route(网络配置)fsck、mkfs(文件系统检查与创建)reboot、halt、poweroff(系统控制)- 与硬件交互的工具:
fw_printenv、i2cget、gpio等(取决于 PetaLinux 配方中是否添加相关软件包)
与 /bin 类似,这些命令大多也链接至 BusyBox。
3. /usr - 用户系统资源(二级层次)
/usr 是根文件系统中内容最丰富的目录之一,它包含了大部分用户程序、库、文档和共享数据。
| 子目录 | 用途 |
|---|---|
/usr/bin |
绝大多数用户命令,如 gcc、python、make、ssh 等(如果安装了) |
/usr/sbin |
非必需的系统管理命令,如 sshd、tcpdump、useradd |
/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 init 或 SysVinit (可配置)。/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 中,/dev 由 devtmpfs 或 udev/mdev 动态管理。启动时内核挂载 devtmpfs,用户空间的 udev/mdev 负责处理热插拔事件并创建设备节点。
7. /proc - 进程信息伪文件系统
用途:一个内存中的虚拟文件系统,提供了内核和进程信息的实时视图。不占用磁盘空间。
常用文件:
/proc/cpuinfo- CPU 信息/proc/meminfo- 内存使用情况/proc/version- 内核版本/proc/uptime- 系统启动时长/proc/<PID>/- 每个进程的详细信息(如cmdline、status、fd/)/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 的典型内容:
Image或uImage- 编译好的 Linux 内核镜像system.dtb或system-top.dtb- 设备树二进制文件boot.scr或boot.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 |
系统和应用程序日志文件(如 messages、dmesg、boot.log) |
/var/run |
运行时进程 PID 文件和 socket 文件(现多软链接到 /run) |
/var/lock |
锁文件,确保资源互斥访问(软链接到 /run/lock) |
/var/tmp |
持久化的临时文件(系统重启后通常保留) |
/var/spool |
邮件、打印任务等队列数据 |
/var/lib |
应用程序状态信息,如包管理器数据库(opkg 或 rpm) |
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 存储设备)的基础目录。若系统使用udisks或automount工具,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 特有的目录或注意事项
-
/lib/firmware/PetaLinux 内核可能通过
request_firmware()接口加载固件到硬件设备(如 WiFi/BT 芯片、Xilinx AI Engine 固件)。这些固件文件(.bin、.fw)会被放置在/lib/firmware/下。 -
/usr/bin/petalinux-*并不存在!注意,PetaLinux 是构建工具 ,生成的根文件系统里没有
petalinux-开头的命令。这些命令只在开发主机上使用。 -
设备树叠加层(DTBO)
若使用动态设备树叠加层,
.dtbo文件常放在/lib/firmware/或/boot/下,由dfx-mgr或用户脚本加载。 -
挂载点与分区布局
PetaLinux 构建的映像通常将根文件系统打包为
rootfs.cpio.gz.u-boot或rootfs.ext4,而引导文件(BOOT.BIN、image.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查看设备状态。
参考资料