當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]說(shuō) 明:這是u-boot移植文檔,移植到實(shí)驗(yàn)室的遠(yuǎn)峰s3c2410開(kāi)發(fā)板(YF2410, 無(wú)NOR flash)。當(dāng)時(shí)本來(lái)計(jì)劃細(xì)化后分幾部分貼在博客上,后來(lái)也沒(méi)做這項(xiàng)工作。正好前幾天轉(zhuǎn)了一篇在skyeye上運(yùn)行u-boot的文章,順便貼出自己這

說(shuō) 明:這是u-boot移植文檔,移植到實(shí)驗(yàn)室的遠(yuǎn)峰s3c2410開(kāi)發(fā)板(YF2410, 無(wú)NOR flash)。當(dāng)時(shí)本來(lái)計(jì)劃細(xì)化后分幾部分貼在博客上,后來(lái)也沒(méi)做這項(xiàng)工作。正好前幾天轉(zhuǎn)了一篇在skyeye上運(yùn)行u-boot的文章,順便貼出自己這 篇:)

1, 基本思路

==========

(1)思路

看參考資料(1),(2)對(duì)u-boot有了基本了解, 但沒(méi)有把握。嘗試進(jìn)行修改后,感覺(jué)不理解。于是嘗試u-boot在ram中運(yùn)行,當(dāng)時(shí)覺(jué)得使用ICE很沒(méi)有把握,畢竟沒(méi)怎么用過(guò),上網(wǎng)查資料,在"ADS 調(diào)試經(jīng)驗(yàn)"文章中看到了方法,嘗試幾次后才成功。后來(lái)閱讀讀u-boot和vivi相關(guān)代碼,結(jié)合s3c2410文檔和"ARM SOC體系結(jié)構(gòu)"學(xué)習(xí)匯編語(yǔ)言,這樣對(duì)bootloader第一階段有了直接的了解,感覺(jué)心里有底了,這時(shí)"boot from nand flash"等文檔已經(jīng)找到,感覺(jué)如果第一階段成功,第二階段會(huì)更有把握"。最初的第一階段移植沒(méi)有遇到什么困難。

在第二階段一直中參考了vcam9開(kāi)發(fā)板和"boot from nand flash",只是在"CFG_NO_FLASH"和"ENV"遇到些問(wèn)題,認(rèn)真分析后隨即解決。

這時(shí)反過(guò)來(lái)再修改第一階段代碼,在"move r10, lr"等語(yǔ)句的修改后,u-boot啟動(dòng)失敗,第二天決定分析匯編語(yǔ)言,根據(jù)記憶查"skyeye"那本書(shū),找到ojbectdump這個(gè)工具,反匯編后,問(wèn)題解決。

總的來(lái)說(shuō),最大的問(wèn)題就是基本工具的使用包括ICE,Makefile,binutils等。另外,高質(zhì)量的文檔不多。

(2)版本:arm-linux.gcc 3.3.2, u-boot 1.2.0。

(3) 與其它文檔的不同點(diǎn)

(3)-1,更注意將來(lái)的可移植性,u-boot第一階段從NAND flash到RAM的搬移代碼移植性更好,并且沒(méi)有加入mem_clear代碼。

(3)-2,更注意代碼是否清楚,nand_legacy_rw的cmd參數(shù)直接使用宏定義,而不是數(shù)字;

(3)-3,把內(nèi)容解釋清楚,不僅僅是操作文檔,

(4) 編譯器:3.3.2,使用3.4.1會(huì)出錯(cuò)。

2, 基礎(chǔ)

=======

(1)基礎(chǔ)知識(shí):

bootloader: 移植前要了解bootloader基本原理,看"嵌入式系統(tǒng)bootloader技術(shù)內(nèi)幕.pdf"

arm匯編:邊移植邊學(xué)習(xí),參考s3c2410手冊(cè)和ARM SOC體系結(jié)構(gòu)學(xué)習(xí),需要了解APCS(ARM過(guò)程調(diào)用標(biāo)準(zhǔn))

(2)u-boot使用說(shuō)明:僅介紹引導(dǎo)內(nèi)核所需命令:

(2)-1打補(bǔ)?。?/p>

