H9200M的现有系统升级过程

 

开发板H9200M简介

FLSH: 4M (2M×16)  ->固化Linux内核	0x1000_0000-0x103_FFFF 
SDRAM: 32M (2×8M×16位) 0x2000_0000-0x21FF_FFFF
NAND Flash: 64M ->存放数据
JP100: 1-2短接,从flash启动,启动Flash中固化的程序。
2-3短接,从片内ROM启动,启动片内ROM中的程序。
[ 编辑]

主要地址资源分配

[ 编辑]

使用厂商提供的低级初始化模块的资源分配

资源名字 接口方式 内存分布 备注
SDRAM NCS1 20000000-21FFFFFF 32M
FLASH NCS0 10000000-103FFFFF 4M
10000000-10005FFF boot.bin
10010000-1001FFFF Uboot.gz
10020000-1015FFFF uImage
10160000-102FFFFF ramdisk
103F0000-103FFFFF 环境变量的存放地点
[ 编辑]

完全使用U-boot来做bootloader的资源分配

资源名字 接口方式 内存分布 备注
SDRAM NCS1 20000000-21FFFFFF 32M
FLASH NCS0 10000000-103FFFFF 4M
10000000-1001FFFF u-boot.bin
10020000-1015FFFF uImage
10160000-102FFFFF ramdisk
103F0000-103FFFFF 环境变量的存放地点
[ 编辑]

移植u-boot到目标板

[ 编辑]

U-Boot主要目录结构

board 目标板相关文件,比如Makefile和u-boot.lds等都和具体的开发板的硬件和地址分配有关;
common 独立于处理器体系结构的通用代码,与体系结构无关的文件。实现各种命令的C文件,如内存大小探测与故障检测;
cpu 与处理器相关的文件。如mpc8xx子目录下含串口、网口、LCD驱动及中断初始化等文件;
disk disk驱动的分区处理代码
driver 通用设备驱动,如CFI FLASH驱动(目前对INTEL FLASH支持较好)
doc U-Boot的说明文档;
examples可在U-Boot下运行的示例程序;如hello_world.c,timer.c;
include U-Boot头文件;尤其configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件;
lib_xxx 处理器体系相关的文件,如lib_ppc, lib_arm目录分别包含与PowerPC、ARM体系结构相关的文件;
net 与网络功能相关的文件目录,如bootp,nfs,tftp;
post 上电自检文件目录。尚有待于进一步完善;
rtc RTC驱动程序;
tools 用于创建U-Boot S-RECORD和BIN镜像文件的工具;
[ 编辑]
u-boot1.1.6+boot.bin移植方法
1、增加目标平台到./board/下(此步骤可选,主要为了不影响源码)

    因为我们当前平台h9200m用的是at91rm9200 CPU,因此我们找最接近的已有平台来简化移植过程,进入board目录下,以原有at91rm9200dk为模板,拷贝at91rm9200dk为我们 的h9200m目录,进入目录h9200m,将at91rm9200dk.c更名为h9200m.c,再编辑当前目录下的Makefile,编辑并搜索 at91rm9200,在28行会找到at91rm9200dk.o,将其改为h9200m.o;目录中config.mk是用来记录U-boot复制到 内存的基址,flash.c用来配置Flash,u-boot.lds是内核链接器的脚本文件。 命令:

cd u-boot-1.1.6/board
cp at91rm9200dk/ h9200m –R
cd h9200m
mv at91rm9200dk.c h9200m.c
vi Makefile
/at91rm9200 (u-boot 1.1.6版本中在第28行)
修改at91rm9200dk为h9200m
2、进入./include/configs下

    以at91rm9200dk.h为模板,生成h9200m.h;在这里的文件都是和硬件系统配置息息相关,它需记录新平台的所有配置参数。 命令:

cd u-boot-1.1.6/include/configs
cp at91rm9200dk.h h9200m.h
3、修改Makefile以及

    编辑源码根目录下的Makefile,搜索at91rm9200,1.1.6版本在1766行,在1768行插入配置代码,编辑源码目录下 的MAKEALL,搜索at91rm9200,1.1.6版本在190行,在at91rm9200dk后加入h9200m即可。
命令:

vi u-boot-1.1.6/Makefile
/at91rm9200
输入:
h9200m_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t h9200m NULL at91rm9200
vi u-boot-1.1.6/MAKEALL
/AT91RM9200 (1.1.6版本是在第190行)
(插入h9200m,插入后如下:)
At91rm9200dk h9200m cmc_pu2 /
4、根据具体的硬件配置,修改参数

    因为在at91rm9200引导时,厂商提供了前期初始化的boot.bin,它主要作了部分的硬件初始化,替代U-boot的 stage1部分,所以在U-boot中就应该去掉这部分功能,不然会导致重复配置,使U-boot在初始配置时当掉,因此我们要修改. /include/configs/h9200m.h,添加#define CONFIG_SKIP_LOWLEVEL_INIT 1(我们默认添在第40行),使U-boot跳过低级初始化过程;我们使用的开发板的nor flash是4M的,因此我们搜索PHYS_FLASH_SIZE,复制这行,并将上面的原始一行注释掉,将下面的0x200000改为 0x400000,在163行。 命令:

