<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > uboot移植到S3C44B0X開(kāi)發(fā)板的經(jīng)歷

uboot移植到S3C44B0X開(kāi)發(fā)板的經(jīng)歷

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò ) 收藏
(1) 事情來(lái)由

幾個(gè)月前從朋友那里拿到了一塊參考Micetek EV44b0-II開(kāi)發(fā)板設計的板子,對其bootloader MBL感覺(jué)很不錯. 朋友說(shuō)可能是移植 u-boot的.但Micetek并沒(méi)有提供MBL的源代碼, 因此當時(shí)沒(méi)有仔細去研究. 最近公司準備想做基于S3C44B0X CPU的產(chǎn)品,因此購買(mǎi)了杭州立宇泰公司()的armsys-c及armsys-b開(kāi)發(fā)板和.armsys提供的 bootloader 是其公司自己開(kāi)發(fā)的bootloader,覺(jué)得其USB這一塊做的還可以,但利用USB下載調試uclinux是非常麻煩的,操作很不爽,其 bootloader也不提供網(wǎng)絡(luò )下載調試.因此自己計劃移植u-boot.

本文引用地址:http://dyxdggzs.com/article/201611/316621.htm

(2) 開(kāi)始
由于沒(méi)有接觸過(guò)u-boot,因此第一步要做的就是google一些資料.
u-boot官方網(wǎng)站:http://sourceforge.net/projects/u-boot(比較慢)
http://u-boot.sourceforge.net/這個(gè)快一些.

DENX U-Boot及Linux使用手冊: http://coosign.blogchina.com/coosign/1318487.html, 這是一遍翻譯的文檔.主要介紹了u-boot編譯及使用的命令.但沒(méi)有涉及新板子的移植流程.

到board目錄查了一下:
#cd u-boot
#cd board
#find . -exec grep -l 44B0 {} ;
結果是:
./dave/B2/B2.c
B2網(wǎng)站是: ,初初看了B2開(kāi)發(fā)板的介紹,但不詳細.包括使用的網(wǎng)絡(luò )芯片等都沒(méi)有介紹.

google "u-boot 移植"后查到一篇文章:
"收集了一些關(guān)于U-BOOT的文章"
http://www.bloghome.cn/index.php?op=ViewArticle&articleId=2111&blogId=390

里面搜集了不少關(guān)于u-boot移植的問(wèn)題.
里面介紹了"U-Boot 在44B0X 開(kāi)發(fā)板上的移植以及代碼分析"的內容,仔細看了看.發(fā)現其移植的版本比較低,但對了解u-boot結構是滿(mǎn)不錯的,因為這個(gè)版本不支持44B0X,因此完全是支持新CPU的移植.了解到 make XX_config是在Makefile中定義的.
另外"MPC8xx的U-Boot移植體會(huì )(ZT) "這一篇對u-boot介紹滿(mǎn)詳細的.但對移植工作只做了理論性和經(jīng)驗性介紹,沒(méi)有具體的操作步驟.

"基于A(yíng)tmel at91rm9200的armlinux的bootloader啟動(dòng)代碼分析 "
http://www.linuxfans.org/nuke/modules.php?name=News&file=print&sid=2765
里面介紹了u-boot移植到at91rm9200上的情況,可以參考一下.

另外就是仔細閱讀u-boot下的README文件.

(3) 編譯一把
看了相關(guān)的資料,心動(dòng)不如行動(dòng).先編譯一把看看情況.既然只有B2開(kāi)發(fā)板是S3C44B0X CPU的,因此先編譯一下B2開(kāi)發(fā)板看看. 具體:
#cd u-boot
#make B2_config
#make
結果順利,成功編譯.

(4) 開(kāi)始動(dòng)手移植
我以B2板子的程序做為模板來(lái)做.
#cd board
#cp -r dave wx (自己取個(gè)公司名wx)
#cd wx
#mv B2 wx20 (自己取個(gè)板子名wx20)
#cd wx20
# mv B2.c wx20.c
修改Makefile及wx20.c, 主要是B2改成wx20.

