Chinaunix首页 | 论坛 | 博客
  • 博客访问: 244298
  • 博文数量: 32
  • 博客积分: 557
  • 博客等级: 中士
  • 技术积分: 431
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-20 23:05
文章分类

全部博文(32)

文章存档

2015年(4)

2014年(2)

2012年(4)

2011年(22)

分类: 嵌入式

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文件,仅供学习交流,如有侵权,请知会删除!

阅读(6457) | 评论(23) | 转发(1) |
0

上一篇:没有了

下一篇:Linux内核移植

给主人留下些什么吧!~~

wangjianchangdx2011-04-24 15:54:05

针对上一个疑问:
对u-boot.bin反汇编(arm-linux-objdump -D -b binary -m arm u-boot.bin > u-boot.bin.6.0),跳转到start_armboot处的代码如下:
230: e51ff004  ldr pc, [pc, #-4] ; 0x234      
234: 33f80864  mvnscc r0, #6553600 ; 0x640000
注意此处的33f80864即为拷贝之后,start_armboot函数在内存中的地址
对u-boot进行反汇编(arm-linux-objdump -D -m arm u-boot > u-boot.S.6.0),该处的代码如下:
33f80230: e51ff004  ldr pc, [pc, #-4] ; 33f80234 <_start_armboot>

wangjianchangdx2011-04-24 15:07:58

添加nand_read.c,修改start.S,u-boot.lds之后,memset执行成功,并且串口有信息打印,这说明代码拷贝已经成功。
一点猜想:u-boot源码中保存的start.S中的代码,只是从Nor Flash启动,兼容烧写到Nor Flash和直接加载进内存两种方式。
一点疑问:代码虽然拷贝成功,但是如何从现在执行的Steppingstone中的代码,跳转到执行0先f800000中的代码,我见过(*u-boot)();的调用方式:
uboot = (void *)CONFIG_SYS_NAND_U_BOOT_START;
(*uboot)();
这里是一个什么机制,先存疑

wangjianchangdx2011-04-24 13:11:34

概念辨析:地址空间是指内存地址空间,NAND Flash相当于硬盘,其中存储的数据并不直接映射入地址空间,但是NAND Flash Controller的寄存器映射入地址空间,CPU通过读写控制器寄存器,读取/写入NAND Flash

wangjianchangdx2011-04-24 12:20:41

s3c2440从NAND Flash启动的情况,在芯片手册第6章NAND FLASH CONTORLLER有说明

wangjianchangdx2011-04-24 00:54:56

我所使用的u-boot版本为u-boot-2010.06-rc2
目前的问题是:执行到start_armboot中的memset时出错
问题原因,暂认为是:start.S中的copyloop只适合于Nor Flash,而当代码从Nand Flash启动时,并不能成功拷贝,所以,代码的执行局限于4K,当调用到超过4K地址范围的memset函数时,出错。
接下来要做的是,将代码从Nand Flash拷贝进RAM中