移植内核时nand write 30008000这个地址的原因。

在s3c2440里,烧写内核镜像uImage时,通过tftp 或者 nand write烧写的地址都是0x30008000。

当时我有个疑问,为什么是这个地址?如果换成别的地址是否可行?

1,为什么是0x30008000这个地址?

arch/arm/kernel/head.S中有解释

此处说明在虚拟地址的前16k的空间存放着页表,建议内核ram的起始地址设置到0x8000的位置,也就是偏移32k。

或者在uboot的板级文件board/samsung/smdk2410/config.mk中也有解释:

只是这个解释不见得每一个板卡都会给写。

2,那么只能放这种 内存 + 偏移0x8000的地址么?

不见得必须,在Hi3516a烧写内核时, ddr的起始地址时0x80000000,而内核的烧写位置是0x82000000。

也就是放到一个不要和页表的冲突的位置,仍然以2410的板卡为例,2410的内存大小是64M,从0x300000000到0x34000000,

uboot的起始位置是0x33f80000,假如一个1M的内核烧写的位置覆盖了0x33f80000,那就死机。

3,地址0x33f80000。 (smdk2410板卡)

2410的内存大小是64M,从地址0x30000000到0x34000000,从0x33f80000到末尾的大小是512k,这个地址依然是在板级config.mk中定义的,一般这个文件也就这么一行定义:TEXT_BASE=0x33f80000;  TEXT_BASE是uboot启动的重要参数,代表着uboot代码段的初始地址,也就是板卡上电后,从nand中拷贝uboot到这个位置进行执行。

以上的位置,都是板卡推荐的地址,而不是固定不变的,如果烧写的uboot大小超过了512k,那么就把33f80000h改一下。如果烧写的内核比较大,那也把内核的地址改一下,内核的位置只要不和页表冲突,就可以先计算大小,然后修改起始地址,当然如果是推荐的那种0x30008000,这相当于可烧写的0地址了,也就没改的必要了。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值