0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在U-Boot中添加自已的開(kāi)發(fā)板

CHANBAEK ? 來(lái)源:嵌入式攻城獅 ? 作者:嵌入式攻城獅 ? 2023-04-24 10:48 ? 次閱讀

1.NXP官方開(kāi)發(fā)板uboot移植測(cè)試

uboot移植不需要從零開(kāi)始將uboot移植到使用的開(kāi)發(fā)板上。 因?yàn)?a target="_blank">半導(dǎo)體廠商通常都會(huì)自己做一個(gè)開(kāi)發(fā)板, 將uboot移植到他們自己的原廠開(kāi)發(fā)板上,再將這個(gè)uboot(原廠BSP 包)發(fā)布出去。 因此使用自已的開(kāi)發(fā)板移植uboot,一般按如下步驟進(jìn)行

1.1 查找官方開(kāi)發(fā)板默認(rèn)配置文件

市面上的開(kāi)發(fā)板,通常會(huì)參考原廠的開(kāi)發(fā)板做硬件,然后在原廠提供的 BSP 包上做修改,如本文所使用的正點(diǎn)原子 I.MX6ULL 開(kāi)發(fā)板參考的就是NXP官方的 I.MX6ULL EVK 開(kāi)發(fā)板做的硬件:

圖片

將NXP官方原版Uboot源碼包,拷貝至Ubuntu下的相應(yīng)文件夾中,然后進(jìn)行解壓:

tar -vxjf uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2

configs目錄下有大量跟I.MX6UL/6ULL有關(guān)的配置,找到與mx6ull相同的配置文件,如下圖:

圖片

因?yàn)檫@里使用的開(kāi)發(fā)板是emmc版本的,所以使用以下這個(gè)配置文件:

mx6ull_14x14_evk_emmc_defconfig

1.2 編譯官方開(kāi)發(fā)板uboot

找到 NXP 官方 I.MX6ULL EVK 開(kāi)發(fā)板對(duì)應(yīng)的默認(rèn)配置文件以后就可以編譯了,編譯uboot使用下面3條指令或者使用編譯腳本文件:

#ARCH=arm表示設(shè)置目標(biāo)為arm架構(gòu),相當(dāng)于make distclean,清除工程
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
#配置uboot,配置文件為mx6ull_14x14_evk_emmc_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig
#V=1用于設(shè)置編譯過(guò)程中的信息輸出級(jí)別,相當(dāng)于make -j12,即使用12核來(lái)編譯uboot
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12 
##########################################################################
#每次編譯uboot都需要輸入一長(zhǎng)串命令
#為了簡(jiǎn)單起見(jiàn),建立一個(gè)shell腳本文件,將這些命令寫(xiě)到shell腳本里
#執(zhí)行shell腳本即可完成編譯工作
#新建mx6ull_evk_emmc.sh腳本文件
##########################################################################
#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12 
##########################################################################
#通過(guò)命令“./mx6ull_evk_emmc.sh”編譯uboot

編譯完成以后會(huì)生成 u-boot.bin、u-boot.imx 等文件,但是這些文件是 NXP 官方 I.MX6ULL EVK 開(kāi)發(fā)板配置生成的,所以接下來(lái)將其燒錄到正點(diǎn)原子的 I.MX6ULL 開(kāi)發(fā)板上看看能否使用

1.3 燒寫(xiě)驗(yàn)證與測(cè)試

將 imxdownload 軟件拷貝到 uboot 源碼根目錄下,然后使用 imxdownload 軟件將 u-boot.bin 燒寫(xiě)到 SD 卡中,燒寫(xiě)命令如下:

chmod 777 imxdownload   		#給予imxdownload可執(zhí)行權(quán)限
./imxdownload u-boot.bin /dev/sdxxx 	#燒寫(xiě)到SD卡中

燒錄完之后,將SD卡插入開(kāi)發(fā)板啟動(dòng),使用串口連接電腦,查看uboot啟動(dòng)信息:從下圖可以看出,uboot啟動(dòng)正常,雖然用的是NXP官方 I.MX6ULL 開(kāi)發(fā)板的uboot,但是在正點(diǎn)原子的I.MX6ULL開(kāi)發(fā)板上是可以正常啟動(dòng)的,而且 DRAM 識(shí)別正確,為512MB