增加配置文件:
#cd include/configs
#cp B2.h wx20.h
修改Makefile配置文件,增加wx20_config.
1432 wx20_config : unconfig
1433 @./mkconfig $(@:_config=) arm s3c44b0 wx20 wx
[注:前面的數字是文件行號,以下一樣].
將board/wx目錄下和wx20.h文件中的B2改成wx20或WX20.

這里其實(shí)是最重要的步驟,就是根據硬件的情況來(lái)修改相關(guān)的參數.由于對硬件板子的情況不是太了解,因此此時(shí)最需要的就是耐心地看看硬件資料.主要修改的地方有:
include/configs/wx20.h ---- 配置文件,大部分參數是這里配置的.
board/wx/wx20/lowlevel_init.S -- 內存參數配置
cpu/s3c44b0/serial.c -- 串口配置
cpu/s3c44b0/start.S -- 程序入口

如果此時(shí)配置全部正確了,那么我們就簡(jiǎn)單的很了.(如果你用我的patch的話(huà),就是如此了!)那么我也就不會(huì )仔細再去研究u-boot其他部分了. 困難就是你學(xué)習的最好機會(huì )!

(5) 開(kāi)始編譯
經(jīng)過(guò)簡(jiǎn)單的參數修改,編譯成功.然后下載u-boot.bin(二進(jìn)制格式). 此時(shí)你可以用nm看一下u-boot(elf格式)的內容,會(huì )有所收獲的.

然后用armsys的bootloader將u-boot.bin調入到內存0xc100000運行.結果可想而知,串口沒(méi)有任何顯示,而且死機.bootloader也必須斷電重起.

(6) u-boot流程
原因是比較明顯的,就是參數和硬件沒(méi)有符合.因此接下來(lái)做的事情就是仔細閱讀S3C44B0 CPU的硬件資料,包括內存配置,串口配置這些.我覺(jué)得要讓串口出信息,最主要的就是CPU的初始化,內存配置和串口配置.另外就是了解u-boot程序運行流程,這個(gè)對了解需要設置的參數是非常有幫助的.我這里大致說(shuō)一下u-boot運行流程.

入口: cpu/s3c44b0/start.S
主要是CPU初始化( cpu_init_crit 200), 調內存配置函數( lowlevel_init 200), 然后判斷u-boot是否從flash運行,如果是就把u-boot代碼拷貝到TEXT_BASE定義的地方.然后轉到 start_armboot.

start_armboot: lib_arm/board.c
進(jìn)行各種初始化設置,主要有:
cpu_init CPU相關(guān)的設置, 具體在./cpu/s3c44b0/cpu.c中.
board_init 板子相關(guān)的設置, 具體在board/wx/wx20/wx20.c 中
interrupt_init中斷設置,我們沒(méi)有用,具體在./cpu/s3c44b0/interrupts.c中
env_init 初始化環(huán)境變量, 具體要看用什么介質(zhì)來(lái)存儲環(huán)境變量,如果用flash來(lái)存貯, 程序在common/env_flash.c中.
init_baudrate 設置baud參數
serial_init 串口初始化, 具體在cpu/s3c44b0/serial.c.
console_init_f 控制臺設置, 具體在./common/console.c

display_banner 顯示標題.
dram_init 可用內存配置, 具體在./board/wx/wx20/wx20.c.
flash_init flash初始化,具體./drivers/cfi_flash.c.

接下來(lái)就是環(huán)境變量初始化, 網(wǎng)絡(luò )初始化,最后到main_loop,可以運行各種命令.


(7) 主要參數修改
經(jīng)過(guò)一段時(shí)間調試,終于串口出東西了,這段時(shí)間犯了一個(gè)小錯誤,走了一段冤枉路.其實(shí)配置參數可能早已正確,但串口老是亂碼,原因是自己的u-boot.bin傳下來(lái)時(shí)目錄搞錯了,結果老是運行錯誤的u-boot.bin.這段時(shí)間里主要改的參數有:

