U-Boot移植
重要文件:
- xxx_defconfig:一般由平台厂商提供,提供了基础的默认配置,从而可以尽可能少改动源代码。
- Kconfig:是Kconfig系统的菜单项,当使用 make menuconfig时,Kconfig系统读取该文件,根据该文件的内容生成各级菜单。U-Boot目录下的Kconfig就是顶级的配置菜单
- .config:这个文件记录了菜单项中的配置的具体值,所有对于构建的配置都存放在这个文件中。
config.mk:用来处理一些编译过程中的环境变量。Linux Kernel没有这个文件,U-Boot需要使用它。
Kconfig文件是defconfig文件与内核/u-boot模块之间的链接。如果将驱动程序设置为内置在引导映像中,或者将其设置为defconfig中的模块,则Kconfig文件将其与相应的驱动程序关联,构建系统生成.ko或.o文件。
am64x的U-Boot的配置文件主要有三个:
- configs文件夹下:
- am64x_evm_r5_defconfig:包括构建R5 SPL的配置标志
- am64x_evm_r5_defconfig:包括用于构建A53 SPL和U-Boot的配置标志
- include/configs文件夹下:(未来可能逐步消失)
- am64x_evm.h,包括DDR Configuration、NAND support、NAND Driver config、U-Boot general configuration和U-Boot MMC-specific configuration等。
设备树文件有两个
- k3-am642-r5-evm.dts:主R5 DTS文件,其中包括R5引导节点,Pinmux, DDR等。
- k3-am642-r5-evm.dts:主A53 DTS文件,其中包括A53引导节点,Pinmux等。
为什么有两个设备树文件?这主要是与am642的启动流程有关。
一般情况下,最小设备树应包含串口、直接参与引导过程的外设(如GPMC、DDR、MMC、SPI等)和用于PMIC连接的I2C模块
GPMC->General Purpose Memory Controller
TI AM64x soc通常由通过I2C接口连接的外部电源管理IC (PMIC)提供。PMIC在满足数据表要求的电压下为SoC供电。
当添加新板子时,通常需要如下步骤:
- 添加头文件,include/configs/.h
- 确保在Kconfig中定义必要的CONFIG_SYS_*:
- Define CONFIG_SYS_CPU=“cpu” 编译生成 arch/<arch>/cpu/<cpu>
- Define CONFIG_SYS_SOC=“soc” 编译生成 arch/<arch>/cpu/<cpu>/<soc>
- Define CONFIG_SYS_VENDOR=“vendor” 编译生成 board/<vendor>/common/*
and board/<vendor>/<board>/* - Define CONFIG_SYS_BOARD=“board” 编译生成 board/<board>/*
(or board/<vendor>/<board>/* if CONFIG_SYS_VENDOR is defined) - Define CONFIG_SYS_CONFIG_NAME=“target” to include
include/configs/<target>.h
- 在Kconfig中的板选择菜单中添加一个新条目。
板选择菜单位于arch//Kconfig或arch/ <arch> / * / Kconfig。 - 添加维护者文件
它通常放在board//MAINTAINERS或board/ <vendor> / <board> /MAINTAINERS - 添加 configs/_defconfig