vi u-boot-1.1.6/include/configs/h9200m.h
 :40
添加#define CONFIG_SKIP_LOWLEVEL_INIT 1
 :161 或 /PHYS_FLASH_SIZE
修改0x200000改为0x400000
 :164 或 /CFG_MAX_FLASH_SECT
修改256改为71
 :200 或 /CFG_PROMPT
修改Uboot>改为H9200M>
注释掉188~192行、196
/* #ifdef CONFIG_SKIP_LOWLEVEL_INIT
... ...
#else */
... ...
/*#endif*/ /* CONFIG_SKIP_LOWLEVEL_INIT */
注释掉176~179行、182行
/* #ifdef CONFIG_SKIP_LOWLEVEL_INIT
... ...
/*#endif*/ /* CONFIG_SKIP_LOWLEVEL_INIT */
... ...
修改180,181两行为
#define CFG_ENV_ADDR (PHYS_FLASH_1 + 0x103f000) /* end flash */
#define CFG_ENV_SIZE 0x10000 /* 64K */
5、下面我们要进行针对板子的具体化设置

编辑./board/h9200m/h9200m.c,跳转到第50行,

将gd->bd->bi_arch_number = MACH_TYPE_AT91RM9200;
修改为gd->bd->bi_arch_number = MACH_TYPE_H9200M;

再编辑./include/asm-arm/mach-types.h,跳转到第740行,添加硬件设备的ID号,我们在这里使用1888作为h9200m的设备号

#define MACH_TYPE_H9200M                1888

这样我们的开发板就有自己的设备号了,不过kernel是不成认的,如果你想让全世界人都承认,你还要到www.kernel.com去申请你的设备,这样一来所有内核源码中都会有这一段代码了;上面的做法仅用来测试使用。 (至此一个可以启动的U-boot就已经完成了)

[ 编辑]

从裸板开始,假设flash中没有内容,从新载入uboot

a.PC宿主机设置

在windows下,打开超级终端,设置串口为115200 8N1 无流控

b.JP100设置为2-3短接,从片内rom启动,启动片内ROM中的程序。上电,复位,超级终端下出现”CCCCCCC”
c.用Xmodem协议发送loader.bin,发完继续出现”CCCCCC”
d.再用Xmodem协议发送u-boot.bin,发完显示>U-Boot>提示符
e.擦除FLASH:
>protect off all
>erase all

上述两步擦除FLASH中所有内容,若只擦除uboot所占部分,则

>protect off 10000000 1001FFFF
>erasse 10000000 1001FFFF
>protect on 10000000 1001FFFF

或(待证实)

>protect off 1:0-1
>erase 1:0-1
>protect on 1:0-1
f.装入boot.bin
>loadb 20000000  (能过串口线(Kermit mode)来装载二进制文件)

在超级终端下,用kermit模式发送boot.bin

>cp.b 20000000 10000000 5ffff
g.装入u-boot.gz
>loadb 20000000

用kermit模式发送u-boot.gz

>cp.b 20000000 10010000 ffff
>protect on 10000000 1001ffff (FLASH区域保护)
h.JP100设置为1-2短接,从flash启动,启动Flash中固化的程序。
[ 编辑]

环境变量设置

a.网络参数设置
>setenv ethaddr 12:34:56:78:99:aa      ;MAC地址
>setenv ipaddr IP地址(192.168.0.139) ;目标板IP
>setenv serverip 服务器地址(192.168.0.123) ;服务器IP
>setenv bootdelay 5  ;延时
>saveenv  ;保存
b.系统自动运行

注意:这里设置为络服务器启动模式,用网线从主机上下载内核和文件系统到SDRAM中,每次掉电后都要重新开始。

>setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360
consloe=ttyS0,115200 mem=32M
>saveenv

initrd指定根文件系统的位置

>setenv bootcmd tftp 21000000 uimage/; tftp 21100000 ramdisk.gz/; bootm 21000000
>saveenv

    设定自动启动脚本,先用tftp下载内核镜象到21000000 ,然后下载文件系统到21100000,再从内核镜象地址21000000启动

注意:必须确保主机上启动了tftp服务,在根目录上有tftpboot目录。可用rpm –q tftp查看是否安装了tftp,若没有的话,则需要安装。在服务配置里选定tftp服务,开始。设置开机时自动启动tftp服务。执行ntsysv命 令,然后选择需要开机自动启动的服务,nfs,tftp等,以空格选择。

在linux下的终端执行minicom,则启动串口终端,可以用minicom –s设置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值