当前时区 GMT+8, 现在时间是 2008-5-17 11:56 游客: 注册 登录 仅登录论坛 | 搜索 帮助


标题: 在skyeye模拟的2410开发板上使用u-boot引导Hello4Skyeye
yuanlii
新手上路
Rank: 1


UID 25579
精华 0
积分 44
帖子 20
阅读权限 10
注册 2003-3-31
来自 China.gif
状态 离线
发表于 2007-6-29 08:30  资料  短消息  加为好友 
在skyeye模拟的2410开发板上使用u-boot引导Hello4Skyeye

转载请注明原作者:yuanliixjtu@gmail.com

本文参考了两篇文章
一篇是shang79的HelloWorld on Skyeye,这是一篇很好的供初学者入门的文章,地址为
http://www.linuxfans.org/nuke/mo ... ewtopic&t=82187
另一篇是hhq0216关于在skyeye下仿真2410开发板上运行u-boot的文章,地址为
http://www.linuxfans.org/nuke/mo ... u-boot&start=15

一. 安装skyeye
1. 先安装binutils-dev,其中包含skyeye编译用到的bfd.h
2. 直接make,应该就不会报错了
3. 打上skyeye_mach_s3c2410x.patch,这个patch是针对哪个版本的skyeye的我没有仔细考察,
    如果熟悉patch文件格式的话可根据实际情况手工修改
    这个patch主要是添加了几个寄存器的定义和操作。
    如果不打的话,没有太大问题,只是后边会有几个ERROR看上去不是很舒服。
4. 再make
5. cd ~/local/bin
    ln -s ~/skyeye/src/skyeye_1_2_2_Rel/binary/skyeye skyeye,便于以后执行
6. 此时可解压原版的Hello4Skyeye试验一下

二. 安装交叉编译工具
1. mount arm-2004-11-09.iso
2. ./install -d ~/local/eldk
3. 将~/local/bin和~/local/eldk/usr/bin加入PATH中

三. 将Hello4Skyeye从at91修改为s3c2410x
1. 修改源码
    begin.S中
    注释掉ldr sp, =irq_stack和irq_stack的定义,
    在.data段加入
    .globl string
    string:
        .ascii "helloworld"
    这里不使用堆栈,而使用全局数据段

    hello.c中
    加入声明 extern char string;
    hellostr赋值改为 char *hellostr = &string;
    修改端口地址为 long *paddr = (long *)0x50000020; 这是2410的UTXH0端口地址

    hello.lds中
    将入口地址改为
    . = 0x31000000;    我把它放到了BANK6的有效地址范围内,其实这个地址是任意的。

    makefile中
    注释掉arm-elf-objdump,arm-elf-readelf和arm-elf-nm
    将剩下所有的arm-elf改为arm-linux
    在LD下加入
    arm-linux-objcopy --gap-file=0xff -O binary hello hello.bin    生成没有elf头的执行文件
2. make
3. 试验一下
    skyeye.conf改为是用2410的配置
    cpu: arm920t
    mach: s3c2410x
    mem_bank: map=M, type=RW, addr=0x31000000, size=0x01000000, file=hello.bin, boot=yes
    mem_bank: map=I, type=RW, addr=0x48000000, size=0x20000000
    执行skyeye应该可以打印出很多helloworld
    或者使用如下配置
    cpu: arm920t
    mach: s3c2410x
    mem_bank: map=M, type=RW, addr=0x30000000, size=0x08000000
    mem_bank: map=I, type=RW, addr=0x48000000, size=0x20000000
    执行skyeye -e hello运行elf格式的执行文件,效果应该是相同的
    区别是前者使用skyeye的配置文件将RAW执行文件设置到0x31000000运行
    而后者由elf格式的文件信息将相应的段定位到正确的位置再运行

四. u-boot的编译
    参照hhq0216的文章修改u-boot-1.1.6/include/configs/smdk2410.h的flash设置相关部分
    然后make distclean; make smdk2410_config; make
    生成elf格式的u-boot和RAW的u-boot.bin

五. 试验修改的结果
1. 配置文件skyeye.conf
    cpu: arm920t
    mach: s3c2410x
    mem_bank: map=M, type=RW, addr=0x31000000, size=0x01000000, file=hello.bin
    mem_bank: map=M, type=RW, addr=0x33f00000, size=0x01000000, file=u-boot.bin, boot=yes
    mem_bank: map=I, type=RW, addr=0x48000000, size=0x20000000
2. 运行skyeye
    u-boot的信息完成后出现SMDK2410 #的提示符
    go 31000000就跳转到hello.bin定位的内存去运行,可以发现这一串串helloworld又冒出来了

结论.
    设计这个小实验的主要目的是把bootloader和后端要运行的执行程序结合起来。
    同时还能够接触到2410硬件寄存器的操作,虽然只是一个很简单的UART发送缓冲区寄存器。
    从结果来看,实验完全成功。

顶部
RogueBear
新手上路
Rank: 1



UID 192791
精华 0
积分 24
帖子 15
阅读权限 10
注册 2005-6-8
状态 离线
发表于 2007-8-20 16:59  资料  短消息  加为好友 
顶 ! 不过lz连接的两篇文章已经消失了...

顶部
beyondany
新手上路
Rank: 1



UID 244238
精华 0
积分 2
帖子 4
阅读权限 10
注册 2007-10-30
状态 离线
发表于 2007-11-2 16:46  资料  短消息  加为好友 
好贴!
按此方法  成功!

顶部
hover_sky
新手上路
Rank: 1



UID 243370
精华 0
积分 9
帖子 17
阅读权限 10
注册 2007-10-2
状态 离线
发表于 2007-12-28 23:50  资料  短消息  加为好友 

顶部
 


Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
清除 Cookies - 联系我们 - 中国Linux公社 - WAP