include/configs/wx20.h:
#define CONFIG_S3C44B0_CLOCK_SPEED 64
CPU主頻,armsys板的是64M
#define PHYS_SDRAM_1 0x0c000000 /* SDRAM Bank #1 */
B2板子里的定義是錯誤的.還有RAM大小,flash大小需要修改,跟B2板不同.

#define CONFIG_DRIVER_RTL8019
#define RTL8019_BASE 0x08000000
配置rtl8019AS網(wǎng)絡(luò )芯片.

#define CFG_LOAD_ADDR 0x0c008000 /* default load address */
uclinux運行入口地址

lowlevel_init.S:
MEMORY_CONFIG:
.long 0x11010102
.long 0x600
.long 0x7ffc
.long 0x7ffc
.long 0x7ffc
.long 0x7ffc
.long 0x2610
.long 0x18000
.long 0x18000
.long 0x960459
.long 0x10
.long 0x20
.long 0x20
由于對armsys硬件不是太了解,沒(méi)有辦法,只得看armsys bootloader程序,但每個(gè)版本又有差別.因此是用AXD調試看bootlaoder啟動(dòng)后0x1c80000中的值定的.

cpu/s3c44b0/serial.c:
#elif CONFIG_S3C44B0_CLOCK_SPEED==64
divisor = 34;
串口設置,這個(gè)也是根據bootloader里的公式計算出來(lái)的.這里只定義了115200得值,其他沒(méi)有去設置.

cpu/s3c44b0/start.S:
ldr r1, =PLLCON

#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 */
#elif CONFIG_S3C44B0_CLOCK_SPEED==64
ldr r0, =((M_DIV<<12)+(P_DIV<<4)+S_DIV) //Fin=8MHz,Fout=64MHz
#else
# error CONFIG_S3C44B0_CLOCK_SPEED undefined
#endif
PLLCON的值,也是根據bootlaoder的公式.

board/wx/wx20/wx20.c
主要是PORT配置,具體我不知道有沒(méi)有影響.


(8) 關(guān)于u-boot入口的疑問(wèn)
由于開(kāi)始串口沒(méi)有出內容,因此對u-boot入口產(chǎn)生懷疑.在網(wǎng)上也找到一個(gè)帖子,碰到同樣疑問(wèn)的人:
http://www.linuxforum.net/forum/showflat.php?Cat=&Board=embedded&Number=563322&page=0&view=collapsed&sb=5&o=0&fpart=

"鏈接得到的起始地址為什么是TEXT_BASE,而不是0呢,所以現在只能夠下載到ram中運行,但是無(wú)法燒寫(xiě)道flash中跑,這是怎么回事呢?u-boot中應該是start.S中的這段代碼在flash中運行吧,后面就把自身拷貝到ram中TEXT_BASE地址處,為什么在鏈接文件中指定的_start的起始地址為0x00000000呢? "

后來(lái)我理解了:
“鏈接得到的起始地址為什么是TEXT_BASE,而不是0呢,”
因為u_boot如果從flash運行的話(huà),那么它會(huì )將自己的代碼拷貝到RAM中,然后運行。u-boot開(kāi)始部分代碼與編譯的入口沒(méi)有關(guān)系,而主要的代碼是在RAM中運行,因此編譯的入口地址是TEXT_BASE.因此u-boot既可以flash運行,也可以ram運行。

“為什么在鏈接文件中指定的_start的起始地址為0x00000000呢?”
lds文件中的起始地址為0x00000000是不起作用的,由-TTEXT_BASE參數替代的。

剛開(kāi)始比較疑惑的原因是對:
126 relocate: /* relocate U-Boot to RAM */
127 adr r0, _start /* r0 <- current position of code */
adr這條指令沒(méi)有理解正確,因為把它想成mv r0,_start了,實(shí)際上adr這里的_start是相對的,如果從flash運行的話(huà),r0就是0, 如果從ram運行的話(huà),r0就是C100000。

(9) u-boot顯示信息
經(jīng)過(guò)上面的努力,我們終于可以看到u-boot的廬山真面目了.當然這還不是最終的結果.但至少離勝利不遠了.現在我們可以用printf來(lái)調試了.此時(shí)全部是通過(guò)armsys bootloader下載u-boot.bin到0xc100000運行.