圖片

2.在U-Boot中添加自已的開(kāi)發(fā)板

上面介紹了如何使用NXP原廠的uboot進(jìn)行編譯、燒寫(xiě)和運(yùn)行。 但是NXP原廠的uboot,直接燒錄到我的開(kāi)發(fā)板中,LCD的驅(qū)動(dòng)和網(wǎng)絡(luò)驅(qū)動(dòng)是不正常的,需要進(jìn)行修改

下面將介紹如何修改uboot,使得uboot能匹配我們自己的開(kāi)發(fā)板。 修改uboot以匹配開(kāi)發(fā)板的方式有兩種:

  • 在NXP原廠開(kāi)發(fā)板i.MX 6ULL EVK的文件上進(jìn)行修改
  • 仿造NXP的開(kāi)發(fā)板文件,添加自己的開(kāi)發(fā)板文件

為了能更多的了解uboot,我們使用代碼改動(dòng)較大的第二種方式進(jìn)行uboot的移植

2.1 添加開(kāi)發(fā)板默認(rèn)配置文件

在configs文件夾下,參考原廠開(kāi)發(fā)板的配置文件,創(chuàng)建自己開(kāi)發(fā)板的配置文件

mx6ull_14x14_evk_emmc_defconfig復(fù)制該文件,并重命名

mx6ull_andyxi _emmc_defconfig為自已的配置文件

cp mx6ull_14x14_evk_emmc_defconfig mx6ull_andyxi_emmc_defconfig

mx6ull_andyxi_emmc_defconfig中的內(nèi)容做如下修改

######### 原始內(nèi)容 ###############################
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ullevk/imximage.cfg,MX6ULL_EVK_EMMC_REWORK"
CONFIG_ARM=y
CONFIG_ARCH_MX6=y
CONFIG_TARGET_MX6ULL_14X14_EVK=y
CONFIG_CMD_GPIO=y
######### 修改后的內(nèi)容 ###########################
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ull_andyxi_ emmc/imximage.cfg,MX6ULL_EVK_EMMC_REWORK" 
CONFIG_ARM=y 
CONFIG_ARCH_MX6=y 
CONFIG_TARGET_MX6ULL_ANDYXI_EMMC=y 
CONFIG_CMD_GPIO=y

2.2 添加開(kāi)發(fā)板對(duì)應(yīng)的頭文件

在目錄include/configs下添加開(kāi)發(fā)板對(duì)應(yīng)的頭文件

復(fù)制 mx6ullevk.h,并重命名

mx6ull_andyxi_emmc.h做為自已開(kāi)發(fā)板的頭文件

cp mx6ullevk.h mx6ull_andyxi_emmc.h

mx6ull_andyxi_emmc.h里面的內(nèi)容做如下修改

/*######### 原始內(nèi)容 ###############################*/
#ifndef __MX6ULLEVK_CONFIG_H 
#define __MX6ULLEVK_CONFIG_H
/*######### 修改后的內(nèi)容 ###########################*/
#ifndef __MX6ULL_ANDYXI_EMMC_CONFIG_H 
#define __MX6ULL_ANDYXI_EMMC_CONFIG_H

2.3 添加開(kāi)發(fā)板對(duì)應(yīng)的板級(jí)文件

uboot中每個(gè)板子都有一個(gè)對(duì)應(yīng)的文件夾來(lái)存放板級(jí)文件(如開(kāi)發(fā)板上外設(shè)驅(qū)動(dòng)文件等)。 NXP的I.MX系列芯片的所有板級(jí)文件夾都存放在 board/freescale/目錄下,該目錄下的 mx6ullevk文件夾,即原廠開(kāi)發(fā)板的板級(jí)文件夾。 參考該文件夾,創(chuàng)建自己開(kāi)發(fā)板的板級(jí)文件

復(fù)制 mx6ullevk文件夾,并重命名

mx6ull_andyxi_emmc為自己開(kāi)發(fā)板的板級(jí)文件夾

cd board/freescale/ 			#進(jìn)入板級(jí)文件夾
cp mx6ullevk/ -r mx6ull_andyxi_emmc	#復(fù)制mx6ullevk并重命名

