1、 利用ppcboot更新ppcboot
a、 显示lash信息:SMDK2410# flinfo
b、 去除第一个扇区的保护:SMDK2410# protect off 1:0
c、 通过TFTP下载ppcboot.bin:SMDK2410# tftp 30008000 pccboot.bin
d、 烧写ppcboot:SMDK2410# fl 0 30008000 2000
e、 重新启动:SMDK2410# reset
2、 利用JTAG烧写ppcboot
a、 硬件连接
b、 生成SJF2410烧写程序:主要解决编译版本不一致问题
i. 将/usr/src/linux-headers-2.6.22-14/include/linux/io.h
/usr/src/linux-headers-2.6.22-14/include/linux/string.h
/usr/src/linux-headers-2.6.22-14/include/linux/compiler.h
三个文件拷贝到/HHARM2410-R3/SJF/中
ii. 修改SJF/ppt.h文件:
将此句#include <asm/io.h>
修改为#include "io.h"
iii. 修改SJF/io.h文件
将#include <linux/string.h>
#include <linux/compiler.h>
修改为:
#include "string.h"
#include "compiler.h"
iv. 修改Makefile文件
将cp SJF2410 ../image/
修改为:cp SJF2410 /tftpboot/
v. make all
c、 查询FLASH芯片的类型:
SMDK2410 # flinfo
d、 进入/tftpboot/目录,在linux的shell提示符下,键入以下命令:
sudo ./SJF2410 /f:ppcboot.bin
出现提示:
+------------------------------------+
| SEC JTAG FLASH(SJF) v 0.3 |
| (S3C2410X & SMDK2410 B/D) |
+------------------------------------+
Usage: SJF /f:<filename> /d=<delay>
ERROR: No CPU is detected(ID=0xffffffff). 说明连接CPU是否正常
[SJF Main Menu]
0:K9S1208 program 1:28F128J3A program 2:Memory Rd/Wr 3:Exit
Select the function to test:
选择与FLASH类型相符的数字:如1,出现提示:
[28F128J3A Flash JTAG Programmer]
*** Very Important Notes ***
1. 28F128J3A must be located at 0x08000000.
J6 : connect 2-3 pins, J9 : connect 1-2 pins
J33 : Open, J34 : Short
2. After programming, 28F128J3A may be located at 0x0.
J6 : connect 1-2 pins, J9 : connect 2-3 pins
J33 : Short, J34 : Open
Source size = 152c0h
Available Target Offset Address:
0x0,0x20000,0x40000, ..., 0x1ce0000
Input target address offset [0x?] :
键入0,即烧写到0x0位置
烧写时间大约十分钟!无异常情况,则说明烧写正常!
e、由于PPCBOOT启动后,就会对PPCBOOT所占的扇区进行保护,若要通过JTAG 烧写,就需要对PPCBOOT接触保护才行!如果系统崩溃无法引导,则可以直接烧写!
以下是针对28F128J3A类型的FLAH烧写所做的修改
a、 修改include\configs\smdk2410.h
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 192.168.110.222
#define CONFIG_SERVERIP 192.168.110.88
#define CONFIG_GATEWAYIP 192.168.110.1
#define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */
#define PHYS_FLASH_SIZE 0x01000000 /* 16 MB */
#define CFG_FLASH_PROTECTION
#define CFG_FLASH_BASE PHYS_FLASH_1
#define CFG_MONITOR_BASE PHYS_FLASH_1
#define CFG_MAX_FLASH_BANKS 1/* max number of memory banks */
#define CFG_MAX_FLASH_SECT 128/* max number of sectors on one chip */
#define CFG_FLASH_ERASE_TOUT (2*CFG_HZ) /* Timeout for Flash Erase */
#define CFG_FLASH_WRITE_TOUT (2*CFG_HZ) /* Timeout for Flash Write */
#define CFG_ENV_IS_IN_FLASH 1
#define CFG_ENV_ADDR (PHYS_FLASH_1 + 0x20000) /*Address of Environment Sector */
#define CFG_ENV_SIZE 0x20000 /* Total Size of Environment Sector */
b、 使用u-boot-1.1.6\u-boot-1.1.6\board\cmi\flash.c修改其中内容:
删掉:#include <mpc5xx.h>
增加:#define FLASH_BASE0_PRELIM CFG_FLASH_BASE
#define CFG_MONITOR_BASE PHYS_FLASH_1
将monitor_flash_len换为CFG_ENV_SIZE
c、 修改\board\smdk2410\flash.c:
#define FLASH_BLOCK_SIZE 0x00020000
以下为华恒PPCBOOT中的BUG,非移植而做的更改
d、 修改include\flash_file.h
原因:使用fl烧写时出现:“out of bound”提示
原来为:
#define ARM2410_FLASH_BASE 0x1000000
更改为:
#define ARM2410_FLASH_BASE 0x00000000
e、修改\common\cmd_mem.c的
原因:原来的ppcboot在执行完fl命令后无法执行reset命令
更改第814、845、854行的
*(volatile unsigned short *)(0x10000000)=0xff;
应该改为
*(volatile unsigned short *)(0xARM2410_FLASH_BASE)=0xff;