uboot 2017.01初次编译

首先配置Makefile 中的交叉编译工具

CH),$(ARCH))
#CROSS_COMPILE ?=    这里加#进行注释掉
endif

// 添加后面两句
ARCH = arm
CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-

首先需要配置, 配置文件看
/configs 文件, 找到相同的芯片或者类似的(同一厂家, 系列的)

make xxx_defconfig

接着 make -j4

报错 lib/asm-offsets.c:1:0: error: bad value (armv5) for -march= switch
也是因为交叉编译工具没有配置好, 所以才会导致的,

编译完成之后, 生成uboot.bin 将其进行烧录, 然后看现象查找问题.

随后需要找到程序的入口, 通过分析u-boot.lds链接脚本文件
发现

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)   // 这个就是程序的入口
SECTIONS
{
 . = 0x00000000;
 . = ALIGN(4);
 .text :
 {
  *(.__image_copy_start)
  *(.vectors)
  arch/arm/cpu/armv7/start.o (.text*)
  *(.text*)
 }
 . = ALIGN(4);
 .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
 . = ALIGN(4);
 .data : {
  *(.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_XXX的时候报出
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 ${srctree} 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 中的定义,
但是在xxx.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
应该是包含了错误的变量信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值