進(jìn)入 mx6ull_andyxi_emmc目錄

cd mx6ull_andyxi_emmc 			#進(jìn)入mx6ull_andyxi_emmc文件夾

mx6ull_andyxi_emmc.c由 mx6ullevk.c重命名而來(lái)

mv mx6ullevk.c mx6ull_andyxi_emmc.c	#重命名mx6ullevk.c文件

Makefile文件修改

obj-y  := mx6ull_andyxi_emmc.o      

extra-$(CONFIG_USE_PLUGIN) :=  plugin.bin
$(obj)/plugin.bin: $(obj)/plugin.o
        $(OBJCOPY) -O binary --gap-fill 0xff $< $@

imximage.cfg文件修改

######### 原始內(nèi)容 ###############################
PLUGIN board/freescale/mx6ullevk/plugin.bin 0x00907000
######### 修改后的內(nèi)容 ###########################
PLUGIN board/freescale/mx6ull_andyxi_emmc/plugin.bin 0x00907000

Kconfig文件修改

######### 原始內(nèi)容 ###############################
if TARGET_MX6ULL_14X14_EVK || TARGET_MX6ULL_9X9_EVK

config SYS_BOARD
        default "mx6ullevk" 

config SYS_VENDOR
        default "freescale"

config SYS_CONFIG_NAME
        default "mx6ullevk"

endif 
######### 修改后的內(nèi)容 ###########################
if TARGET_MX6ULL_ANDYXI_EMMC

config SYS_BOARD
        default "mx6ull_andyxi_emmc" 

config SYS_VENDOR
        default "freescale"

config SYS_CONFIG_NAME
        default "mx6ull_andyxi_emmc"

endif

MAINTAINERS文件修改

######### 原始內(nèi)容 ###############################
MX6ULLEVK BOARD
M:      Peng Fan 
S:      Maintained
F:      board/freescale/mx6ullevk/
F:      include/configs/mx6ullevk.h
F:      configs/mx6ull_14x14_evk_defconfig
F:      configs/mx6ull_9x9_evk_defconfig
######### 修改后的內(nèi)容 ###########################
MX6ULL_ANDYXI_EMMC BOARD
M:      Peng Fan 
S:      Maintained
F:      board/freescale/mx6ull_andyxi_emmc/
F:      include/configs/mx6ull_andyxi_emmc.h
F:      configs/mx6ull_andyxi_emmc_defconfig

2.4 修改U-Boot圖形界面配置文件

uboot支持圖形界面配置,因此要修改arch/arm/cpu/armv7/mx6/目錄下的圖像界面配置文件 Kconfig

######### 207行加入如下內(nèi)容 ###############################
config TARGET_MX6ULL_ANDYXI_EMMC
        bool "Support mx6ull_andyxi_emmc"
        select MX6ULL
        select DM
        select DM_THERMAL
######### 最后一行endif的前一行添加如下內(nèi)容 ###############
source "board/freescale/mx6ull_andyxi_emmc/Kconfig"

2.5 使用新添加的板子配置編譯uboot

在 uboot根目錄下新建 shell腳本,來(lái)配置編譯 uboot

mx6ull_andyxi_emmc.sh腳本內(nèi)容如下:

#!/bin/bash 
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean 
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_andyxi_emmc_defconfig 
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16

給予可執(zhí)行權(quán)限,然后運(yùn)行腳本來(lái)完成編譯

chmod 777 mx6ull_andyxi_emmc.sh 	#給予可執(zhí)行權(quán)限,一次即可
./mx6ull_andyxi_emmc.sh 		#運(yùn)行腳本編譯uboot

編譯完成后輸入如下命令,查看添加的頭文件有沒(méi)有被引用,如果有很多文件都引用了這個(gè)頭文件(如下圖),那就說(shuō)明新板子添加成功

grep -nR "mx6ull_andyxi_emmc.h"

圖片

編譯完成以后就使用 imxdownload將新編譯出來(lái)的 u-boot.bin燒寫(xiě)到 SD卡中測(cè)試,串口輸出結(jié)果如下圖

圖片

