5406|6

85

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

U-Boot 1.1.6 基于S3C44B0的移植 [复制链接]

U-Boot 1.1.6 基于S3C44B0的移植


说明1:本文档基于hfrk 的ARM7 S3C44B0 开发板配置平台。
说明2:U-Boot 1.1.6 的移植,基于ARM7 S3C44B0的hfrk U-Boot 1.1.1能够正常工作的包裹提取适当文件合并至U-Boot 1.1.6中,并适当修改Makefile实现。

提供U-Boot 1.1.6 -MQ问题的解决方案。
提供U-Boot 1.1.6 的测试与修改方案。

欢迎阅读附件。

最新回复

最近正好用这方面的材料,谢谢分享  详情 回复 发表于 2010-6-18 15:56
点赞 关注

回复
举报

81

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
U-Boot 1.1.6 基于S3C44B0的移植
作者:zenf  E-Mail: zenf_zhao@163.com
版权所有:作者保留文档中的任何原创文字和原创图片的版权,任何转载或者商业用途必须获得作者的许可和授权。(2007 年 10 月)

说明1:本文档基于hfrk 的ARM7 S3C44B0 开发板配置平台。
说明2:U-Boot 1.1.6 的移植,基于ARM7 S3C44B0的hfrk U-Boot 1.1.1能够正常工作的包裹提取适当文件合并至U-Boot 1.1.6中,并适当修改Makefile实现。

目 录
1.1        U-Boot 添加新Board步骤        1
1.2        添加board 类型且适当修改目录内文件        2
1.3        修改cpu/s3c44b0目录文件 以及10M以太网芯片驱动        2
1.4        修改主Makefile文件 (解决-MQ问题)        3
1.5        编译和运行        5
1.6        基于RAM运行U-Boot烧写新U-Boot至FLASH的方法(危险)        10
1.7        附录1:hfrk的FLASH操作说明        11
1.8        附录2:u-boot 1.1.6 反汇编片断摘录        12


1.1        U-Boot 添加新Board步骤
本节内容摘录自u-boot 1.1.6的根目录README文件(可随意引用),作为添加新Board的基础。

细节内容参考附件


1.2        添加board 类型且适当修改目录内文件
拷贝U-Boot 1.1.1中board/hfrk 中所有内容至U-Boot 1.1.6的board/hfrk。其中包括两个目录board/hfrk/common 和 board/hfrk/hfrks3c44b0。

拷贝board/dave/B2/Makefile 至 board/hfrk/hfrks3c44b0/Makefile 覆盖原文件,同时修改覆盖后的Makefile如下:
原来Makefile Line 32/33 为
COBJS        := B2.o flash.o
SOBJS        := lowlevel_init.o
修改为:
COBJS        := hfrks3c44b0.o flash.o
SOBJS        := memsetup.o

拷贝U-Boot 1.1.1中include/configs/hfrks3c44b0.h 文件至U-Boot 1.1.6的include/configs/hfrks3c44b0.h。


1.3        修改cpu/s3c44b0目录文件 以及10M以太网芯片驱动
拷贝U-Boot 1.1.1 中 cpu/s3c44b0/serial.c 文件至 U-Boot 1.1.6中cpu/3c44b0/serial.c 覆盖,该拷贝过程修正serial.c中CONFIG_S3C44B0_CLOCK_SPEED == 60 的配置。或者可以基于源代码比较软件(如beyond compare)进行compare and merge修改操作。

修改start.S,主要改动如下:
(1)在112行左右找到 bl        lowlevel_init 代码,修改为        bl   memsetup。 该修改使用hfrk设计的内存初始化配置。

(2)在213行左右找到代码如下:
if CONFIG_S3C44B0_CLOCK_SPEED==66
        ldr        r0, =0x34031         /* 66MHz (Quartz=11MHz) */
#elif CONFIG_S3C44B0_CLOCK_SPEED==75
        ldr        r0, =0x610c1 /*B2: Xtal=20mhz Fclk=75MHz  */