假設(shè)你已經(jīng)進(jìn)入要解壓縮u-boot的目錄,例如"/usr/src/s3c2410/"。且補(bǔ)丁文件"u-boot-1.2.0_patch_20070911_1317"位于該目錄。用管理員權(quán)限,因?yàn)榫幾gu-boot也需要管理員權(quán)限。

tar jxvf u-boot-1.2.0.tar.bz2

cd u-boot-1.2.0

patch -p1 < ../u-boot-1.2.0_patch_20070911_1317

(2)-2編譯u-boot

(2)-3燒寫(xiě)flash

(2)-4下載Linux內(nèi)核。

A,用mkimage生成u-boot引導(dǎo)所需映像:

[root@localhost tools]# ./mkimage -A arm -O Linux -T kernel -C none -a

0x30008000 -e 0x30008000 -n Linux2.6.14 -d zImage_2054 zImage_2054_mk

Image Name: Linux2.6.14

Created: Wed Sep 5 20:47:53 2007

Image Type: ARM Linux Kernel Image (uncompressed)

Data Size: 976804 Bytes = 953.91 kB = 0.93 MB

Load Address: 0x30008000

Entry Point: 0x30008000

見(jiàn)"s3c2410/bootloader/u-boot/BootLinux",tftpboot是使用go啟動(dòng)失敗的例子;tftpboot_successful是使用bootm成功的例子。zImage_2054也在同一個(gè)目錄。

B, 下載Linux內(nèi)核,這里只說(shuō)明windows下使用tftp的方法。Linux方法見(jiàn)"ARM_Yuanfenglog-20070313.txt"。

windows下是使用tftpd32提供tftp服務(wù),不需要設(shè)置,安裝后即可使用。

tftpboot 31000000 zImage_2054_mk

TFTP from server 172.23.19.132; our IP address is 172.23.19.60

Filename 'zImage_2054_mk'.

Load address: 0x31000000

Loading: *^H#################################################################

#################################################################

#############################################################

done

Bytes transferred = 976868 (ee7e4 hex)

設(shè)置環(huán)境變量:

setenv gatewayip 172.23.19.254

保存環(huán)境變量:

saveenv

注:根據(jù)代碼和文檔,當(dāng)環(huán)境變量"autostart=yes"時(shí),tftpboot會(huì)自動(dòng)引導(dǎo)下載的內(nèi)核。這個(gè)沒(méi)有試驗(yàn),待做。

C, 驗(yàn)證內(nèi)核是否正確:

YF2410 # bootm 31000000

## Booting image at 31000000 ...

Image Name: Linux2.6.14

Created: 2007-09-05 20:47:53 UTC

Image Type: ARM Linux Kernel Image (uncompressed)

Data Size: 976804 Bytes = 953.9 kB

Load Address: 30008000

Entry Point: 30008000

Verifying Checksum ... OK

OK

Starting kernel ...

Uncompressing

Linux................................................................ done,

booting the kernel.

Linux version 2.6.14 (root@localhost.localdomain) (gcc version 3.4.1) #1 Wed

Aug 22 20:56:33 GMT 2007

......

D, 內(nèi)核啟動(dòng)正確,燒寫(xiě)到flash中,并且設(shè)置啟動(dòng)參數(shù):

tftpboot 31000000 zImage_2054_mk

TFTP from server 172.23.19.132; our IP address is 172.23.19.60

Filename 'zImage_2054_mk'.

Load address: 0x31000000

Loading: *^H#####################################T############################

##########################################T #######################

#############################################################

done

Bytes transferred = 976868 (ee7e4 hex)

YF2410 # nand erase 40000 f0000

NAND erase: device 0 offset 262144, size 983040 ...

OK

YF2410 # nand write 31000000 40000 f0000

NAND write: device 0 offset 262144, size 983040 ...

983040 bytes written: OK

YF2410 # setenv bootcmd nand read 31000000 40000 f0000;bootm 31000000

YF2410 # saveenv

Saving Environment to NAND...

Erasing Nand...Writing to Nand... done

注意,這里的偏移設(shè)置要和Linux內(nèi)核中設(shè)置的NAND flash分區(qū)一致。這里對(duì)應(yīng)kernel分區(qū)。

(2)-5,重啟開(kāi)發(fā)板:

U-Boot 1.2.0 (Sep 5 2007 - 10:08:14)

DRAM: 64 MB

NAND: 64 MB

In: serial

Out: serial

Err: serial

