QT210,U-Boot移植(4)

因为自己又不会汇编,又不会写Makefile,也不懂编译器的参数设置,也不会写.lds文件,所以还是决定直接在u-boot-samsung-dev源码上慢慢调试bl1,顺便将u-boot弄熟。

建议先将u-boot-samsung-dev备份好,再另外修改。

将cpu/s5pc11x/start.S删除,将cpu/s5pc11x/start.S.sdboot重命名为:cpu/s5pc11x/start.S。

将include/configs/smdkv210single.h删除,将include/configs/smdkv210single.h.nand_restore.sdboot重命名为:include/configs/smdkv210single.h。

每次都是编译smdkv210single_config这个配置。不过貌似另外几个配置在Makefile看到的都是一样的……

使用点灯大法,发现执行到“ldr pc, _start_armboot”之前的代码执行顺序都是对的,这一句应该就是调用lib_arm/board.c文件里面的“void start_armboot (void)”函数了,但在这个函数里面点灯,灯就是不亮,说明根本没有执行到这个函数里面。

后来才突然发现,这一句有别于之前看到的跳转,比如“bl      movi_bl2_copy”这句,在movi.c文件里面的“void movi_bl2_copy(void)”函数中点灯正常。

“bl      movi_bl2_copy”相对跳转,“ldr pc, _start_armboot”这个就直接对pc寄存器赋值了,所以这个应该是跳转到u-boot复制到内存后,在内存中的地址了。

查看u-boot.dis文件:

c3e001e8 <_start_armboot>:
c3e001e8:	c3e02730 	.word	0xc3e02730
c3e02730 <start_armboot>:
c3e02730:	e59f3010 	ldr	r3, [pc, #16]	; c3e02748 <start_armboot+0x18>
c3e02734:	e59f0010 	ldr	r0, [pc, #16]	; c3e0274c <start_armboot+0x1c>
c3e02738:	e3a0200f 	mov	r2, #15
c3e0273c:	e5830c00 	str	r0, [r3, #3072]	; 0xc00
c3e02740:	e5832c04 	str	r2, [r3, #3076]	; 0xc04
c3e02744:	eafffffe 	b	c3e02744 <start_armboot+0x14>
c3e02748:	e0200000 	.word	0xe0200000
c3e0274c:	00001111 	.word	0x00001111

……
那么,应该是,“void movi_bl2_copy(void)”函数应该将u-boot.bin复制到0xc3e00000开始的位置,那么,使用“ldr pc, _start_armboot”就刚好能够跳转到在内存中的“void start_armboot (void)”函数了,而现在还没有烧写u-boot.bin,所以不能点灯……

将u-boot.bin也烧写进sd卡,启动后,灯亮!说明前面已经将u-boot.bin文件拷贝到了正确的位置!

这里也能说明为什么之前使用SD-bl1-8k.bin,再使用自己编译的u-boot.bin就一点反应也没有了,它跳至“void start_armboot (void)”函数,可是这个函数的地址并不在它跳至的位置,因为两者代码不一样,刚好“void start_armboot (void)”函数函数的开始位置也不一样。
但现在只有一个串口能输出“OK”,没有看到有u-boot的启动信息。可能是"include/config/smdkv210single.h"定义的串口号不一样,改串口号试试了。(后发现是自己在“void start_armboot (void)”函数里面加了个while(1)造成串口没有信息的,罪过……后来将while(1)去掉后,串口就能正常输出信息了)
查看cpu/s5pc11x/serial.c文件:

int serial_init(void)
{
	serial_setbrg();

	return (0);
}
void serial_setbrg(void)
{
	DECLARE_GLOBAL_DATA_PTR;

	int i;
	for (i = 0; i < 100; i++);
}
include/asm-arm/global_data.h文件中:

#define DECLARE_GLOBAL_DATA_PTR     register volatile gd_t *gd asm ("r8")
感觉像是什么都没做……也可能是因为BL0已经将串口初始化好了吧?
点灯发现,根本没有进入到cpu/s5pc11x/serial.c文件中的void serial_setbrg(void)函数……

后发现是自己在“void start_armboot (void)”函数里面加了个while(1)造成串口没有信息的,罪过……后来将while(1)去掉后,串口就能正常输出信息了。

那下一部就是移植u-boot-2012.07……对照u-boot-samsung-dev来一步一步移植最新版的u-boot!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值