現在顯示信息是:
Plese wait a moment to start running...i am samfei!
iamsam!


U-Boot 1.1.3 (Jul 1 2005 - 13:46:03)

U-Boot code: 0C100000 -> 0C11A73C BSS: -> 0C11ECF4
RAM Configuration:
Bank #0: 0c000000 8 MB
[flash_get_size, 224] Entering ...
[flash_get_size, 232] value=bf
[flash_get_size, 255] value=234b
Flash: 2 MB
*** Warning - bad CRC, using default environment

In: serial
Out: serial
Err: serial
MAC: 26:26:26:26:26:26
Hit any key to stop autoboot: 0
=>

(10) 希望環(huán)境變量存貯到flash
B2板缺省的定義是把環(huán)境變量存貯到EEPROM上,雖然armsys上也有,但我也搞不清楚它的硬件配置,因此希望把環(huán)境變量存貯到flash上.

增加配置: include/configs/wx20.h (從evb4510.h中學(xué)來(lái)?。?br />79 #define CONFIG_COMMANDS ( CONFIG_CMD_DFL |
80 CFG_CMD_DATE |
81 CFG_CMD_ELF |
82 CFG_CMD_NET |
83 CFG_CMD_ENV|CFG_CMD_FLASH 200)this.width=200>screen.width/2)this.style.width=screen.width/2;" border=0>
173 #define CFG_ENV_IS_IN_FLASH
174 #undef CFG_ENV_IS_NOWHERE
175
176 #define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x20000) /* environment start address */
177 #define CFG_ENV_SECT_SIZE 0x10000 /* Total Size of Environment Sector */

編譯運行, 并操作setenv, saveenv, printenv. 看起來(lái)正常.
=> setenv ipaddr 192.168.1.100
=> saveenv
Saving Environment to Flash...
Un-Protected 1 sectors
Erasing Flash...
done
Erased 1 sectors
Writing to Flash... done
Protected 1 sectors
ð printenv

但重新啟動(dòng)機器后,參數沒(méi)有起作用,還是缺省的.仔細看了環(huán)境變量的程序,發(fā)現是由于ENV_IS_EMBEDDED定義造成的,而此變量定義是在./tools/envcrc.c中:
# if (CFG_ENV_ADDR >= CFG_MONITOR_BASE) &&
((CFG_ENV_ADDR + CFG_ENV_SIZE) <= (CFG_MONITOR_BASE + CFG_MONITOR_LEN))
# define ENV_IS_EMBEDDED 1
# endif

因此在wx20.h中增加了:
#define CFG_MONITOR_BASE PHYS_SDRAM_1 (我還沒(méi)搞清楚這個(gè)變量干啥的.)
主要是去除ENV_IS_EMBEDDED的定義。

結果確實(shí)準備使用flash的環(huán)境變量,但每次總是說(shuō)標志頭錯誤,經(jīng)過(guò)仔細調試,最終發(fā)現flash寫(xiě)出現錯誤,原因是我忘了修改wx/common/flash.c中的CONFIG_B2為CONFIG_WX20. 修改后就正常了.

(11) arm-linux和arm-elf
上面調試一直是arm-elf,原因是以前有問(wèn)題時(shí)懷疑編譯器問(wèn)題而修改了,因此沒(méi)有改變。改用arm-linux編譯后:

U-Boot 1.1.3 (Jul 3 2005 - 07:01:36)

U-Boot code: 0C100000 -> 0C117DA0 BSS: -> 0C11C0F0
RAM Configuration:
Bank #0: 0c000000 8 MB
env_init flash_addr=20000
flash_addr=20000 env_ptr=20000 env_ptr->data=bootargs=setenv bootargs root=/dev/ram ip=192.168.1.100:::::eth0:off ether=25,0,0,0,eth0 ethaddr=00:50:c2:1e:af:fb
envptr->crc=1470de2 1470de2
buffer->crc=1470de2
[flash_get_size, 224] Entering ...
[flash_get_size, 232] value=bf
[flash_get_size, 255] value=234b
Flash: 2 MB
env_ptr=20000
gd->env_addr=20004 gd->env_valid=1
env_relocate[211] offset = 0x0
env_relocate[229] malloced ENV at 00000000
In:
Out:
Err:

