iMX8MM u-boot2021.04移植
iMX8MM u-boot2021.04移植
- 1. 添加板子
- 1.1 添加配置文件
- 1.2 添加板級文件
- 1.3 添加設備樹文件
- 2. 修改設備樹
- 2.1 修改DDR
- 2.2 修改網卡
- 2.3 修改SD卡
- 2.4 關閉屏幕和TypeC
- 3. 編譯下載
- 3.1 編譯ATF
- 3.2 下載firmware-imx
- 3.3 編譯uboot
- 3.4 下載驗證
- 4. 總結
我移植的板子是訊為i.MX8MM開發板,參考板為官方 8MMINILPD4-EVK開發板。
1. 添加板子
進入我們下載好的源碼目錄,需要復制每個板子特有的一些文件,添加完板子板級文件一般就不會修改了,主要是修改設備樹和配置文件。這里直接修改完這些文件,基本都是將evk改為topeet,不做過多解釋。
1.1 添加配置文件
添加配置文件我們只需要復制 i.MX8MM EVK的默認配置文件,在源碼目錄下執行下列命令創建我們自己板子的配置文件。
$ cd configs/ $ cp imx8mm_evk_defconfig imx8mm_topeet_defconfig修改configs/imx8mm_topeet_defconfig文件
# configs/imx8mm_topeet_defconfigCONFIG_TARGET_IMX8MM_EVK=y # 改為 CONFIG_TARGET_IMX8MM_TOPEET=yCONFIG_DEFAULT_DEVICE_TREE="imx8mm-evk" # 改為 CONFIG_DEFAULT_DEVICE_TREE="imx8mm-topeet"CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/mach-imx/imx8m/imximage-8mm-lpddr4.cfg" # 改為,我們的開發板使用的是ddr4 CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/mach-imx/imx8m/imximage-8mm-ddr4.cfg"CONFIG_DEFAULT_FDT_FILE="imx8mm-evk.dtb" # 改為 CONFIG_DEFAULT_FDT_FILE="imx8mm-topeet.dtb"1.2 添加板級文件
同樣復制參考板的板級文件,在源碼目錄下執行下列命令創建我們自己板子的板級文件。
$ cd include/configs/ $ cp imx8mm_evk.h imx8mm_topeet.h$ cd ../../board/freescale/ $ cp -r imx8mm_evk imx8mm_topeet $ cd imx8mm_topeet/ $ mv imx8mm_evk.c imx8mm_topeet.c $ rm lpddr4_timing_4g.c lpddr4_timing.c修改include/configs/imx8mm_topeet.h文件
// include/configs/imx8mm_topeet.h#ifndef __IMX8MM_EVK_H #define __IMX8MM_EVK_H // 改為 #ifndef __IMX8MM_TOPEET_H #define __IMX8MM_TOPEET_H/* 刪除注釋代碼,我們的開發板用的是PCA9450電源管理芯片,所以不考慮別的情況 #if defined(CONFIG_IMX8M_LPDDR4) && defined(CONFIG_TARGET_IMX8MM_EVK) */ #define CONFIG_POWER_PCA9450 /* 刪除注釋代碼 #else #define CONFIG_POWER_BD71837 #endif */#define JH_ROOT_DTB "imx8mm-evk-root.dtb" // 改為 #define JH_ROOT_DTB "imx8mm-topeet-root.dtb"/* 刪除注釋代碼,1為SD卡啟動,2為EMMC啟動,我們采用手動配置EMMC啟動 #ifdef CONFIG_TARGET_IMX8MM_DDR4_EVK #define CONFIG_SYS_FSL_USDHC_NUM 1 #else */ #define CONFIG_SYS_FSL_USDHC_NUM 2 /* 刪除注釋代碼 #endif */#include "imx8mm_evk_android.h" // 改為 #include "imx8mm_topeet_android.h"修改board/freescale/imx8mm_topeet/imx8mm_topeet.c文件
// board/freescale/imx8mm_topeet/imx8mm_topeet.c// 下面函數修改為,將EVK改為TOPEET int board_late_init(void) {/* 此處代碼省略 */#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIGenv_set("board_name", "TOPEET");env_set("board_rev", "iMX8MM"); #endifreturn 0; }修改board/freescale/imx8mm_topeet/Kconfig文件為
if TARGET_IMX8MM_TOPEETconfig SYS_BOARDdefault "imx8mm_topeet"config SYS_VENDORdefault "freescale"config SYS_CONFIG_NAMEdefault "imx8mm_topeet"config IMX8M_1G_MEMORYbool "imx8m 1GB memory size"source "board/freescale/common/Kconfig"endif修改board/freescale/imx8mm_topeet/MAINTAINERS文件為
i.MX8MM TOPEET BOARD M: Peng Fan <peng.fan@nxp.com> S: Maintained F: board/freescale/imx8mm_topeet/ F: include/configs/imx8mm_topeet.h F: configs/imx8mm_topeet_defconfig修改board/freescale/imx8mm_topeet/Makefile文件為
# # Copyright 2018 NXP # # SPDX-License-Identifier: GPL-2.0+ #obj-y += imx8mm_topeet.oifdef CONFIG_SPL_BUILD obj-y += spl.o obj-$(CONFIG_IMX8M_DDR4) += ddr4_timing.o endif修改arch/arm/mach-imx/imx8m/Kconfig文件
config TARGET_PHYCORE_IMX8MPbool "PHYTEC PHYCORE i.MX8MP"select IMX8MPselect SUPPORT_SPLselect IMX8M_LPDDR4# 在這里添加下面代碼 config TARGET_IMX8MM_TOPEETbool "imx8mm DDR4 TOPEET board"select IMX8MMselect SUPPORT_SPLselect IMX8M_DDR4select FSL_CAAMselect FSL_BLOBselect MISCselect SPL_CRYPTO_SUPPORT if SPL# 在最后endif上面添加下面一行 source "board/freescale/imx8mm_topeet/Kconfig"1.3 添加設備樹文件
復制參考板的設備樹文件,在源碼目錄下執行下列命令創建我們自己板子的設備樹文件。
$ cd arch/arm/dts/ $ cp imx8mm-evk.dts imx8mm-topeet.dts $ cp imx8mm-evk.dtsi imx8mm-topeet.dtsi $ cp imx8mm-evk-u-boot.dtsi imx8mm-topeet-u-boot.dtsi修改arch/arm/dts/imx8mm-topeet.dts文件
// 文件arch/arm/dts/imx8mm-topeet.dts#include "imx8mm-evk.dtsi" // 改為 #include "imx8mm-topeet.dtsi"//根節點下的這兩個屬性改為 / {model = "NXP i.MX8MM TOPEET board";compatible = "fsl,imx8mm-topeet", "fsl,imx8mm"; };修改arch/arm/dts/Makefile文件
dtb-$(CONFIG_ARCH_IMX8M) += \# 此處代碼省略imx8mn-ab2.dtb \#添加我們的板子imx8mm-topeet.dtb2. 修改設備樹
添加完板子之后對uboot的修改主要就是修改設備樹,源碼基本不需要修改。
2.1 修改DDR
官方開發板和我們開發板最大的不同就是DDR類型的不同,官方開發板使用的是LPDDR4我們開發版使用的是DDR4,上面我們修改了配置文件中的CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/mach-imx/imx8m/imximage-8mm-ddr4.cfg"參數就完成了修改。
2.2 修改網卡
訊為i.MX8MM開發板使用的phy芯片和官方iMX8MM EVK開發板是同系列,只有設計上略有不同。訊為i.MX8MM開發板的phy芯片復位引腳接到了GPIO2_IO10上,所以要對phy配置復位引腳。
// 文件arch/arm/dts/imx8mm-topeet.dtsi&fec1 {mdio {ethphy0: ethernet-phy@0 {// 更改reset引腳屬性reset-gpios = <&gpio2 10 GPIO_ACTIVE_LOW>;};}; };&iomuxc {pinctrl_fec1: fec1grp {fsl,pins = </* MX8MM_IOMUXC_SAI2_RXC_GPIO4_IO22 0x19 */MX8MM_IOMUXC_SD1_RESET_B_GPIO2_IO10 0x19>;}; };2.3 修改SD卡
訊為i.MX8MM開發板和官方iMX8MM EVK開發板SD卡,只有SD2_DET引腳不同。訊為i.MX8MM開發板SD2_DET引腳接到了GPIO2_IO12上,所以要對SD配置CD引腳。
// 文件arch/arm/dts/imx8mm-topeet.dtsi&usdhc2 {// 更改cd引腳屬性cd-gpios = <&gpio2 12 GPIO_ACTIVE_LOW>; };&iomuxc {pinctrl_usdhc2_gpio: usdhc2grpgpiogrp {fsl,pins = </* MX8MM_IOMUXC_GPIO1_IO15_GPIO1_IO15 0x1c4 */MX8MM_IOMUXC_SD2_CD_B_GPIO2_IO12 0x1c4>;}; };2.4 關閉屏幕和TypeC
因為我沒有屏幕,所以需要失能屏幕。
// 文件arch/arm/dts/imx8mm-topeet.dtsi&lcdif {status = "disabled"; };&mipi_dsi {status = "disabled"; };板子沒有TypeC接口,直接關閉。
# configs/imx8mm_topeet_defconfigCONFIG_USB_TCPC=y # 改為 CONFIG_USB_TCPC=n3. 編譯下載
編譯uboot前我們需要先編譯ATF,下載uboot編譯所需的文件。文章uboot的編譯目錄,為uboot源碼的根目錄。
3.1 編譯ATF
進入下載好的ATF源碼目錄,執行下列命令完成編譯。
$ make CROSS_COMPILE=aarch64-linux-gnu- PLAT=imx8mm bl31編譯完成可以看到在build/imx8mm/release下生成了我們需要的bl31.bin文件,將這個文件復制到uboot的編譯目錄下。
3.2 下載firmware-imx
執行下面命令,下載firmware-imx,獲取權限并執行獲取所需文件。
$ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.9.bin $ chmod +x firmware-imx-8.9.bin $ ./firmware-imx-8.9.bin進入firmware-imx-8.9/firmware/ddr/synopsys目錄,將ddr4_dmem_1d.bin、ddr4_imem_1d.bin、ddr4_dmem_2d.bin和ddr4_imem_2d.bin四個文件復制到uboot的編譯目錄下。
3.3 編譯uboot
進入uboot源碼目錄,確保編譯所需文件都已復制。
執行下列命令,完成編譯。
編譯完成,生成flash.bin是帶有IVT的,可以燒寫。
3.4 下載驗證
使用uuu啟動uboot,將撥碼開關撥到串行下載模式,連接好串口和OTG。執行$ sudo uuu -b emmc flash.bin命令,進行下載。(注意:下載到SD卡使用$ sudo uuu -b sd flash.bin,但是CONFIG_SYS_FSL_USDHC_NUM得選擇SD卡啟動)
下載完成后,設置啟動方式從EMMC啟動,重啟開發板。
將網線連接到路由器上,執行dhcp命令獲取ip地址,并ping服務器測試網絡正常。
4. 總結
uboot移植添加了很多板級文件,這些都不是重要的(其他芯片可能沒有這些)。修改設備樹是移植的重中之重,但是訊為i.MX8MM開發板和官方EVK開發板比較接近,所以修改比較簡單。本文僅供學習參考,如有問題歡迎指正。
移植源碼獲取:
git clone https://github.com/Sonboy97/uboot.git -b imx總結
以上是生活随笔為你收集整理的iMX8MM u-boot2021.04移植的全部內容,希望文章能夠幫你解決所遇到的問題。