日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iMX8MM u-boot2021.04移植

發布時間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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開發板。

  • iMX8MM uboot2021.04 linux5.15.32移植
  • iMX8MM啟動流程
  • iMX8MM u-boot2021.04移植
  • iMX8MM linux5.15.32移植
  • iMX8MM buildroot-2022.02.5構建根文件系統
  • 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.dtb

    2. 修改設備樹

    添加完板子之后對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=n

    3. 編譯下載

    編譯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源碼目錄,確保編譯所需文件都已復制。

    執行下列命令,完成編譯。

    $ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- imx8mm_topeet_defconfig $ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- menuconfig $ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- ATF_LOAD_ADDR=0x920000 flash.bin -j12

    編譯完成,生成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移植的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。