死機!!!

然后改回arm-elf編譯:
U-Boot 1.1.3 (Jul 3 2005 - 07:04:48)

U-Boot code: 0C100000 -> 0C119B98 BSS: -> 0C11DCD8
RAM Configuration:
Bank #0: 0c000000 8 MB
env_init flash_addr=20000
flash_addr=20000 env_ptr=20000 env_ptr->data=bootargs=setenv bootargs root=/dev/ram ip=192.168.1.100:::::eth0:off ether=25,0,0,0,eth0 ethaddr=00:50:c2:1e:af:fb
envptr->crc=1470de2 1470de2
buffer->crc=1470de2
[flash_get_size, 224] Entering ...
[flash_get_size, 232] value=bf
[flash_get_size, 255] value=234b
Flash: 2 MB
env_ptr=20000
gd->env_addr=20004 gd->env_valid=1
env_relocate[211] offset = 0x0
env_relocate[229] malloced ENV at 0c0dfc08
In: serial
Out: serial
Err: serial
rtl8019 MAC: 2a:2a:2a:2a:2a:2a
Hit any key to stop autoboot: 0
=>

正常!因此最好是用arm-elf編譯. 我在看網(wǎng)上查資料時(shí)記得有人說(shuō)過(guò)"用arm-linux編譯時(shí),malloc返回0,而改成arm-elf編譯時(shí)就好了".有個(gè)印象,具體帖子不記得在哪里了.所以后來(lái)我就一直使用arm-elf編譯,沒(méi)有再去試arm-linux編譯.

(12) 網(wǎng)卡調試
剩下來(lái)的事情就是調網(wǎng)絡(luò )了.根據上面配置rtl8019as后,網(wǎng)絡(luò )仍然不同,然后參考uclinux驅動(dòng)中的寄存器定義修改,網(wǎng)絡(luò )就可以了.具體修改是:
drivers/rtl8019.h
36 #define ETH_ADDR_SFT (8)
37 #define EI_SHIFT(x) ((x)<
38
39 #define RTL8019_REG_00 (RTL8019_BASE + EI_SHIFT(0x00))
40 #define RTL8019_REG_01 (RTL8019_BASE + EI_SHIFT(0x01))
......


(13) 開(kāi)始load uclinux
設置好本機ip地址,服務(wù)器ip地址, 下載文件名這些參數后,就可以load uclinux了.

=> tftpboot
eth_init...00:50:c2:1e:af:fb
TFTP from server 192.168.1.25; our IP address is 192.168.1.100
Filename image.bin.
Load address: 0xc008000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
###############################
死機!

原因是我們現在的u-boot入口地址是C100000,而uclinux內核大約2M,因此load過(guò)來(lái)就沖突了.因此我們把u-boot的入口地址改成C300000,具體修改在board/wx/wx20/config.mk:
TEXT_BASE = 0x0C300000
重新編譯運行就可以了.

(14) 設置自動(dòng)運行uclinux
剛才我們是用命令load uclinux并執行的.自動(dòng)運行需要設置bootcmd環(huán)境變量:
=> setenv bootcmd "tftpboot; go 0xc008000" ==》設置錯誤
## Starting application at 0x0C008000 ...
=> setenv bootcmd "tftpboot; go 0xc008000" ==》需要有個(gè)
=> saveenv

重新開(kāi)機運行u-boot:
Hit any key to stop autoboot: 0
Unknown command "tftpboot - try help
## Starting application at 0x0C008000 ...
結果還是不能自動(dòng)下載uclinux和運行.經(jīng)過(guò)調試才發(fā)現在設置bootcmd時(shí)多加了引號造成的!正確的設法是:
=> setenv bootcmd tftpboot ; go 0xc008000 ==》正確的設置

此時(shí)可以成功自動(dòng)下載uclinux和運行了.


