网站下载软件入口,自己如何申请域名,公司网站后台维护怎么做,美容视频视频网站建设title: “树莓派系统文件分析” date: 2023-10-25 permalink: /posts/2023/10/blog-post-5/ tags:
树莓派 本篇blog来分析和总结下树莓派系统文件以及他们的作用。使用的系统是Raspberry Pi OS with desktop
System: 64-bitKernel version: 6.1Debian version: 12 (bookworm)…
title: “树莓派系统文件分析” date: 2023-10-25 permalink: /posts/2023/10/blog-post-5/ tags:
树莓派 本篇blog来分析和总结下树莓派系统文件以及他们的作用。使用的系统是Raspberry Pi OS with desktop
System: 64-bitKernel version: 6.1Debian version: 12 (bookworm)
先看一下顶级目录/root有如下的文件和文件夹 其中
LICENCE.broadcom: 这是 Broadcom 公司的许可证文件包含了与 Broadcom 相关的许可信息。bcm2710-rpi-*.dtb 和 bcm2711-rpi-*.dtb: 这些是设备树二进制文件它们描述了 Raspberry Pi 板上的硬件组件信息如处理器、外设等。不同的文件对应于不同型号的 Raspberry Pi。cmdline.txt: 这个文件包含了内核启动时的命令行参数例如根文件系统的位置、启动选项等。config.txt: 这是 Raspberry Pi 的配置文件用于配置系统启动时的参数如分辨率、内存分配等。fixup*.dat: 这些是固件文件包含了一些用于修复和初始化硬件的固件信息。initramfs*: 这些文件是初始内存文件系统Initial RAM Filesystem的镜像用于在启动过程中提供临时的文件系统。overlays/: 这个目录包含了一系列的设备树覆盖文件可以在不修改主设备树的情况下对硬件进行配置。start*.elf: 这是 Raspberry Pi 启动加载器bootloader的主要组件之一负责加载内核和启动树。System Volume Information/: 这是一个 Windows 特定的隐藏系统目录通常会出现在 FAT 文件系统中。bootcode.bin: 这是 Raspberry Pi 启动加载器的一个关键组件负责初始化硬件并加载 start*.elf 文件。issue.txt: 这是一个文本文件包含了一些有关系统的信息。
总的来说这些文件组成了树莓派系统的启动和配置环境它们协同工作以确保系统能够正确启动并运行。
我们再来细致的看一下cmdline.txt的内容。cmdline.txt 是树莓派操作系统中一个非常重要的配置文件它包含了启动内核时传递给内核的参数。具体来说cmdline.txt 文件包含了一个命令行参数字符串这些参数会在树莓派启动时传递给 Linux 内核。这些参数可以控制内核的行为例如设置根文件系统的位置、指定启动模式等。
在我使用的debian bookworm版本系统中cmdline.txt的内容是这样的
consoleserial0,115200 consoletty1 rootPARTUUIDf6a7c4bd-02 rootfstypeext4 fsck.repairyes rootwait quiet init/usr/lib/raspberrypi-sys-mods/firstboot splash plymouth.ignore-serial-consoles我们来解释一下其中的内容
consoleserial0,115200将串口0也就是 UART 接口设置为控制台波特率为 115200。这意味着可以通过串口连接来进行通信和调试。consoletty1在控制台 1也就是图形用户界面上显示系统信息。rootPARTUUIDf6a7c4bd-02指定根文件系统的位置这里是通过 PARTUUID分区唯一标识符来指定的。这确保了根文件系统会被正确地挂载。rootfstypeext4指定根文件系统的类型这里是 ext4 文件系统。fsck.repairyes在启动时如果检测到文件系统错误将自动尝试修复。rootwait等待根文件系统准备好后再继续启动。quiet禁止显示大量启动信息使启动过程更为安静。init/usr/lib/raspberrypi-sys-mods/firstboot指定要运行的第一个初始化程序。这通常用于执行一些系统初始化的任务。splash允许显示启动画面如果系统配置了这个功能的话。plymouth.ignore-serial-consoles忽略串口控制台以避免干扰启动画面的显示。
我们再来看一下config.txt文件。config.txt 是 Raspberry Pi 系统中的一个重要配置文件用于控制硬件参数和设置。它位于启动分区中由 bootloader 在启动时读取并应用。
以下是 config.txt 文件的一些常见用途
分辨率和显示设置可以通过修改 config.txt 来设置显示器的分辨率、刷新率和其他显示参数。超频可以在 config.txt 中配置 Raspberry Pi 的CPU、GPU和内存的超频参数以提升性能。内存分配可以调整系统中内存的分配方式例如将 GPU 内存大小调整为满足特定需求。电源管理可以通过 config.txt 控制供电管理的行为例如禁用通过 USB 端口供电。设备树配置可以在 config.txt 中加载特定的设备树文件以配置硬件或启用外部设备。启动选项可以设置启动时的一些选项例如禁用 splash 屏幕、指定根文件系统等。Overlays可以通过 config.txt 加载一些硬件特定的功能或功能模块例如 GPIO 扩展板。音频设置可以配置音频参数如选择音频输出设备或配置 I2S 音频等。
总的来说config.txt 提供了一种在硬件级别上对 Raspberry Pi 进行配置和定制的方法以满足特定应用或需求。然而编辑此文件时应小心因为错误的配置可能会导致系统启动问题或硬件损坏。
在我使用的debian bookworm版本系统中,config.txt文件的内容是这样的
# For more options and information see
# http://rptl.io/configtxt
# Some settings may impact device functionality. See link above for details# Uncomment some or all of these to enable the optional hardware interfaces
#dtparami2c_armon
#dtparami2son
#dtparamspion# Enable audio (loads snd_bcm2835)
dtparamaudioon# Additional overlays and parameters are documented
# /boot/firmware/overlays/README# Automatically load overlays for detected cameras
camera_auto_detect1# Automatically load overlays for detected DSI displays
display_auto_detect1# Automatically load initramfs files, if found
auto_initramfs1# Enable DRM VC4 V3D driver
dtoverlayvc4-kms-v3d
max_framebuffers2# Dont have the firmware create an initial video setting in cmdline.txt.
# Use the kernels default instead.
disable_fw_kms_setup1# Run in 64-bit mode
arm_64bit1# Disable compensation for displays with overscan
disable_overscan1# Run as fast as firmware / board allows
arm_boost1[cm4]
# Enable host mode on the 2711 built-in XHCI USB controller.
# This line should be removed if the legacy DWC2 controller is required
# (e.g. for USB device mode) or if USB support is not required.
otg_mode1[all]
我们来解释一下其中的内容 dtparamaudioon: 启用音频功能并加载 snd_bcm2835 驱动程序。 camera_auto_detect1: 当检测到摄像头时自动加载相关的 overlay。 display_auto_detect1: 当检测到 DSI显示接口显示屏时自动加载相关的 overlay。 auto_initramfs1: 如果发现 initramfs 文件则自动加载。 dtoverlayvc4-kms-v3d: 启用 DRM VC4 V3D 驱动程序用于图形渲染。 max_framebuffers2: 设置最大帧缓冲区数量为 2。 disable_fw_kms_setup1: 禁用固件在 cmdline.txt 中创建初始的 video 设置使用内核的默认设置。 arm_64bit1: 启用 64 位模式。 disable_overscan1: 禁用对具有超扫描的显示器的补偿。 arm_boost1: 在固件/板子允许的情况下以最大速度运行。 [cm4]: 标志着接下来的设置是专门为 Compute Module 4 设计的。 otg_mode1: 启用 2711 内置的 XHCI USB 控制器的主机模式。 [all]: 标志着接下来的设置适用于所有 Raspberry Pi 设备。
我们再更进一步解释一下上面的几个名词 overlay: 在 Raspberry Pi 上“overlay” 指的是一种可以动态加载和卸载的硬件配置文件。这些配置文件包含了设备树片段和参数可以用来配置和启用特定的硬件功能或接口例如摄像头、显示屏、传感器等。通过使用 overlay你可以在不需要重新编译内核的情况下动态地调整硬件配置从而增强 Raspberry Pi 的灵活性和可配置性。这使得在不同的项目或场景中可以轻松地切换和配置不同的硬件组件。 initramfs文件initramfs 是一个临时的根文件系统用于在 Linux 内核引导时提供必要的文件和工具以便在实际的根文件系统挂载之前执行一些初始化任务。具体来说initramfs 可以包含一些必要的设备驱动、文件系统工具、网络配置等以确保系统能够正常启动和挂载真正的根文件系统。在 Raspberry Pi 中auto_initramfs1 的配置表示如果在 /boot/firmware 目录下发现了 initramfs 文件就会在启动时自动加载它。使用 initramfs 的一个常见情况是在引导过程中可能需要解密根文件系统或者进行一些需要提前初始化的操作。通过在 initramfs 中提供必要的工具和配置可以确保系统能够顺利启动。总的来说initramfs 是一个用于引导时期的临时文件系统允许在正式的根文件系统挂载之前进行一些初始化和准备工作。 dtoverlayvc4-kms-v3ddtoverlay 是 Raspberry Pi 系统中用于加载设备树覆盖Device Tree Overlay的一个配置参数。 设备树覆盖是一种在运行时修改设备树的机制它允许你动态地添加、修改或删除设备树中的设备节点或属性而无需重新编译整个设备树。通过在 config.txt 文件中使用 dtoverlay 参数你可以加载特定的设备树覆盖以对硬件进行配置或启用特定的功能。vc4-kms-v3d表示启用DRM VC4 V3D 驱动程序用于图形渲染。DRM 表示 Direct Rendering Manager它是 Linux 内核的一个子系统用于管理图形硬件设备并提供直接的渲染支持。vc4 是指 Broadcom 公司开发的一款用于树莓派的图形处理器芯片Broadcom VideoCore 4它集成了 3D 图形处理器和视频解码器。V3D 是 VideoCore 4 的 3D 图形引擎部分它负责处理与三维图形相关的任务包括渲染、变换、纹理映射等。“kms” 代表 “Kernel Mode Setting”它是一种在 Linux 内核层面进行显示设置的技术。KMS 允许内核控制显卡的显示设置包括分辨率、刷新率等而不再依赖于 X 服务器或其他用户空间工具来进行显示设置。通过 dtoverlayvc4-kms-v3d 这条配置启用了 Raspberry Pi 上的 VC4 显卡以及DRM 驱动程序并将其配置为使用 KMS 技术进行显示设置以便使用 VideoCore 4 的 3D 图形引擎进行硬件加速的图形渲染。这样的设置可以提高图形性能特别是对于需要处理复杂图形的应用程序和游戏而言。 otg_mode1: 启用 2711 内置的 XHCI USB 控制器的主机模式。2711 指的是树莓派的芯片型号。具体来说它指的是树莓派4Raspberry Pi 4使用的 Broadcom BCM2711 SoC系统芯片。XHCI 是一种 USB 控制器接口的标准。全称为 “eXtensible Host Controller Interface”它支持超速传输和低功耗。这种接口通常用于主机设备比如连接外部 USB 设备如鼠标、键盘、硬盘等的主板 USB 控制器。通过将 otg_mode1 添加到 config.txt 中启用了树莓派4上内置的 USB 3.0 控制器将其配置为支持主机模式使你可以连接其他 USB 设备到树莓派。
我们再来看一下overlays文件夹。这个目录包含了一系列的设备树覆盖文件可以在不修改主设备树的情况下对硬件进行配置。设备树Device Tree是一种描述硬件平台信息的数据结构它以一种结构化的方式描述了系统中各个硬件组件之间的关系和属性。设备树文件通常以.dts或.dtb为扩展名。
在嵌入式系统中特别是在一些复杂的系统-on-chipSoC中存在着大量的硬件组件如处理器、外设、总线等。这些组件之间的连接和属性关系可能非常复杂。设备树的目的是将这些硬件信息抽象出来以便内核在启动时能够正确地识别和配置硬件。
设备树的作用包括
硬件描述: 设备树文件描述了硬件平台的组件以及它们之间的连接关系。这包括了处理器、内存、外设等。抽象层: 设备树提供了一个硬件描述的抽象层使得相同的内核镜像可以在不同的硬件平台上运行。热插拔和动态配置: 设备树允许系统在运行时检测和配置硬件组件从而支持热插拔和动态配置。系统移植和开发简化: 设备树允许在不修改内核源代码的情况下将内核移植到不同的硬件平台上从而简化了开发和移植的工作。
设备树的工作方式如下
编写设备树源文件.dts: 这是一个类似于脚本的文件描述了硬件的结构、属性和连接关系。编译设备树源文件.dts: 使用设备树编译器dtc将设备树源文件编译成二进制的设备树文件.dtb。内核启动时加载设备树: 内核在启动时会加载设备树文件以获取硬件配置信息。内核根据设备树配置硬件: 内核使用设备树文件中描述的信息来配置硬件组件。
总的来说设备树是一种在嵌入式系统中描述硬件配置的强大工具它允许内核在不同的硬件平台上运行从而提高了系统的可移植性和灵活性。
下面我们用一个具体的例子来看一下设备树文件。
假设我们有一个树莓派 3 Model B我们将使用设备树文件来描述它的GPIO引脚以及一个LED灯连接到了其中一个引脚上。
首先我们编写一个设备树源文件.dts
/dts-v1/;
/plugin/;/ {compatible brcm,bcm2835;fragment0 {target gpio;__overlay__ {led_pin: led_pin {brcm,pins 16; // GPIO Pin Numberbrcm,function 1; // 1 is OUTPUT mode};};};
};
这个设备树源文件描述了以下信息
使用了 brcm,bcm2835 兼容性标识表明这是适用于 BCM2835 SoC 的设备树文件。在设备树的第一个片段fragment0中我们将描述 GPIO 控制器gpio的属性。在 __overlay__ 块内部我们定义了一个名为 led_pin 的节点该节点表示一个LED灯连接的GPIO引脚。brcm,pins 16; 表示这个LED连接在 GPIO 16 引脚上。brcm,function 1; 表示这个引脚将被配置为输出模式。
接下来我们使用设备树编译器dtc将这个设备树源文件编译成二进制的设备树文件.dtbo
dtc - -I dts -O dtb -o led-overlay.dtbo led-overlay.dts这将生成一个名为 led-overlay.dtbo 的二进制设备树文件。
最后将生成的设备树文件加载到树莓派的 /boot/overlays 目录中并在 config.txt 文件中添加一行来引用它
dtoverlayled-overlay这样在下一次启动时设备树将会被内核加载并配置相应的GPIO引脚以控制LED。
再来看一下/root/overlays文件夹里面的内容 overlays文件夹里面的内容相对多一些。/boot/overlays 文件夹中的文件是用于加载设备树覆盖Device Tree Overlays的配置文件。设备树覆盖允许在运行时动态地修改设备树以便支持不同的硬件配置或功能。
以下是其中一些常见的设备树覆盖文件及其作用
ads1015.dtbo: 支持 ADS1015 类模数转换器。ads1115.dtbo: 支持 ADS1115 类模数转换器。gpio-fan.dtbo: 支持连接到 GPIO 的风扇。i2c-gpio.dtbo: 提供了通过 GPIO 模拟 I2C 总线的功能。spi0-0cs.dtbo, spi0-1cs.dtbo, spi0-2cs.dtbo: 针对 SPI0 总线的不同配置例如启用/禁用片选线。spi1-1cs.dtbo, spi1-2cs.dtbo, spi1-3cs.dtbo: 针对 SPI1 总线的不同配置。spi2-1cs.dtbo, spi2-2cs.dtbo, spi2-3cs.dtbo: 针对 SPI2 总线的不同配置。spi3-1cs.dtbo, spi3-2cs.dtbo, spi3-2cs-pi5.dtbo: 针对 SPI3 总线的不同配置包括针对特定硬件如 Pi 5的配置。spi4-1cs.dtbo, spi4-2cs.dtbo: 针对 SPI4 总线的不同配置。spi5-1cs.dtbo, spi5-1cs-pi5.dtbo, spi5-2cs.dtbo, spi5-2cs-pi5.dtbo: 针对 SPI5 总线的不同配置包括针对特定硬件如 Pi 5的配置。uart0.dtbo, uart0-pi5.dtbo, uart1.dtbo, uart1-pi5.dtbo, uart2.dtbo, uart2-pi5.dtbo, uart3.dtbo, uart3-pi5.dtbo, uart4.dtbo, uart4-pi5.dtbo, uart5.dtbo: 针对不同 UART串口接口的配置。w1-gpio.dtbo, w1-gpio-pullup.dtbo: 支持 1-Wire 总线的 GPIO 配置。imx*.dtbo是树莓派支持的CMOS传感器型号的设备树覆盖文件。
这些文件允许用户根据实际需要动态地加载或卸载硬件模块从而使树莓派适应各种不同的硬件配置。加载设备树覆盖时可以通过修改 /boot/config.txt 文件添加一行类似于 dtoverlayoverlay-name 的配置来指定使用哪个覆盖文件。