Hit any key to stop autoboot: 2 ^H^H^H 1 ^H^H^H 0

NAND read: device 0 offset 262144, size 983040 ...

983040 bytes read: OK

## Booting image at 31000000 ...

Image Name: Linux2.6.14

Created: 2007-09-05 20:47:53 UTC

Image Type: ARM Linux Kernel Image (uncompressed)

Data Size: 976804 Bytes = 953.9 kB

Load Address: 30008000

Entry Point: 30008000

Verifying Checksum ... OK

OK

Starting kernel ...

Uncompressing

Linux................................................................ done,

booting the kernel.

......

3, u-boot移植過(guò)程:

=================

本 次移植使用u-boot1.2.0,還不會(huì)用git,如果進(jìn)一步做移植還是使用最新版比較好。整個(gè)的u-boot移植完成了兩部分:(1)u-boot第 一階段移植,完成從flash到sdram的復(fù)制;(2)u-boot第二階段移植,完成nand legacy操作函數(shù),saveenv函數(shù);

(1)u-boot在ram中運(yùn)行

--------------------

目的:驗(yàn)證u-boot能否正常啟動(dòng),為下一步工作打基礎(chǔ);

編譯方法:

make distclean #徹底刪除make產(chǎn)生的文件中間文件,如果開(kāi)發(fā)過(guò)程中修改了目錄,需要

#distclean,否則依賴(lài)關(guān)系是舊的,無(wú)法編譯。一般下使用"make

# clean"刪除中間文件即可。

make smdk2410_config #配置u-boot為smdk2410配置文件,待做結(jié)合此看懂

#"mkconfig"文件

make ARCH=arm #編譯u-boot,執(zhí)行體系結(jié)構(gòu)是ARM

u- boot在ram中運(yùn)行成功,日志見(jiàn)"s3c2410/bootloader/u-boot/in_ram",具體過(guò)程見(jiàn)"AXD_u- boot_ram_log",起始地址是從include/configs/smdf2410.h文件CFG_LOAD_ADDR宏看到的 (0x33000000)。

第一次做loadbinary(lb)時(shí),System Output Monitor的Debog Log選項(xiàng)卡會(huì)顯示W(wǎng)arning,>說(shuō)映象有錯(cuò),沒(méi)管它,繼續(xù)進(jìn)行,可以啟動(dòng)u-boot。后來(lái)這個(gè)Warning也不出出現(xiàn)了。這樣>對(duì) flash的移植就有了基礎(chǔ)。繼續(xù)加油!

AXD運(yùn)行bin文件的方法參考了"ARM ADS中的AXD 調(diào)試經(jīng)驗(yàn)集錦",axf文件與bin文件的區(qū)別>見(jiàn)"ARM映象文件及執(zhí)行機(jī)理001"。

運(yùn)行: AXD操作日志和u-boot啟動(dòng)日志以及u-boot.bin見(jiàn)"s3c2410/bootloader/u-boot/in_ram"

注:如果鏈接出錯(cuò),可能是編譯器的問(wèn)題,用3.4.1不行,3.3.2就可以,很奇怪。這和注>釋里面提到的需要用3.4以上編譯起矛盾(待做,查那個(gè)文檔的名字),下面是當(dāng)時(shí)錯(cuò)誤的記錄:

cd /usr/src/s3c2420-linux/bootloader/u-boot-1.2.0 && arm-linux-ld -Bstatic -T

/usr/src/s3c2420-linux/bootloader/u-boot-1.2.0/board/YF2410/u-boot.lds -Ttext

0x33F80000 $UNDEF_SYM cpu/arm920t/start.o

--start-group lib_generic/libgeneric.a

board/YF2410/libYF2410.a cpu/arm920t/libarm920t.a

cpu/arm920t/s3c24x0/libs3c24x0.a lib_arm/libarm.a fs/cramfs/libcramfs.a

fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a

fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a net/libnet.a disk/libdisk.a

rtc/librtc.a dtt/libdtt.a drivers/libdrivers.a drivers/nand/libnand.a

drivers/nand_legacy/libnand_legacy.a drivers/sk98lin/libsk98lin.a

post/libpost.a post/cpu/libcpu.a common/libcommon.a --end-group -L

/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1 -lgcc

-Map u-boot.map -o u-boot

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀(guān)點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶(hù)希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話(huà)語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