(15) flash運行
刻錄到flash后,運行uclinux出現問(wèn)題,運行到:uclinux 開(kāi)中斷后就死機,提示:
Linux version 2.4.24-uc0 (root@samfei) (gcc version 2.95.3 20010315 (release)(ColdFire patches - 20010318 from :http://fiddes.net/coldfire/)(uClinux XIP and shared lib patches from :http://www.snapgear.com/)) #46 Áù 7ÔÂ 2 15:52:55 CST 2005
Processor: Samsung S3C44B0X revision 0
Architecture: S3C44B0X
On node 0 totalpages: 2048
zone(0): 0 pages.
zone(1): 2048 pages.
zone(2): 0 pages.
Kernel command line: root=/dev/rom0 init=/linuxrc

前面一直用armsys的bootloader,將u-boot下載到0xc300000運行,然后再load linux到0xc0080000運行,正常.而將u-boot刻錄到flash后運行不正常,經(jīng)過(guò)調試uclinux,到init/main.c中 sti()函數后出現死機.因此懷疑中斷向量設置問(wèn)題.

將cpu/s3c44b0/start.S中代碼修改成;
40 .globl _start
41 _start: b reset
42 /*
43 add pc, pc, #0x0c000000
44 add pc, pc, #0x0c000000
45 add pc, pc, #0x0c000000
46 add pc, pc, #0x0c000000
47 add pc, pc, #0x0c000000
48 add pc, pc, #0x0c000000
49 add pc, pc, #0x0c000000
50 */
51 LDR PC, Undefined_Addr
52 LDR PC, SWI_Addr
53 LDR PC, Prefetch_Addr
54 LDR PC, Abort_Addr
55 LDR PC,RESERVE_Addr
56 LDR PC, IRQ_Addr
57 /* subs pc,lr,#4*/
58 LDR PC, IRQ_Addr
59 /* subs pc,lr,#4*/

114 Undefined_Addr:
115 .word 0x0c000004
116 SWI_Addr:
117 .word 0x0c000008
118 Prefetch_Addr:
119 .word 0x0c00000C
120 Abort_Addr:
121 .word 0x0c000010
122 RESERVE_Addr:
123 .word 0x0c000014
124 IRQ_Addr:
125 .word 0x0c000018
126 FIQ_Addr:
127 .word 0x0c00001C
128
129 /*
130 * the actual reset code
131 */
132
133 reset:
后編譯,刻錄,然后運行.正常了!!!

(16) 補丁制作和測試
[root@samfei u-boot]# make distclean
[root@samfei 44b0]# mv u-boot u-boot.wx
[root@samfei 44b0]# cvs -d200) server:anonymous@cvs.sourceforge.net:/cvsroot/u-boot login
Logging in to server:anonymous@cvs.sourceforge.net:2401/cvsroot/u-boot
CVS password:
[root@samfei 44b0]# cvs -z3 -d200) server:anonymous@cvs.sourceforge.net:/cvsroot/u-boot co -P u-boot
cvs checkout: Updating u-boot
U u-boot/CHANGELOG
U u-boot/COPYING
U u-boot/CREDITS
U u-boot/MAINTAINERS
。。。。。。

[root@samfei 44b0]# diff -Naur u-boot u-boot.wx > uboot-wx-20050703.patch
[root@samfei 44b0]# vi uboot-wx-20050703.patch
去掉沒(méi)有用的文件.做補丁的好處就是自己可以很清楚的知道哪些文件修改了!做完了,別忘了測試一下.

[root@samfei 44b0]# cd u-boot
[root@samfei u-boot]# patch -p1 < ../uboot-wx-20050703.patch
[root@samfei u-boot]# make wx20_config
[root@samfei u-boot]# make


(17) 后記
寫(xiě)這份材料化了不少時(shí)間.由于在調試的時(shí)候記錄了大部分的調試信息,因此不用費腦筋去回憶.寫(xiě)完了這個(gè)經(jīng)歷,非常開(kāi)心..一則自己可以溫故而知新,二則就是與人共享啊.在開(kāi)源的世界里,與人共享應該是件很快樂(lè )的一件事情.



關(guān)鍵詞: uboot移植S3C44B0

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>