Redboot修改實例
l) write (16'h00Fb, 16'h4444);
m) write (16'h00Fc, 16'h3333);
n) write (16'h00Fd, 16'h2222);
o) write (16'h00Fe, 16'h1111);
p) write (16'h00Ff, 16'h0000);
以上16條命令將16個16bit的數據分別存入cpu_buffer的地址0xF0~0xFF。
q) write (16'hf002, 16'h3c3f);
r) write (16'hf001, 16'hffff);
以上兩條命令將CPU_BUFFER_OFFSET設為0xF0,將SDRAM_ADDR (SDRAM_ADDR_H, SDRAM_ADDR_L)設置為0x3FFFFF。
s) write (16'hf000, 16'h0073);
將CPU_BURST_LENGTH設置為7(實際寫入為8),CPU_RW為“1”表示當前操作為寫SDRAM,ACT為“1”表示立即啟動當前操作。
t) read (16'hf000);
讀取CONTROL_REG的數值,當ACT為“0”時,表示之前存入cpu_buffer 0xF0~0xFF的16個16bit的數據,已經被寫入SDRAM中起始地址為“0x3FFFFF”的連續的8個地址中(SDRAM的數據寬度為32bit)。
main.c的修改
這一部分的修改主要目的是為了提供三條控制臺命令“autoconfig”“update”“autoexec”。
增加命令
RedBoot_cmd(autoconfig,
autoconfig
,
do_autoconfig);
RedBoot_cmd(update
update,
,
do_update);
RedBoot_cmd(autoexec,
autoExec,
,
do_autoexec);
增加函數:
void do_autoconfig(int argc, char *argv[])
void do_update(int argc, char *argv[])
void do_autoexec(int argc, char *argv[])
增加全局變量
configFlag
updateFlag
execFlag
函數do_autoconfig()的主要內容
1. 設置configFlag為True
2. 調用fconfig –i
3. set Run script. at boot is false
4. set Use BOOTP for network configuration: false
5. set Gateway IP address
6. set Local IP address
7. set Local IP address mask
8. Default server IP address
9. set DNS server IP address
10. eth0 network hardware address
11. set GDB connection port
12. 設置configFlag為Flash
函數do_update()的主要內容
1. 設置updateFlag為True
2. 調用fconfig -i
3. 初始化Flash
4. 更新zimage 到 /dev/mtdblock2
5. 更新root 到 /dev/mtdblock2
6. 更新usr 到 /dev/mtdblock2
7. 更新config 到 /dev/mtdblock2
8. 更新chip 到 /dev/mtdblock2
9. 更新logo 到 /dev/mtdblock2
10. 設置updateFlag為Flash
函數do_autoexec()的主要內容
1. 設置execFlag為True
2. 調用fconfig -i
3. set Run script. at boot is true
4. set Use BOOTP for network configuration: false
5. set Gateway IP address
6. set Local IP address
7. set Local IP address mask
8. Default server IP address
9. set DNS server IP address
10. eth0 network hardware address
11. set GDB connection port
12. 設置execFlag為Flash
完成以上工作后,再對flash.c,io.c進行相關修改便可生成redboot可執行文件。注意,編譯Redboot代碼時最好使用arm-elf-gcc。
評論