全部博文(32)
分类: 嵌入式
2011-04-23 14:09:54
理解别人修改逻辑的难度不亚于理解original源码
自己慢慢改吧,记录尝试和逻辑过程。
这里先开个头。
所具备的基础知识:
①2010年6月份曾尝试移植,三日无果
②数电、单片机,嵌入式概念,ARM芯片,及其指令集
③毕业后工作一段时间,对Linux,Makefile,gcc,U-Boot的使用有一定的了解
基于smdk2410。也不是第一步了,现在思路如下:
①首先,对include/configs/mini2440.h中定义的跟Makefile中对应的代表CPU类型和开发板的宏进行修改,在对其他涉及的文件,进行修改。达到的效果是,可以编译通过
②其次,针对2440与2410不同的地方进行修改,达到的效果是能够在板上运行
CSDN的评论限制150字,太不给力了!还要每次都编辑博文
2011-4-20a
搜索所有使用CONFIG_S3C2410和CONFIG_SMDK2410的位置,将CONFIG_S3C2440和CONFIG_MINI2440以或的形式加在其后,此举重在了解U-Boot源码中CPU体系和型号、开发板specific的代码
也可以修改之后,直接make,进行编译,哪里出错改哪里
2011-4-20b
第一步顺利完成,所需改变的文件有:
---- CONFIG_S3C2410 Matches (19 in 9 files) ----
S3c24x0.h (arch\arm\include\asm\arch-s3c24x0): 芯片MC/UART/USB HOST/LCD/PM等模块定义
S3c24x0_cpu.h (arch\arm\include\asm\arch-s3c24x0): 根据宏,include 2440/2410等不同的头文件,对外隐藏细节
S3c24x0_i2c.c (drivers\i2c):
Serial.c (common):
Serial.h (include):
start.S (arch\arm\cpu\arm920t): 系统启动代码
---- CONFIG_SMDK2410 Matches (2 in 2 files) ----
Timer.c (arch\arm\cpu\arm920t\s3c24x0): defined(CONFIG_SMDK2410) || \
#ifdef CONFIG_S3C2410 ===> #if defined(CONFIG_S3C2410) || defined(S3C2440),其余同理
u-boot-2010.06_patch.txt 移植过程中参考的高手移植的patch文件,仅供学习交流,如有侵权,请知会删除!
wangjianchangdx2011-04-24 00:11:48
当从NAND启动时,如图,cpu会自动从NAND flash中读取前4KB的数据放置在片内SRAM里(s3c2440是soc),同时把这段片内SRAM映射到nGCS0片选的空间,即0x00000000。cpu是从0x00000000开始执行,也就是NAND flash里的前4KB内容。因为NAND FLASH连地址线都没有,不能直接把NAND映射到0x00000000,只好使用片内SRAM做一个载体。
当从非NAND flash启动时,如图,0x00000000就是nGCS0片选中的那片nor flash(也可以是E2PROM)。
这里就不需要片内SRAM来辅助了,所以片内SRAM的起始地址还是0x40000000.
wangjianchangdx2011-04-23 17:50:29
MARK: 已顺利跳转到_start_armboot,串口无信息,接下来是C函数,需要修改相关配置参数了。
注:
①start.S、lowlevel_init.S已根据tekkaman的代码进行修改
②以上调试,采用LED灯
#define GPBCON 0x56000010
#define GPBDAT 0x56000014
start_code:
@@@@@@@@@@@@@@@@@@@@@@@@
/* light up the LED */
ldr r0, =GPBCON
ldr r1, =GPBDAT
ldr r2, =0x155555
mov r3, #0x1e0
str r2, [r0]
str r3, [r1]
/********/
@@@@@@@@@@@@@@@@@@@@@@@
ldr r0, =GPBDA
wangjianchangdx2011-04-23 17:26:37
cpu_init_crit中
bl lowlevel_init 失败
反汇编发现lowlevel_init函数的地址远大于cpu_init_crit,参考《U-Boot启动过程完全分析》中说的CPU内部的4K ROM,结合文中所给的lds文件,发现我的文件中lowlevel_init .o并不在前4K
修改lds文件为:
.text :
{
arch/arm/cpu/arm920t/start.o (.text)
board/samsung/mini2440/lowlevel_init.o (.text)
*(.text)
}
之后,问题解决
原因仍不明
wangjianchangdx2011-04-23 16:16:47
U-Boot启动过程完全分析
http://www.cnblogs.com/heaad/archive/2010/07/17/1779829.html