跳到主要内容

11. 配置文件、设备树

A. 配置文件

armsom板卡使用armbian管理源码镜像,在文件系统中的boot目录下有armbianEnv.txt文件,这个文件主要用来配置uboot和描述启动过程中的一些关键信息。

armbianEnv.txt​ 文件提供了灵活的方式来调整启动参数,而无需重新编译或修改 U-Boot。

armbianEnv.txt​ 文件的作用

  1. U-Boot 环境变量配置

    • armbianEnv.txt​ 文件允许用户通过简单的文本格式来定义和修改 U-Boot 的环境变量。这些变量可以控制如何加载内核、初始化 RAM 磁盘、传递命令行参数等。
  2. 自定义启动行为

    • 用户可以通过编辑 armbianEnv.txt​ 文件来自定义启动过程。例如,指定不同的内核镜像、设备树文件、根文件系统的挂载点等。
  3. 简化调试和开发

    • 对于开发者来说,armbianEnv.txt​ 提供了一种方便的方法来测试不同的启动配置,而不需要每次都重新编译 U-Boot 或者直接在 U-Boot 命令行中输入长串的启动命令。
  4. 支持多启动选项

    • 该文件还可以用来配置多个启动选项,比如从 SD 卡、eMMC 或者网络启动,使得用户可以在不同环境下轻松切换启动源。
  5. 传递额外参数给内核

    • 除了标准的启动参数外,armbianEnv.txt​ 还可以让用户向内核传递额外的命令行参数,这对于特定硬件配置或者调试目的非常有用

我们以sige5的armbianEnv.txt举例,详细阐述该文件中参数的作用:

armsom@armsom-sige5:/boot$ cat armbianEnv.txt
verbosity=1 // 设置启动过程中的输出详细程度。设置为1将尽量打印更多信息,方便调试
bootlogo=true // 控制是否在启动时显示启动 Logo。这里设置为开启显示logo
console=both // both 意味着输出将同时发送到串行控制台(如通过 UART 接口连接的终端)和 HDMI 或其他视频输出设备。
overlay_prefix=rk35xx // 用于指定与特定SoC相关的设备树文件路径
fdtfile=rockchip/rk3576-armsom-sige5.dtb // 指定当前设备使用的设备树为/boot/dtb/rockchip/rk3576-armsom-sige5.dtb
rootdev=UUID=24e6d1ad-085e-4c9b-9784-f33d6ca6d189 // 使用 UUID 来唯一标识根文件系统所在的分区,最可靠的方式,UUID 不会随设备顺序变化而改变
rootfstype=ext4 // 指定文件系统的类型为ext4
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u // 列出USB 存储设备的 Vendor ID和Product ID(PID),u表示启用 UAS (USB Attached SCSI Protocol)

B. 设备树

1. 什么是设备树

linux内核从3.x开始引入设备树的概念,其主要作用是将关于板卡外设的修改等操作与内核源码分离,提高内核的通用性,同时减少内核开发者的工作量。

使用设备树后一个内核镜像能够适配众多板卡,不同板卡只更换设备树即可。

设备树用于描述一个硬件平台的硬件资源。这个“设备树”可以被bootloader(uboot)传递到内核, 内核可以从设备树中获取硬件信息。 相当于使用定制的设备树就可以操作不一样的硬件资源, 比如i2c,spi,mipi,mini-pcie,i2s等接口,都是通过设备树去配置使能才能去正常操作它们。

image

设备树以“树状”结构描述硬件资源。例如本地总线为树的“主干”在设备树里面称为“根节点”, 挂载到本地总线的spi总线为树的“枝干”在设备树里称为“根节点的子节点”, spi总线下的spi设备不止一个,这些“枝干”又可以再分。

2. armsom使用的设备树

2.1. 主设备树:

在armsom的板卡中,每块板卡都有自己的主设备树,位于  **/boot/dtb/rockchip** 里,如下图:

image

sige5板卡在uboot阶段就会解析eMMC中的rk3576-armsom-sige5.dtb加载到ddr中,之后跳转到内核后同样使用该设备树镜像内容。

2.2. 设备树插件

2.2.1 什么是设备树插件

Linux4.4 以后引入了动态设备树(Dynamic DeviceTree)。设备树插件(Device Tree Overlay) 是一种用于设备树(Device Tree)的扩展机制。设备树是一种用于描述硬件设备的数据结构, 广泛应用于嵌入式系统中,特别是基于 Linux 内核的系统中。

设备树插件允许在运行时动态修改设备树的内容,以便添加、修改或删除设备节点和属性。 它提供了一种灵活的方式来配置和管理硬件设备,而无需重新编译整个设备树。通过使用设备树插件,开发人员可以在不重新启动系统的情况下对硬件进行配置更改。

设备树插件通常以一种文本格式定义,称为设备树源文件(Device Tree Source,DTS)。DTS 文件描述了设备树的结构和属性,包括设备节点、寄存器地址、中断信息等。设备树插件可以通过加载和解析设备树文件,并将其合并到现有的设备树中,从而实现对设备树的动态修改。

2.2.2 如何使用设备树插件

设备树插件位于文件系统中/boot/dtb/rockchip/overlay路径下

要使用设备树插件,则需要修改配置文件armbianEnv.txt

我们在2.1中可以看到当前有三个与sige5有关的设备树插件,如果全部使用则需要在配置文件中这么写:

verbosity=1
bootlogo=true
console=both
overlay_prefix=rk35xx
fdtfile=rockchip/rk3576-armsom-sige5.dtb
rootdev=UUID=24e6d1ad-085e-4c9b-9784-f33d6ca6d189
rootfstype=ext4
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u

#overlay_start

dtoverlay=/dtb/rockchip/overlay/armsom-sige5-display-10hd.dtbo
dtoverlay=/dtb/rockchip/overlay/armsom-sige5-camera-ov13850-cs0.dtbo
#dtoverlay=/dtb/rockchip/overlay/armsom-sige5-camera-ov13850-cs1.dtbo

#overlay_end
  • 打开设备树插件的方法就是把相应的设备树插件的注释删除掉,即删除 ‘#’
  • 关闭设备树插件的方法是把相应的设备树插件注释掉,即行首添加 ‘#’
  • 由上面的配置文件中可以看出 display-10hdcamera-ov13850-cs0​ 是没有被注释的, 所以目前他们是开启的状态。
  • camera-ov13850-cs1​ 是被注释掉的,所以目前是关闭的状态。