如何從0編譯和移植uboot、增加串口?
繼續(xù)更新兩篇ARM專(zhuān)題文章,該系列匯總?cè)缦拢?/p>
《從0學(xué)ARM》
本文主要目的是如何從0編譯和移植uboot,增加串口、網(wǎng)絡(luò)、emmc等功能,讓他支持exynos4412開(kāi)發(fā)板。
一、移植步驟
1. Uboot配置指定交叉編譯工具鏈進(jìn)入uboot代碼根目錄$ cd u-boot-2013.01
修改 Makefile在
ifeq ($(HOSTARCH),$(ARCH))
CROSS_COMPILE ?=
endif
下添加
ifeq (arm,$(ARCH))
CROSS_COMPILE ?= arm-none-linux-gnueabi-
endif
交叉編譯工具
在這里插入圖片描述指定產(chǎn)品CPU我們產(chǎn)品用的CPU是 exynos 4412;
查看u-boot源碼:
arch/arm/cpu/armv7/exynos/
可見(jiàn)U-boot已支持該CPU。
指定產(chǎn)品BOARD三星公司已經(jīng)為exynos 4412發(fā)布了初始化的程序:
origencpu硬件信息對(duì)應(yīng)的該CPU硬件信息頭文件位于以下位置:include/configs/origen.h
該文件定義了uboot啟動(dòng)必須關(guān)于exynos 4412必須的一些資源信息。
boards.cfg在uboot-2013-01中,頂層目錄下的boards.cfs文件中查看它支持的開(kāi)發(fā)板和相應(yīng)的信息,后續(xù)的編譯過(guò)程需要根據(jù)配置名檢索到相應(yīng)的信息。文件格式如下:
和以前的老版本比,配置更加規(guī)范化了,其實(shí)這些就是相關(guān)文件分類(lèi)的一個(gè)文件夾的描述。依照這個(gè)層次關(guān)系,我們可以很方便的對(duì)我們開(kāi)發(fā)板進(jìn)行配置。
編譯u-boot
不同版本的uboot的配置命令可能是不同的,源碼包的文件README通常會(huì)有相應(yīng)的配置命令【其他版本的uboot會(huì)不一樣】:
配置和編譯命令如下:
$ make distclean
$ make origen_config
改配置命令會(huì)生成以下文件:
include/config.h
config.h
編譯:
$ make all
編譯完成后生成的u-boot.bin就是可執(zhí)行的鏡像文件。
但是并不會(huì)生成真正適配我們板子的uboot,只是適配參考板,該文件還不能在我們板子上運(yùn)行,我們需要對(duì)u-boot源代碼進(jìn)行相應(yīng)的修改。
2. 確認(rèn)第一條指令有運(yùn)行到 (點(diǎn)燈法)
在arch/arm/cpu/armv7/start.S 134 行后添加點(diǎn)燈程序
#if 1
ldr r0, =0x11000c40 @GPX2_7 led2
ldr r1, [r0]
bic r1, r1, #0xf0000000
orr r1, r1, #0x10000000
str r1, [r0]
ldr r0, =0x11000c44
mov r1,#0xff
str r1, [r0]
#endif
因?yàn)閡boot剛啟動(dòng)的時(shí)候,串口沒(méi)有來(lái)得及初始化,我們可以通過(guò)點(diǎn)亮LED的方法來(lái)判斷程序是否執(zhí)行到此處。
代碼詳解參考《十、LED匯編、C語(yǔ)言驅(qū)動(dòng)編寫(xiě)》
3. 添加三星加密方式
exynos 需要三星提供的初始引導(dǎo)加密后,我們的u-boot,才能被引導(dǎo)運(yùn)行,這其中要用到下面的幾個(gè)命令或三星提供的工具軟件,這些操作的目的就是根據(jù)三星的芯片的啟動(dòng)要求對(duì)uboot.bin 進(jìn)行一些處理,包括在特定長(zhǎng)度的位置加上和校驗(yàn)信息以及插入一些文件段。
$cp sdfuse_q u-boot-2013.01 -rf
$ chmod 777 u-boot-2013.01/sdfuse_q -R
$cp CodeSign4SecureBoot u-boot-2013.01 -rf
注:CodeSign4SecureBoot 三星提供的安全啟動(dòng)方式 ,對(duì)應(yīng)的程序由三星提供。sdfuse_q目錄下的文件是針對(duì)三星堆uboot.bin文件格式要求進(jìn)行加密編寫(xiě)的文件。
修改根目錄Makefile,實(shí)現(xiàn)sdfuse_q的編譯在
$(obj)u-boot.bin: $(obj)u-boot
$(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
$(BOARD_SIZE_CHECK)
下添加
@#./mkuboot
@split -b 14336 u-boot.bin bl2
@m(xù)ake -C sdfuse_q/
@#cp u-boot.bin u-boot-4212.bin
@#cp u-boot.bin u-boot-4412.bin
@#./sdfuse_q/add_sign
@./sdfuse_q/chksum
@./sdfuse_q/add_padding
@rm bl2a*
@echo
注意是tab鍵縮進(jìn)的,否則makefile編譯報(bào)錯(cuò)注意如果執(zhí)行了make distclean 需重新拷貝CodeSign4SecureBoot
為方便起見(jiàn),在根目錄下創(chuàng)建編譯腳本build.sh,該腳本將自動(dòng)完成添加加密方式。
1 #!/bin/sh
2
3 sec_path="CodeSign4SecureBoot/"
4 CPU_JOB_NUM=$(grep processor /proc/cpuinfo | awk '{field=$NF};END{print field+1}')
5 ROOT_DIR=$(pwd)
6 CUR_DIR=${ROOT_DIR##}
7
8 case "$1" in
9 clean)
10 echo make clean
11 make mrproper
12 ;;
13 *)
14
15 if [ ! -d $sec_path ]
16 then
17 echo "**********************************************"
18 echo "[ERR]please get the CodeSign4SecureBoot first"
19 echo "**********************************************"
20 return
21 fi
22
23 make origen_config
24
25 make -j$CPU_JOB_NUM
26
27 if [ ! -f checksum_bl2_14k.bin ]
28 then
29 echo "。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
30 echo "There are some error(s) while building uboot, please use command make to check."
31 echo "。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
32 exit 0
33 fi
34
35 cp -rf checksum_bl2_14k.bin $sec_path
36 cp -rf u-boot.bin $sec_path
37 rm checksum_bl2_14k.bin
38
39 cd $sec_path
40 cat E4412_N.bl1.SCP2G.bin bl2.bin all00_padding.bin u-boot.bin tzsw_SMDK4412_SCP_2GB.bin > u-boot-origen.bin
41 mv u-boot-origen.bin $ROOT_DIR
42
43 rm checksum_bl2_14k.bin
44 rm u-boot.bin
45
46 echo
47 echo
48 ;;
49
50 esac
編譯腳本
$ chmod 777 u-boot-2013.01/ build.sh
$ ./buildsh
注:build.sh 腳本方式完成自動(dòng)添加加密方式,編譯生成所需文件u-boot_origen.bin
root@ubuntu:/home/peng/uboot/u-boot-2013.01# ls
api config.mk examples Makefile sdfuse_q u-boot.bin
arch COPYING fs mkconfig snapshot.commit u-boot.map
board CREDITS helper.mk nand_spl spl u-boot-origen.bin
boards.cfg disk include net System.map u-boot.srec
build.sh doc lib post test
CodeSign4SecureBoot drivers MAINTAINERS README tools
common dts MAKEALL rules.mk u-boot
u-boot_origen.bin4. 實(shí)現(xiàn)串口輸出
修改lowlevel_init.S文件
$vim board/samsung/origen/lowlevel_init.S
a) 添加臨時(shí)棧,在
41 lowlevel_init:
后添加
ldr sp,=0x02060000 @use iRom stack in bl2
b) 添加關(guān)閉看門(mén)狗代碼:在
67 beq wakeup_reset
后添加
#if 1 for close watchdog
PS-Hold high
ldr r0, =0x1002330c
ldr r1, [r0]
orr r1, r1, #0x300
str r1, [r0]
ldr r0, =0x11000c08
ldr r1, =0x0
str r1, [r0]
Clear MASK_WDT_RESET_REQUEST
ldr r0, =0x1002040c
ldr r1, =0x00
str r1, [r0]
#endif

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
圖片新聞
最新活動(dòng)更多
-
7月22-29日立即報(bào)名>> 【線下論壇】第三屆安富利汽車(chē)生態(tài)圈峰會(huì)
-
7.30-8.1火熱報(bào)名中>> 全數(shù)會(huì)2025(第六屆)機(jī)器人及智能工廠展
-
7月31日免費(fèi)預(yù)約>> OFweek 2025具身智能機(jī)器人產(chǎn)業(yè)技術(shù)創(chuàng)新應(yīng)用論壇
-
免費(fèi)參會(huì)立即報(bào)名>> 7月30日- 8月1日 2025全數(shù)會(huì)工業(yè)芯片與傳感儀表展
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書(shū)》
-
8月5日立即報(bào)名>> 【在線會(huì)議】CAE優(yōu)化設(shè)計(jì):醫(yī)療器械設(shè)計(jì)的應(yīng)用案例與方案解析
推薦專(zhuān)題
- 1 AI 眼鏡讓百萬(wàn) APP「集體失業(yè)」?
- 2 豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
- 3 一文看懂視覺(jué)語(yǔ)言動(dòng)作模型(VLA)及其應(yīng)用
- 4 “支付+”時(shí)代,支付即生態(tài) | 2025中國(guó)跨境支付十大趨勢(shì)
- 5 中國(guó)最具實(shí)力AI公司TOP10
- 6 深圳跑出40億超級(jí)隱形冠軍:賣(mài)機(jī)器人年入6.1億,港股上市
- 7 特斯拉Robotaxi上路,馬斯克端上畫(huà)了十年的餅
- 8 “AI六小虎”到了下一個(gè)賽點(diǎn)
- 9 張勇等人退出阿里合伙人
- 10 AI視頻,攪動(dòng)1.5萬(wàn)億市場(chǎng)