#else
# error CONFIG_S3C44B0_CLOCK_SPEED undefined
#endif
修改为:(添加修改红色部分,使用CLOCK_SPEED==60配置)
#if CONFIG_S3C44B0_CLOCK_SPEED==60
        ldr        r0, =0x88042 /* 60MHz (Quartz=10MHz) */
#elif CONFIG_S3C44B0_CLOCK_SPEED==66
        ldr        r0, =0x34031         /* 66MHz (Quartz=11MHz) */
#elif CONFIG_S3C44B0_CLOCK_SPEED==75
        ldr        r0, =0x610c1 /*B2: Xtal=20mhz Fclk=75MHz  */
#else
# error CONFIG_S3C44B0_CLOCK_SPEED undefined
#endif

找到U-Boot 1.1.6 中drivers/rtl8019.c drivers/rtl8019.h两只文件,与U-Boot 1.1.1中的rtl8019.h, rtl8019.c比较后,修改为U-Boot 1.1.1中对rtl8019的`10 M以太网芯片进行16bit操作模式。

rtl8019.h 中主要修改地址偏移,如下:
#define        RTL8019_REG_00                    (RTL8019_BASE + (0x00 << 1))
#define         RTL8019_REG_01                        (RTL8019_BASE + (0x01 << 1))
#define         RTL8019_REG_02                        (RTL8019_BASE + (0x02 << 1))
#define         RTL8019_REG_03                        (RTL8019_BASE + (0x03 << 1))
#define         RTL8019_REG_04                        (RTL8019_BASE + (0x04 << 1))
#define         RTL8019_REG_05                        (RTL8019_BASE + (0x05 << 1))
#define         RTL8019_REG_06                        (RTL8019_BASE + (0x06 << 1))
#define         RTL8019_REG_07                        (RTL8019_BASE + (0x07 << 1))
#define         RTL8019_REG_08                        (RTL8019_BASE + (0x08 << 1))
#define         RTL8019_REG_09                        (RTL8019_BASE + (0x09 << 1))
#define         RTL8019_REG_0a                        (RTL8019_BASE + (0x0a << 1))
#define         RTL8019_REG_0b                        (RTL8019_BASE + (0x0b << 1))
#define         RTL8019_REG_0c                        (RTL8019_BASE + (0x0c << 1))
#define         RTL8019_REG_0d                        (RTL8019_BASE + (0x0d << 1))
#define         RTL8019_REG_0e                           (RTL8019_BASE + (0x0e << 1))
#define         RTL8019_REG_0f                        (RTL8019_BASE + (0x0f << 1))
#define         RTL8019_REG_10                        (RTL8019_BASE + (0x10 << 1))
#define         RTL8019_REG_1f                        (RTL8019_BASE + (0x1f << 1))

rtl8019.c中主要修改初始化两处寄存器配置:
put_reg (RTL8019_MULTIADDRESS0, 0x00);
put_reg (RTL8019_MULTIADDRESS1, 0x41);
put_reg (RTL8019_MULTIADDRESS2, 0x00);
put_reg (RTL8019_MULTIADDRESS3, 0x80);
put_reg (RTL8019_MULTIADDRESS4, 0x00);
put_reg (RTL8019_MULTIADDRESS5, 0x00);
put_reg (RTL8019_MULTIADDRESS6, 0x00);
put_reg (RTL8019_MULTIADDRESS7, 0x00);

1.4        修改主Makefile文件 (解决-MQ问题)
Makefile中添加hfrks3c44b0板卡,找到S3C44B0 Systems,在B2_config的板子后添加:
##########################################
## HFRK S3C44B0 Systems
###########################################
hfrks3c44b0_config        :        unconfig
        @$(MKCONFIG) $(@:_config=) arm s3c44b0 hfrks3c44b0 hfrk

修改Makefile的交叉编译工具前缀,找到ARCH arm的编译前缀,把arm-linux-修改为arm-elf-,如下:
ifeq ($(ARCH),arm)
#CROSS_COMPILE = arm-linux-
CROSS_COMPILE = arm-elf-
endif

以下的修改为解决Makefile中-MQ编译控制问题,由于笔者使用的arm-elf-gcc编译器基于hfrk的老版本,对-MQ的控制选项有些兼容问题,由于笔者能力有限,采用对Makefile以及config.mk中的内容进行适当修改以保证编译通过。(后续笔者找到更简单Makefile方案将更新本文档)

细节内容参考附件




1.6        基于RAM运行U-Boot烧写新U-Boot至FLASH的方法(危险)
采用JTAG可以烧写U-Boot至FLASH,需要启用JTAG、并行端口 以及 ADS工程等。

笔者养家糊口工作中,所有设备板卡Boot内容的烧写除出厂时第一次采用flash编程器烧写,后续的烧写全部采用软件自动升级方式。(笔者后续计划将给u-boot增加自动u-boot升级功能)

基于hfrk的U-Boot 操作FLASH的指令以及相关说明,我们可以基于U-Boot自动把新的U-Boot写入FLASH中。

首先基于flash中的U-Boot启动后,按任意键进入script模式,运行tftp 命令,把新编译的u-boot.bin加载至RAM内存0xc008000地址空间。如1.5中的加载过程,文件长度为143684, 0x23144/4 + 2 = 0x8C54。

其次采用erase命令擦除flash的u-boot存放区域,命令:
erase 0x00 0x3FFFF

最后采用cp命令,把RAM内存中的新u-boot写入FLASH:
cp 0x000 0xc008000 0x8c54

说明1:由于采用此方式升级新u-boot过程比较专业,并且过程中很有可能有异常情况,如果不非常熟练建议不要使用该方法。由于该方法升级u-boot方式造成使用者相关问题后果自负。

说明2:由于升级FLASH的u-boot失败,会造成系统无法启动,建议读者基于tftp加载新编译的u-boot能够正常使用后(如类似笔者1.5中的测试过程通过),再进行升级。


1.7        附录1:hfrk的FLASH操作说明



细节内容参考附件


1.8        附录2:u-boot 1.1.6 反汇编片断摘录
细节内容参考附件
u-boot:     file format elf32-littlearm

Disassembly of section .text:

0c700000 <_start>:
c700000:        ea00000a         b        c700030
c700004:        e28ff303         add        pc, pc, #201326592        ; 0xc000000
c700008:        e28ff303         add        pc, pc, #201326592        ; 0xc000000
c70000c:        e28ff303         add        pc, pc, #201326592        ; 0xc000000
c700010:        e28ff303         add        pc, pc, #201326592        ; 0xc000000
c700014:        e28ff303         add        pc, pc, #201326592        ; 0xc000000
c700018:        e28ff303         add        pc, pc, #201326592        ; 0xc000000
c70001c:        e28ff303         add        pc, pc, #201326592        ; 0xc000000

0c700020 <_TEXT_BASE>:
c700020:        0c700000         ldceql        0, cr0, [r0]

0c700024 <_armboot_start>:
c700024:        0c700000         ldceql        0, cr0, [r0]

0c700028 <_bss_start>:
c700028:        0c72314c         ldfeqe        f3, [r2], -#304

0c70002c <_bss_end>:
c70002c:        0c757ec8         ldceql        14, cr7, [r5], -#800

0c700030 :
c700030:        e10f0000         mrs        r0, CPSR
c700034:        e3c0001f         bic        r0, r0, #31        ; 0x1f
c700038:        e3800013         orr        r0, r0, #19        ; 0x13
c70003c:        e129f000         msr        CPSR_fc, r0
c700040:        eb00001a         bl        c7000b0
c700044:        eb000056         bl        c7001a4



 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
很好,沙发
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
很好,沙发
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

5
 
请问你的附件在哪儿啊
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

6
 
谢谢分享,
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 
最近正好用这方面的材料,谢谢分享
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表