簡介
正常情況下,開發者會將預設的裝置樹修改成自家客製化板子的設定,甚至會希望修改掉裝置樹的名稱。如果只修改裝置樹名稱卻沒修改 U-Boot 預設的 fdtfile 的話,便會發生找不到該裝置樹的問題。
修改預設 fdtfile
以 i.MX8MP 來說,開發者可以在 U-Boot 的 configs/imx8mp_evk_defconfig 內設定預設的 fdtfile,但並非所有 i.MX 系列都支援這個設定,例如:i.MX8MQ CONFIG_DEFAULT_FDT_FILE="imx8mp-evk.dtb"
如果手上的 i.MX 系列不支援這功能的時候,此時就需要直接到設定的 .h 檔裡修改,以 i.MX8MQ 為例
// u-boot-imx/include/configs/imx8mq_evk.h
/* Initial environment variables */
#define CONFIG_EXTRA_ENV_SETTINGS \
BOOTENV \
"scriptaddr=" __stringify(CONFIG_SYS_LOAD_ADDR) "\0" \
"kernel_addr_r=" __stringify(CONFIG_SYS_LOAD_ADDR) "\0" \
"image=Image\0" \
"console=ttymxc0,115200\0" \
"fdt_addr_r=0x43000000\0" \
"boot_fdt=try\0" \
"fdtfile=imx8mq-evk.dtb\0" \
"initrd_addr=0x43800000\0" \
"bootm_size=0x10000000\0" \
"mmcpart=1\0" \
"mmcroot=" CONFIG_MMCROOT " rootwait rw\0" \
CONFIG_EXTRA_ENV_SETTINGS 主要設定 U-Boot 的環境變數的,其中就包含了 Linux 預設的裝置樹,也就是 fdtfile,只需將其修改為開發者的裝置樹名稱即可。
此外也可以看一下 i.MX8MP 是怎麼設定的,如下:
#define CONFIG_EXTRA_ENV_SETTINGS \
BOOTENV \
"scriptaddr=" __stringify(CONFIG_SYS_LOAD_ADDR) "\0" \
"kernel_addr_r=" __stringify(CONFIG_SYS_LOAD_ADDR) "\0" \
"image=Image\0" \
"console=ttymxc1,115200 earlycon=ec_imx6q,0x30890000,115200\0" \
"fdt_addr_r=0x43000000\0" \
"boot_fdt=try\0" \
"fdtfile=" CONFIG_DEFAULT_FDT_FILE "\0" \
"initrd_addr=0x43800000\0" \
"bootm_size=0x10000000\0" \
"mmcpart=1\0" \
"mmcroot=" CONFIG_MMCROOT " rootwait rw\0" \
可以看到 i.MX8MP 的 fdtfile 是透過變數去設定的,因此只要在 defconfig 內寫好變數,這裡便可直接完成設定。
ATU Support
如果你有任何需求,請聯絡 WPI 的 TW ATU 團隊
評論