從上圖可以看出,此時(shí)的Board還是“MX6ULL 14x14 EVK”,如果接了 LCD屏幕的話會(huì)發(fā)現(xiàn) LCD屏幕并沒(méi)有顯示 NXP的 logo,而且從圖中可以看出此時(shí)的網(wǎng)絡(luò)同樣也沒(méi)識(shí)別出來(lái)。 后續(xù)文章會(huì)介紹如何修改 LCD驅(qū)動(dòng)和網(wǎng)絡(luò)驅(qū)動(dòng)......

總結(jié)一下上面做了哪些修改:右端藍(lán)色的為原廠開(kāi)發(fā)板的相關(guān)文件,黃色的為模仿原廠文件,新添加并修改的自己開(kāi)發(fā)板的文件

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 半導(dǎo)體
    +關(guān)注

    關(guān)注

    334

    文章

    26651

    瀏覽量

    212793
  • NXP
    NXP
    +關(guān)注

    關(guān)注

    60

    文章

    1255

    瀏覽量

    182502
  • 移植
    +關(guān)注

    關(guān)注

    1

    文章

    375

    瀏覽量

    28075
  • 開(kāi)發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4838

    瀏覽量

    96855
  • Uboot
    +關(guān)注

    關(guān)注

    4

    文章

    125

    瀏覽量

    28100
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    U-boot的基本介紹

    從本文開(kāi)始,將陸續(xù)推送“手把手教你移植U-boot”系列文章,目標(biāo)是由淺入深地講解U-boot的工作流程、原理、配置方法和移植方法,手把手教你完成U-boot的移植工作,默認(rèn)硬件開(kāi)發(fā)
    發(fā)表于 07-14 16:52 ?2657次閱讀
    <b class='flag-5'>U-boot</b>的基本介紹

    基于開(kāi)發(fā)板U-Boot移植

    /boards.cfguboot2011.06/config.mkuboot2011.06/Makefile移植過(guò)程就是在新的U-Boot代碼增加與S5PV210開(kāi)發(fā)板CPU級(jí)和Board級(jí)代碼,使之能夠在210
    發(fā)表于 01-14 14:31

    開(kāi)發(fā)板上移植U-Boot

    /boards.cfguboot2011.06/config.mkuboot2011.06/Makefile移植過(guò)程就是在新的U-Boot代碼增加與S5PV210開(kāi)發(fā)板CPU級(jí)和Board級(jí)代碼,使之能夠在210
    發(fā)表于 01-14 14:36

    U-Boot的啟動(dòng)及移植分析

    bootloader 開(kāi)發(fā)是嵌入式系統(tǒng)必不可少而且十分重要的部分,U-Boot 為功能強(qiáng)大的bootloader 開(kāi)發(fā)軟件。本文詳細(xì)分析了U-Boot 的啟動(dòng)流程,并結(jié)合其源碼,闡述了
    發(fā)表于 09-01 16:34 ?27次下載

    嵌入式U-BOOT的啟動(dòng)流程及移植

    S3C44B0開(kāi)發(fā)板上的移植方法和步驟。 u-boot是一個(gè)功能強(qiáng)大的bootloader開(kāi)發(fā)軟件,適用的CPU平臺(tái)及
    發(fā)表于 02-25 16:00 ?59次下載

    u-boot學(xué)習(xí)指南

    u-boot 是免費(fèi)的,我們做嵌入式的一般只需要使用 u-boot 即可,但如果你想成為一個(gè)比較強(qiáng)的嵌入式系統(tǒng)工程師,而且還做了自己開(kāi)發(fā)板,那么還是要學(xué)習(xí)一下如果將網(wǎng)上下載的通用 u-boot
    發(fā)表于 11-17 15:54 ?2次下載

    u-boot簡(jiǎn)介

    演化而來(lái)。其源碼目錄、編譯形式與Linux內(nèi)核很相似,事實(shí)上,不少U-Boot源碼就是根據(jù)相應(yīng)的Linux內(nèi)核源程序進(jìn)行簡(jiǎn)化而形成的,尤其是一些設(shè)備的驅(qū)動(dòng)程序,這從U-Boot源碼的注釋能體現(xiàn)這一點(diǎn)
    發(fā)表于 10-14 11:17 ?3519次閱讀

    U-Boot到OMAP5912開(kāi)發(fā)板的移植

    U-Boot到OMAP5912開(kāi)發(fā)板的移植
    發(fā)表于 10-27 10:23 ?8次下載
    <b class='flag-5'>U-Boot</b>到OMAP5912<b class='flag-5'>開(kāi)發(fā)板</b>的移植

    何在U-Boot實(shí)現(xiàn)對(duì)Yaffs鏡像的設(shè)計(jì)?

    U-Boot是目前廣泛使用的嵌入式操作系統(tǒng)通用引導(dǎo)程序,具有功能豐富強(qiáng)大,支持多種操作系統(tǒng)和CPU體系,易于功能擴(kuò)展和移植,源碼開(kāi)放等多種優(yōu)點(diǎn)。U-Boot,全稱 Universal Boot Loader,是遵循GPL條款的開(kāi)
    的頭像 發(fā)表于 08-29 05:02 ?3673次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>U-Boot</b><b class='flag-5'>中</b>實(shí)現(xiàn)對(duì)Yaffs鏡像的設(shè)計(jì)?

    U-BOOT的特點(diǎn)及利用其構(gòu)建開(kāi)發(fā)板的引導(dǎo)裝載程序

    sourceforge網(wǎng)站的社區(qū)服務(wù)器,Internet上有一群自由開(kāi)發(fā)人員對(duì)其進(jìn)行維護(hù)和開(kāi)發(fā),它的項(xiàng)目主頁(yè)是http://sourceforge.net/projects/U-BOOT
    的頭像 發(fā)表于 03-03 07:57 ?1535次閱讀
    <b class='flag-5'>U-BOOT</b>的特點(diǎn)及利用其構(gòu)建<b class='flag-5'>開(kāi)發(fā)板</b>的引導(dǎo)裝載程序

    fireflyAIO-3399J主板U-Boot使用介紹

    RK U-Boot 基于開(kāi)源的 U-Boot 進(jìn)行開(kāi)發(fā),工作模式有啟動(dòng)加載模式和下載模式。
    的頭像 發(fā)表于 12-24 10:00 ?1574次閱讀
    fireflyAIO-3399J主板<b class='flag-5'>U-Boot</b>使用介紹

    u-boot】在stm32h7開(kāi)發(fā)板體驗(yàn)u-boot

    u-boot在2017版本中加入了對(duì)Cortex-M系列內(nèi)核的支持,正好手上有個(gè)h7的開(kāi)發(fā)板,所以拿來(lái)試試,學(xué)習(xí)一下uboot。一 u-boot版本選擇其實(shí)開(kāi)始選用最早支持的版本比較好,因?yàn)樾掳姹?/div>
    發(fā)表于 12-01 15:06 ?11次下載
    【<b class='flag-5'>u-boot</b>】在stm32h7<b class='flag-5'>開(kāi)發(fā)板</b>體驗(yàn)<b class='flag-5'>u-boot</b>

    在Vitis調(diào)試ARM可信固件和U-boot

    在本篇博文中,我們將探討如何在 Vitis 調(diào)試 Zynq UltraScale 器件啟動(dòng)鏡像。這些啟動(dòng)鏡像包括 ARM 可信固件 (ATF) 和 U-boot
    的頭像 發(fā)表于 08-02 10:14 ?3384次閱讀
    在Vitis<b class='flag-5'>中</b>調(diào)試ARM可信固件和<b class='flag-5'>U-boot</b>

    創(chuàng)建自定義的u-boot命令

    為什么會(huì)有這篇文章,因?yàn)樾∩?b class='flag-5'>u-boot源碼的設(shè)計(jì)所吸引了(源碼對(duì)命令的處理過(guò)程)。自定義u-boot命令屬于u-boot源碼的開(kāi)發(fā)技術(shù)啦,可能u
    的頭像 發(fā)表于 08-08 14:46 ?1042次閱讀

    Linux U-Boot開(kāi)發(fā)指南

    介紹 U-Boot 的編譯打包、基本配置、常用命令的使用、基本調(diào)試方法等, 為 U-BOOT 的移植及應(yīng)用開(kāi)發(fā)提供了基礎(chǔ)。
    的頭像 發(fā)表于 03-06 10:28 ?1222次閱讀
    Linux <b class='flag-5'>U-Boot</b><b class='flag-5'>開(kāi)發(fā)</b>指南