u-boot-2012-07移植二

原本想买个openjtag可以单步调试uboot,买了之后才发现原来这个这个东西也必须跳过底层初始化,也就是lowleve_init.最后自己想了想还是算了,还是采用传统的方法,在SD卡里面装一个官方的uboot,然后再用DNW下载,至于DNW在win7上的使用,用官方自带肯定不行了,要自己在网上下载一个,google一下,dnw for win7第一个就是的了。http://code.google.com/p/s3c6410kits/downloads/detail?name=dnw-for-win7.rar&can=2&q=。这个方法要是不懂怎么操作,那我就没有办法了。

,首先要确保你在电脑上编译的uboot的可以在板子上可以跑,那就点个灯吧,修改前面:

	/* LED on only #8 */
	ldr	r0, =ELFIN_GPIO_BASE
	ldr	r1, =0xffff1111
	str	r1, [r0, #GPMCON_OFFSET]

	ldr	r1, =0x55555555
	str	r1, [r0, #GPMPUD_OFFSET]

	ldr	r1, =0xf00e
	str	r1, [r0, #GPMDAT_OFFSET]

这样修改从程序可以看出就是把板子上的四个灯配置成输出模式,然后点亮第一个灯。保存-->编译-->下载;下载到板子上发现灯依然和以前一样,没有只亮一个灯。怎么办呢?分析一下uboot的反汇编代码。执行arm-linux-objdump -D u-booot > u-boot.dis;反汇编后发现lowleve_init被链接到了100k(这里需要计算)的位置,怎么改呢?需要修改lowleve_init的链接位置,修改board/samsung/smdk6410/u-boot-nand.lds:

	. = ALIGN(4);
	.text      :
	{
	  arch/arm/cpu/arm1176/start.o	(.text)
	  board/samsung/smdk6410/libsmdk6410.o (.text)
	  *(.text)
	}
修改arch/arm/cpu/u-boot.lds 

	.text :
	{
		__image_copy_start = .;
		CPUDIR/start.o (.text)
		board/samsung/smdk6410/libsmdk6410.o (.text)
		*(.text)
	}

这里就把lowleve_init放到了前面;查看u-boot.lds:

57e000b0 <mmu_disable_phys>:
57e000b0:	e3a00207 	mov	r0, #1879048192	; 0x70000000
57e000b4:	e3800013 	orr	r0, r0, #19
57e000b8:	ee0f0f92 	mcr	15, 0, r0, cr15, cr2, {4}
57e000bc:	eb0000f0 	bl	57e00484 <lowlevel_init>
57e00484-57e00000=484;

(484)1156/1024 < 8K

这说明我现在已经把lowleve_init放到了,8k以内的位置,板子上电以后CPU硬件自动把NAND FLASH的前8K复制到CPU的内部一个位置,具体的怎么叫我忘了,然后通过DNW下载到板子上,发现第一个灯神奇的亮了。

你可能感兴趣的:(u-boot-2012-07移植二)