u-boot-2009.08移植笔记四,平台TQ2440 .
2013-03-19 21:03
183 查看
任务:让 u-boot 支持从 nand- flash 启动(也就是同时支持 Nor Flash 和 NAND Flash
启动)
1.修改cpu/arm920t/start.S代碼搬移程序,這裡按照TQ2440提供的U-BOOT1.1.6
源碼修改
將堆棧初始華提到前面,因為這裡搬運代碼用的C代碼,需要用到堆棧,然後添加修改如下
#ifndef CONFIG_SKIP_RELOCATE_UBOOT
relocate: /* relocate U-Boot to RAM */
adr r0, _start /* r0 <- current position of code */
ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
cmp r0, r1 /* don't reloc during debug */
beq clear_bss
ldr r2, _armboot_start
ldr r3, _bss_start
sub r2, r3, r2 /* r2 <- size of armboot */
#if 1
bl CopyCode2Ram
#else
add r2, r0, r2 /* r2 <- source end address */
#endif
/*copy_loop:
ldmia r0!, {r3-r10} copy from source address [r0]
stmia r1!, {r3-r10} copy to target address [r1]
cmp r0, r2 until source end addreee [r2]
ble copy_loop
*/
/*#endif CONFIG_SKIP_RELOCATE_UBOOT */
2.現在增加CopyCode2Ram();函數及其支持函數,這裡直接用TQ提供的boot_init.c
這是這個函數拷貝的原理
* 无论是从NOR Flash还是从NAND Flash启动,
* 地址0处为指令"b Reset", 机器码为0xEA00000B,
* 对于从NAND Flash启动的情况,其开始4KB的代码会复制到CPU内部4K内存中,
* 对于从NOR Flash启动的情况,NOR Flash的开始地址即为0。
* 对于NOR Flash,必须通过一定的命令序列才能写数据,
* 所以可以根据这点差别来分辨是从NAND Flash还是NOR Flash启动:
* 向地址0写入一个数据,然后读出来,如果没有改变的话就是NOR Flash
將此文件拷貝到board/samsung/CM2440/目錄下,並在此目錄下的Makefile中添加
COBJS := CM2440.o flash.o boot_init.o
並在u-boot.lds文件中添加,使其在鏈接位置靠前
3.修改s3c2410.h s3c2440.h,由於他們的NAND控制器基地址相同
按照2410的NAND添加
static inline S3C2440_NAND * const S3C2440_GetBase_NAND(void)
{
return (S3C2440_NAND * const)S3C2410_NAND_BASE;
}
現在make 一下,注意要bl cpu_init_crit 去掉前面的@,如果沒錯下載到
NAND中,從NAND啟動后在串口能看到信息
启动)
1.修改cpu/arm920t/start.S代碼搬移程序,這裡按照TQ2440提供的U-BOOT1.1.6
源碼修改
將堆棧初始華提到前面,因為這裡搬運代碼用的C代碼,需要用到堆棧,然後添加修改如下
#ifndef CONFIG_SKIP_RELOCATE_UBOOT
relocate: /* relocate U-Boot to RAM */
adr r0, _start /* r0 <- current position of code */
ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
cmp r0, r1 /* don't reloc during debug */
beq clear_bss
ldr r2, _armboot_start
ldr r3, _bss_start
sub r2, r3, r2 /* r2 <- size of armboot */
#if 1
bl CopyCode2Ram
#else
add r2, r0, r2 /* r2 <- source end address */
#endif
/*copy_loop:
ldmia r0!, {r3-r10} copy from source address [r0]
stmia r1!, {r3-r10} copy to target address [r1]
cmp r0, r2 until source end addreee [r2]
ble copy_loop
*/
/*#endif CONFIG_SKIP_RELOCATE_UBOOT */
2.現在增加CopyCode2Ram();函數及其支持函數,這裡直接用TQ提供的boot_init.c
這是這個函數拷貝的原理
* 无论是从NOR Flash还是从NAND Flash启动,
* 地址0处为指令"b Reset", 机器码为0xEA00000B,
* 对于从NAND Flash启动的情况,其开始4KB的代码会复制到CPU内部4K内存中,
* 对于从NOR Flash启动的情况,NOR Flash的开始地址即为0。
* 对于NOR Flash,必须通过一定的命令序列才能写数据,
* 所以可以根据这点差别来分辨是从NAND Flash还是NOR Flash启动:
* 向地址0写入一个数据,然后读出来,如果没有改变的话就是NOR Flash
將此文件拷貝到board/samsung/CM2440/目錄下,並在此目錄下的Makefile中添加
COBJS := CM2440.o flash.o boot_init.o
並在u-boot.lds文件中添加,使其在鏈接位置靠前
3.修改s3c2410.h s3c2440.h,由於他們的NAND控制器基地址相同
按照2410的NAND添加
static inline S3C2440_NAND * const S3C2440_GetBase_NAND(void)
{
return (S3C2440_NAND * const)S3C2410_NAND_BASE;
}
現在make 一下,注意要bl cpu_init_crit 去掉前面的@,如果沒錯下載到
NAND中,從NAND啟動后在串口能看到信息
相关文章推荐
- u-boot-2009.08移植笔记六,平台TQ2440 .
- u-boot-2009.08移植笔记七,平台TQ2440
- u-boot-2009.08移植笔记一,平台TQ2440
- u-boot-2009.08移植笔记三,平台TQ2440 .
- u-boot-2009.08移植笔记五,平台TQ2440 .
- u-boot-2009.08移植笔记二,平台TQ2440
- uboot1.3.1移植到TQ2440笔记
- TQ2440 学习笔记—— 30、移植U-Boot【U-Boot 的启动过程第一阶段源码分析】
- TQ2440 学习笔记—— 28、移植U-Boot【U-Boot 的配置过程】
- u-boot-1.1.6移植到TQ2440笔记——准备工作(1)
- u-boot-2016.01移植笔记之先让u-boot可以编译成功以及添加2440单板
- 在连续两个平台的uboot和Linux系统移植过程中,在千兆网口调试这块都遇到了很大的麻烦。由于寄存器数量庞大,千兆网口MAC和PHY内部结构复杂,MAC和PHY接口种类多,千兆以太网驱动的调试成
- u-boot-2011.03在TQ2440上的移植(6)--支持dm9000x网卡
- uImage在内存中无法正常启动——UBoot-2010.06在TQ2440上的移植--机器码配对
- AM335x(TQ335x)学习笔记——u-boot-2014.10移植
- 嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(三)
- u-boot-2011.03在TQ2440上的移植(3)--支持norflash启动 .
- 移植u-boot1.1.6到友善mini2440学习笔记之环境搭建(系列之一)
- U-Boot-2009-03移植笔记(点亮第一展灯)
- TQ210--UBOOT移植笔记--添加自己的单板【学习笔记】