首先配置makefile 中的交叉編譯工具
ch),$(arch))
#cross_compile ?= 這裡加#進行注釋掉
endif
// 新增後面兩句
arch = arm
cross_compile = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
首先需要配置, 配置檔案看
/configs 檔案, 找到相同的晶元或者類似的(同一廠家, 系列的)
make ***_defconfig
接著 make -j4
報錯 lib/asm-offsets.c:1:0: error: bad value (armv5) for -march= switch
也是因為交叉編譯工具沒有配置好, 所以才會導致的,
編譯完成之後, 生成uboot.bin 將其進行燒錄, 然後看現象查詢問題.
output_format("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
output_arch(arm)
entry(_start) // 這個就是程式的入口
sections
. = align(4);
.rodata :
. = align(4);
.data :
經過搜尋, 發現程式的入口在
arch/arm/lib/vector.s檔案中
這個和以前接觸的其他版本的uboot不一樣, 以前的uboot入口是在start.s, 這個版本是在vector.s中,
因此需要注意,
因為需要編譯後的在u-boot.bin中新增
16位元組的頭, 因此
只需要在_start: 一開始處新增空的16位元組即可
_start:
.word 0x2000
.word 0x0
.word 0x0
.word 0x0
#ifdef config_sys_dv_nor_boot_cfg
.word config_sys_dv_nor_boot_cfg
#endif
當編譯的時候 ,出現
syntax error
這個是使用了// 進行注釋, 解決的方式就是/* 還有 */ 進行注釋,
還有 在新增config_***的時候報出
error: you must add new config options using kconfig
the following new ad-hoc config options were detected:
config_arm920t
config_mini2440
config_nand_s3c2440
config_rtc_s3c24x0
config_s3c2440
config_s3c24x0
config_s3c24x0_serial
config_sys_hush_parser
config_sys_s3c2440_nand_hwecc
config_zero_bootdelay_check
please add these via kconfig instead. find a suitable kconfig
file and add a 『config』 or 『menuconfig』 option.
解決的方式就是在makefile 中注釋掉
# $(srctree)/scripts/check-config.sh u-boot.cfg \
# $(srctree)/scripts/config_whitelist.txt $ 1>&2
_text_phy_base 只是在老的版本中的
start.s中定義的
_text_phy_base:
.word cfg_phy_uboot_base 根據追蹤, 即可看到_text_phy_base: 真實的資料. 這個好像就是實體地址
_text_base 在老的版本中是在makefile 中進行設定的虛擬位址
在uboot.2013.10版本中
.globl _text_base
_text_base:
.word config_sys_text_base // 對應的實體地址
在uboot 版本中, 也許是自己沒有分析對, 因此, 這裡沒有找到
_text_base 中的定義,
但是在***.h 會包含
/* text base */
#define config_sys_text_base 0x34800000 對應的實體地址
因此咱們可以自己模仿2013.10版本中,定義這個_text_base變數,將其放在
start.s中即可
.globl _text_base
_text_base:
.word config_sys_text_base
我們在清bss段的時候,需要兩個變數,
咱們可以這麼進行定義
.globl _bss_start
_bss_start:
.word __bss_start
.globl _bss_end
_bss_end:
.word _end
編譯報錯:
error: internal_relocation (type: offset_imm) not fixed up
應該是包含了錯誤的變數資訊
Uboot 2017 01 啟動流程分析
2017.01 uboot包含兩個階段的啟動,乙個是spl啟動,乙個是正常的啟動我們稱為第二階段uboot。當然,我們也可以選擇使用spl和不使用。在編譯的過程中,是先編譯第二階段uboot,然後在編譯spl的。這兩個階段的編譯時分離的。擁有不同的配置,所以許多地方的巨集是和spl的不一樣。而且鏈結...
01 uboot2017 01啟動過程概述
u boot2017.01啟動過程分析pdf u boot2017.01原始碼分析及啟動命令解析 啟動過程6部分內容如下 01 u boot2017.01 啟動過程概述 02 u boot2017.01 spl階段分析 03 u boot2017.01 u boot階段分析 04 u boot201...
u boot編譯分析
在頂層目錄下執行完 make smdk2410 config 命令後,就把u boot給配置好了,接著就可以在執行 make all 或者 make 命令去編譯u boot了,完成後就可以燒寫到開發板去執行了。在makefile中的all目標是第乙個目標,因為makefile將第乙個目標設為預設目標...