1.NXP官方開發(fā)板uboot移植測(cè)試
uboot移植不需要從零開始將uboot移植到使用的開發(fā)板上。 因?yàn)?a target="_blank">半導(dǎo)體廠商通常都會(huì)自己做一個(gè)開發(fā)板, 將uboot移植到他們自己的原廠開發(fā)板上,再將這個(gè)uboot(原廠BSP 包)發(fā)布出去。 因此使用自已的開發(fā)板移植uboot,一般按如下步驟進(jìn)行
1.1 查找官方開發(fā)板默認(rèn)配置文件
市面上的開發(fā)板,通常會(huì)參考原廠的開發(fā)板做硬件,然后在原廠提供的 BSP 包上做修改,如本文所使用的正點(diǎn)原子 I.MX6ULL 開發(fā)板參考的就是NXP官方的 I.MX6ULL EVK 開發(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)檫@里使用的開發(fā)板是emmc版本的,所以使用以下這個(gè)配置文件:
mx6ull_14x14_evk_emmc_defconfig
1.2 編譯官方開發(fā)板uboot
找到 NXP 官方 I.MX6ULL EVK 開發(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è)置編譯過程中的信息輸出級(jí)別,相當(dāng)于make -j12,即使用12核來編譯uboot
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
##########################################################################
#每次編譯uboot都需要輸入一長(zhǎng)串命令
#為了簡(jiǎn)單起見,建立一個(gè)shell腳本文件,將這些命令寫到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
##########################################################################
#通過命令“./mx6ull_evk_emmc.sh”編譯uboot
編譯完成以后會(huì)生成 u-boot.bin、u-boot.imx 等文件,但是這些文件是 NXP 官方 I.MX6ULL EVK 開發(fā)板配置生成的,所以接下來將其燒錄到正點(diǎn)原子的 I.MX6ULL 開發(fā)板上看看能否使用
1.3 燒寫驗(yàn)證與測(cè)試
將 imxdownload 軟件拷貝到 uboot 源碼根目錄下,然后使用 imxdownload 軟件將 u-boot.bin 燒寫到 SD 卡中,燒寫命令如下:
chmod 777 imxdownload #給予imxdownload可執(zhí)行權(quán)限
./imxdownload u-boot.bin /dev/sdxxx #燒寫到SD卡中
燒錄完之后,將SD卡插入開發(fā)板啟動(dòng),使用串口連接電腦,查看uboot啟動(dòng)信息:從下圖可以看出,uboot啟動(dòng)正常,雖然用的是NXP官方 I.MX6ULL 開發(fā)板的uboot,但是在正點(diǎn)原子的I.MX6ULL開發(fā)板上是可以正常啟動(dòng)的,而且 DRAM 識(shí)別正確,為512MB
2.在U-Boot中添加自已的開發(fā)板
上面介紹了如何使用NXP原廠的uboot進(jìn)行編譯、燒寫和運(yùn)行。 但是NXP原廠的uboot,直接燒錄到我的開發(fā)板中,LCD的驅(qū)動(dòng)和網(wǎng)絡(luò)驅(qū)動(dòng)是不正常的,需要進(jìn)行修改
下面將介紹如何修改uboot,使得uboot能匹配我們自己的開發(fā)板。 修改uboot以匹配開發(fā)板的方式有兩種:
- 在NXP原廠開發(fā)板i.MX 6ULL EVK的文件上進(jìn)行修改
- 仿造NXP的開發(fā)板文件,添加自己的開發(fā)板文件
為了能更多的了解uboot,我們使用代碼改動(dòng)較大的第二種方式進(jìn)行uboot的移植
2.1 添加開發(fā)板默認(rèn)配置文件
在configs文件夾下,參考原廠開發(fā)板的配置文件,創(chuàng)建自己開發(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 添加開發(fā)板對(duì)應(yīng)的頭文件
在目錄include/configs下添加開發(fā)板對(duì)應(yīng)的頭文件
復(fù)制 mx6ullevk.h,并重命名
mx6ull_andyxi_emmc.h做為自已開發(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 添加開發(fā)板對(duì)應(yīng)的板級(jí)文件
uboot中每個(gè)板子都有一個(gè)對(duì)應(yīng)的文件夾來存放板級(jí)文件(如開發(fā)板上外設(shè)驅(qū)動(dòng)文件等)。 NXP的I.MX系列芯片的所有板級(jí)文件夾都存放在 board/freescale/目錄下,該目錄下的 mx6ullevk文件夾,即原廠開發(fā)板的板級(jí)文件夾。 參考該文件夾,創(chuàng)建自己開發(fā)板的板級(jí)文件
復(fù)制 mx6ullevk文件夾,并重命名
mx6ull_andyxi_emmc為自己開發(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重命名而來
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
######### 原始內(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腳本,來配置編譯 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)行腳本來完成編譯
chmod 777 mx6ull_andyxi_emmc.sh #給予可執(zhí)行權(quán)限,一次即可
./mx6ull_andyxi_emmc.sh #運(yùn)行腳本編譯uboot
編譯完成后輸入如下命令,查看添加的頭文件有沒有被引用,如果有很多文件都引用了這個(gè)頭文件(如下圖),那就說明新板子添加成功
grep -nR "mx6ull_andyxi_emmc.h"
編譯完成以后就使用 imxdownload將新編譯出來的 u-boot.bin燒寫到 SD卡中測(cè)試,串口輸出結(jié)果如下圖
從上圖可以看出,此時(shí)的Board還是“MX6ULL 14x14 EVK”,如果接了 LCD屏幕的話會(huì)發(fā)現(xiàn) LCD屏幕并沒有顯示 NXP的 logo,而且從圖中可以看出此時(shí)的網(wǎng)絡(luò)同樣也沒識(shí)別出來。 后續(xù)文章會(huì)介紹如何修改 LCD驅(qū)動(dòng)和網(wǎng)絡(luò)驅(qū)動(dòng)......
總結(jié)一下上面做了哪些修改:右端藍(lán)色的為原廠開發(fā)板的相關(guān)文件,黃色的為模仿原廠文件,新添加并修改的自己開發(fā)板的文件
-
半導(dǎo)體
+關(guān)注
關(guān)注
334文章
27710瀏覽量
222646 -
NXP
+關(guān)注
關(guān)注
60文章
1289瀏覽量
185497 -
移植
+關(guān)注
關(guān)注
1文章
383瀏覽量
28194 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5121瀏覽量
98195 -
Uboot
+關(guān)注
關(guān)注
4文章
125瀏覽量
28349
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
U-boot的基本介紹
![<b class='flag-5'>U-boot</b>的基本介紹](https://file1.elecfans.com/web2/M00/8C/C4/wKgaomSxDC-AIi1QAACKegMzhAU876.png)
基于開發(fā)板的U-Boot移植
開發(fā)板上移植U-Boot
U-Boot的啟動(dòng)及移植分析
嵌入式U-BOOT的啟動(dòng)流程及移植
u-boot學(xué)習(xí)指南
u-boot簡(jiǎn)介
如何在U-Boot中實(shí)現(xiàn)對(duì)Yaffs鏡像的設(shè)計(jì)?
![如<b class='flag-5'>何在</b><b class='flag-5'>U-Boot</b><b class='flag-5'>中</b>實(shí)現(xiàn)對(duì)Yaffs鏡像的設(shè)計(jì)?](https://file.elecfans.com/web1/M00/61/BB/o4YBAFuGRMaALXUPAACkyWLJ80c006.jpg)
U-BOOT的特點(diǎn)及利用其構(gòu)建開發(fā)板的引導(dǎo)裝載程序
![<b class='flag-5'>U-BOOT</b>的特點(diǎn)及利用其構(gòu)建<b class='flag-5'>開發(fā)板</b>的引導(dǎo)裝載程序](https://file.elecfans.com/web1/M00/B4/CB/o4YBAF5dpv2AT8otAABzcyO5CJM902.png)
【u-boot】在stm32h7開發(fā)板體驗(yàn)u-boot
![【<b class='flag-5'>u-boot</b>】在stm32h7<b class='flag-5'>開發(fā)板</b>體驗(yàn)<b class='flag-5'>u-boot</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
在Vitis中調(diào)試ARM可信固件和U-boot
![在Vitis<b class='flag-5'>中</b>調(diào)試ARM可信固件和<b class='flag-5'>U-boot</b>](https://file.elecfans.com/web2/M00/1F/6A/pYYBAGGYHxaAA-TBAAKCbyEfraQ148.png)
創(chuàng)建自定義的u-boot命令
Linux U-Boot開發(fā)指南
![Linux <b class='flag-5'>U-Boot</b><b class='flag-5'>開發(fā)</b>指南](https://file.elecfans.com//web2/M00/95/B6/poYBAGQFT7mAWRkKAAFz-Z4R0zY051.png)
評(píng)論