Redboot修改實(shí)例
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個(gè)16bit的數(shù)據(jù)分別存入cpu_buffer的地址0xF0~0xFF。
q) write (16'hf002, 16'h3c3f);
r) write (16'hf001, 16'hffff);
以上兩條命令將CPU_BUFFER_OFFSET設(shè)為0xF0,將SDRAM_ADDR (SDRAM_ADDR_H, SDRAM_ADDR_L)設(shè)置為0x3FFFFF。
s) write (16'hf000, 16'h0073);
將CPU_BURST_LENGTH設(shè)置為7(實(shí)際寫入為8),CPU_RW為“1”表示當(dāng)前操作為寫SDRAM,ACT為“1”表示立即啟動(dòng)當(dāng)前操作。
t) read (16'hf000);
讀取CONTROL_REG的數(shù)值,當(dāng)ACT為“0”時(shí),表示之前存入cpu_buffer 0xF0~0xFF的16個(gè)16bit的數(shù)據(jù),已經(jīng)被寫入SDRAM中起始地址為“0x3FFFFF”的連續(xù)的8個(gè)地址中(SDRAM的數(shù)據(jù)寬度為32bit)。
main.c的修改
這一部分的修改主要目的是為了提供三條控制臺(tái)命令“autoconfig”“update”“autoexec”。
增加命令
RedBoot_cmd(autoconfig,
autoconfig
,
do_autoconfig);
RedBoot_cmd(update
update,
,
do_update);
RedBoot_cmd(autoexec,
autoExec,
,
do_autoexec);
增加函數(shù):
void do_autoconfig(int argc, char *argv[])
void do_update(int argc, char *argv[])
void do_autoexec(int argc, char *argv[])
增加全局變量
configFlag
updateFlag
execFlag
函數(shù)do_autoconfig()的主要內(nèi)容
1. 設(shè)置configFlag為True
2. 調(diào)用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. 設(shè)置configFlag為Flash
函數(shù)do_update()的主要內(nèi)容
1. 設(shè)置updateFlag為True
2. 調(diào)用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. 設(shè)置updateFlag為Flash
函數(shù)do_autoexec()的主要內(nèi)容
1. 設(shè)置execFlag為True
2. 調(diào)用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. 設(shè)置execFlag為Flash
完成以上工作后,再對(duì)flash.c,io.c進(jìn)行相關(guān)修改便可生成redboot可執(zhí)行文件。注意,編譯Redboot代碼時(shí)最好使用arm-elf-gcc。
評(píng)論