2024-07-03 uboot-移植

移植的核心思想介紹

我們?cè)趯?shí)際項(xiàng)目開(kāi)發(fā)過(guò)程中,更多的時(shí)候是用芯片做產(chǎn)品。IMX6ULL芯片在被設(shè)計(jì)出來(lái)的時(shí)候,NXP芯片廠家會(huì)根據(jù)芯片定制開(kāi)發(fā)板EVK來(lái)測(cè)試芯片的功能。NXP的原廠工程師會(huì)為EVK開(kāi)發(fā)板移植u-boot,我們開(kāi)發(fā)的智能小車是用NXP的IMX6ULL芯片定制的開(kāi)發(fā)板,在設(shè)計(jì)的時(shí)候是參照EVK開(kāi)發(fā)板來(lái)定制的。所以在為智能小車的開(kāi)發(fā)板移植u-boot的時(shí)候,可以參照NXP的EVK開(kāi)發(fā)板的u-boot來(lái)進(jìn)行移植。
硬件平臺(tái)信息
開(kāi)發(fā)板 SmartCar開(kāi)發(fā)板,根據(jù)NXP的EVK開(kāi)發(fā)板來(lái)設(shè)計(jì)
SOC IMX6ULL
CPU ARM Cortex-A7 ,ARMV7架構(gòu)

u-boot中添加自己的開(kāi)發(fā)板

1.清空源碼目錄

uboot-imx-rel_imx_4.1.15_2.1.0_ga$ make distclean

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

在u-boot源碼下的configs目錄下添加mx6ull_smartcar_defconfig配置文件

uboot-imx-rel_imx_4.1.15_2.1.0_ga/configs$ cp mx6ull_14x14_evk_defconfig 
                                              mx6ull_smartcar_defconfig

將mx6ull_smartcar_defconfig修改如下內(nèi)容:

CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/smartcar/imximage.cfg"
CONFIG_ARM=y
CONFIG_ARCH_MX6=y
CONFIG_TARGET_MX6ULL_SMARTCAR=y
CONFIG_CMD_GPIO=y

3.添加開(kāi)發(fā)板目錄

在u-boot源碼下的board/freescale目錄下添加smartcar開(kāi)發(fā)板

uboot-imx-rel_imx_4.1.15_2.1.0_ga/board/freescale$ cp mx6ullevk smartcar -a

進(jìn)入smartcar目錄下,將mx6ullevk.c修改成smartcar.c。
修改smartcar目錄下的Makefile,修改如下:

# (C) Copyright 2015 Freescale Semiconductor, Inc.
#
# SPDX-License-Identifier:        GPL-2.0+
#

obj-y  := smartcar.o

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

修改smartcar目錄下的imximage.cfg文件的第34行,修改如下:


image.png

4.添加開(kāi)發(fā)板頭文件

在u-boot源碼目錄下的include/configs目錄下添加smartcar.h

uboot-imx-rel_imx_4.1.15_2.1.0_ga/include/configs$ cp mx6ullevk.h smartcar.h

修改頭部宏開(kāi)關(guān):


image.png

修改136行fdt_file內(nèi)容如下:


image.png

5.修改Kconfig文件

進(jìn)入u-boot源碼的arch/arm/cpu/armv7/mx6目錄下,修改Kconfig文件內(nèi)容如下:

添加自己的開(kāi)發(fā)板的配置選項(xiàng):

image.png

添加包含自己開(kāi)發(fā)板的Kconfig文件:


image.png

進(jìn)入u-boot源碼的board/freescale/smartcar目錄下,修改Kconfig文件內(nèi)容如下:

if TARGET_MX6ULL_SMARTCAR

config SYS_BOARD
        default "smartcar"

config SYS_VENDOR
        default "freescale"

config SYS_CONFIG_NAME
        default "smartcar"

endif

三、配置編譯及測(cè)試

配置

uboot-imx-rel_imx_4.1.15_2.1.0_ga$ make mx6ull_smartcar_defconfig

2.編譯

uboot-imx-rel_imx_4.1.15_2.1.0_ga$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

3 測(cè)試

將源碼目錄下的u-boot.bin到tftpboot目錄下,然后通過(guò)開(kāi)發(fā)板上的u-boot通過(guò)tftp下載測(cè)試:

=> tftp 878000000 u-boot.bin
Using FEC0 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.200
Filename 'u-boot.bin'.
Load address: 0x78000000
Loading: #############################
         2.7 MiB/s
done
Bytes transferred = 416472 (65ad8 hex)

=> go 87800000

更新板子里面的u-boot

A、切換到emmc 的第0分區(qū)
=> mmc dev 1 0
switch to partitions #0, OK
mmc1(part 0) is current device
=>

B、從tftp下載 u-boot.imx 到內(nèi)存 80800000
=> tftp 80800000 u-boot.imx
Using FEC0 device
TFTP from server 192.168.3.25; our IP address is 192.168.3.22
Filename 'u-boot.imx'.
Load address: 0x80800000
Loading: #########################
         1.7 MiB/s
done
Bytes transferred = 363520 (58c00 hex)
=> 

C、將內(nèi)存的數(shù)據(jù)寫到emmc的第0分區(qū)第2個(gè)塊
為什么是 2C6 ?上一步驟我們下載的u-boot.imx為 363520 個(gè)字節(jié),353520/512=710塊,十六進(jìn)制為2C6 
(如果有小數(shù)需要+1)
=> mmc write 80800000 2 2C6
MMC write: dev # 1, block # 2, count 710... 710blocks written: OK
=>

4、分區(qū)設(shè)置
mmc partconf dev boot_ack boot_partition partition_access
- Change the bits of the PARTITION_CONFIG field of the specified device

=> mmc partconf 1 1 0 0
=>

5、重啟
=> reset
resetting ...

注意:
不要寫 SD 卡或者 EMMC 的前兩個(gè)塊(扇區(qū)),里面保存著分區(qū)表!
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容