當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]移植環(huán)境1,主機(jī)環(huán)境:VMare下CentOS 5.5 ,1G內(nèi)存。2,集成開(kāi)發(fā)環(huán)境:Elipse IDE3,編譯編譯環(huán)境:arm-linux-gcc v4.4.3,arm-none-eabi-gcc v4.5.1。4,開(kāi)發(fā)板:mini2440,2M nor flash,128M nand flash。5,u-bo

移植環(huán)境

1,主機(jī)環(huán)境:VMare下CentOS 5.5 ,1G內(nèi)存。

2,集成開(kāi)發(fā)環(huán)境:Elipse IDE

3,編譯編譯環(huán)境:arm-linux-gcc v4.4.3,arm-none-eabi-gcc v4.5.1。

4,開(kāi)發(fā)板:mini2440,2M nor flash,128M nand flash。

5,u-boot版本:u-boot-2009.08

6,參考文章:

http://blogold.chinaunix.net/u3/101649/showart.php?id=2105215

http://blog.chinaunix.net/space.php?uid=23787856&do=blog&id=115382

http://blogimg.chinaunix.net/blog/upfile2/100811115954.pdf

下載并解壓源文件

1,下載u-boot-2009.08,可以從官方網(wǎng)站下載u-boot-2009.08

2,#tar -jxvf u-boot-2009.08.tar.bz2 //解壓源碼

移植步驟

1.1,了解u-boot目錄結(jié)構(gòu)和啟動(dòng)流程,請(qǐng)參考U-Boot啟動(dòng)過(guò)程分析

【1】目錄結(jié)構(gòu)

【2】啟動(dòng)流程

1.2,建立mini2440開(kāi)發(fā)板文件并編譯測(cè)試

在項(xiàng)目根目錄u-boot-2009.08上單擊右鍵->瀏覽文件夾

【1】定位到board/samsung,將目錄smdk2410復(fù)制并粘貼到當(dāng)前目錄下,將其重命名為mini2440。

【2】打開(kāi)mini2440目錄,將smdk2410.c重命名為mini2440.c,

【3】用gedit打開(kāi)當(dāng)前目錄下的Makefile(在Makefile上單擊右鍵->使用“文本編輯器”打開(kāi)),定位到28行,修改后代碼如下所示(修改部分用灰色背景顏色標(biāo)出):

include $(TOPDIR)/config.mk
LIB = $(obj)lib$(BOARD).a
COBJS :=mini2440.oflash.o
SOBJS := lowlevel_init.o
然后保存。

【4】在根目錄下定位到include/configs,將smdk2410.h復(fù)制并粘貼到當(dāng)前目錄下,將其重命名成mini2440.h。

【5】用gedit打開(kāi)根目錄下的Makefile文件,然后搜索smdk2410,定位到2997行,找到下列語(yǔ)句

smdk2410_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0

然后將其復(fù)制并粘貼到其下面,并修改成如下語(yǔ)句

mini2440_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t mini2440 samsung s3c24x0

然后保存。
*說(shuō)明:

arm :CPU的架構(gòu)(ARCH)
arm920t:CPU的類(lèi)型
mini2440 :對(duì)應(yīng)在board目錄下建立新的開(kāi)發(fā)板項(xiàng)目的目錄
samsung:新開(kāi)發(fā)板項(xiàng)目目錄的上級(jí)目錄,如直接在board下建立新的開(kāi)發(fā)板項(xiàng)目的目錄,則這里就為NULL
s3c24x0:CPU型號(hào)
*注意:編譯選項(xiàng)格式的第二行要用Tab鍵開(kāi)始,否則編譯會(huì)出錯(cuò)。

【6】編譯測(cè)試

打開(kāi)終端,進(jìn)入到u-boot-2009.08根目錄下執(zhí)行

[root@localhost u-boot-2009.08]# make distclean
[root@localhost u-boot-2009.08]# make mini2440_config
Configuring for mini2440 board...
[root@localhost u-boot-2009.08]# make
... .... .... ....

board.c:127: error: inline function 'coloured_LED_init' cannot be declared weak
board.c:129: error: inline function 'red_LED_on' cannot be declared weak
board.c:131: error: inline function 'red_LED_off' cannot be declared weak
board.c:133: error: inline function 'green_LED_on' cannot be declared weak
board.c:135: error: inline function 'green_LED_off' cannot be declared weak
board.c:137: error: inline function 'yellow_LED_on' cannot be declared weak
board.c:139: error: inline function 'yellow_LED_off' cannot be declared weak
board.c:141: error: inline function 'blue_LED_on' cannot be declared weak
board.c:143: error: inline function 'blue_LED_off' cannot be declared weak
make[1]: *** [board.o] 錯(cuò)誤 1
make[1]: Leaving directory `/root/workspace/u-boot-2009.08/lib_arm'
make: *** [lib_arm/libarm.a] 錯(cuò)誤 2
[root@localhost u-boot-2009.08]#

出現(xiàn)錯(cuò)誤,內(nèi)嵌函數(shù)不能被聲明為weak屬性,打開(kāi)lib_arm/board.c,定位到127行開(kāi)始,將其注釋掉,修改后結(jié)果如下:

void inline __coloured_LED_init (void) {}
//void inline coloured_LED_init (void) __attribute__((weak, alias("__coloured_LED_init")));
void inline __red_LED_on (void) {}
//void inline red_LED_on (void) __attribute__((weak, alias("__red_LED_on")));
void inline __red_LED_off(void) {}
//void inline red_LED_off(void) __attribute__((weak, alias("__red_LED_off")));
void inline __green_LED_on(void) {}
//void inline green_LED_on(void) __attribute__((weak, alias("__green_LED_on")));
void inline __green_LED_off(void) {}
//void inline green_LED_off(void)__attribute__((weak, alias("__green_LED_off")));
void inline __yellow_LED_on(void) {}
//void inline yellow_LED_on(void)__attribute__((weak, alias("__yellow_LED_on")));
void inline __yellow_LED_off(void) {}
//void inline yellow_LED_off(void)__attribute__((weak, alias("__yellow_LED_off")));
void inline __blue_LED_on(void) {}
//void inline blue_LED_on(void)__attribute__((weak, alias("__blue_LED_on")));
void inline __blue_LED_off(void) {}
//void inline blue_LED_off(void)__attribute__((weak, alias("__blue_LED_off")));

[root@localhost u-boot-2009.08]# make clean

[root@localhost u-boot-2009.08]# make

... ...

cpu/arm920t/start.o: In function `start_code':
/root/workspace/u-boot-2009.08/cpu/arm920t/start.S:117: undefined reference to `coloured_LED_init'

/root/workspace/u-boot-2009.08/cpu/arm920t/start.S:118: undefined reference to `red_LED_on'
make: *** [u-boot] 錯(cuò)誤 1
出現(xiàn)錯(cuò)誤coloured_LED_init'未定義。打開(kāi)cpu/arm920t/start.S,搜索“coloured_LED_init”定位到117行,找到如下代碼:

bl coloured_LED_init
bl red_LED_on

將其注釋掉

//這兩行是AT91RM9200DK開(kāi)發(fā)板的LED初始化,注釋掉

//bl coloured_LED_init
//bl red_LED_on


然后執(zhí)行清除、編譯命令

[root@localhost u-boot-2009.08]# make clean

[root@localhost u-boot-2009.08]# make

... ...

arm-linux-objcopy -O srec u-boot u-boot.srec
arm-linux-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin
[root@localhost u-boot-2009.08]#
編譯通過(guò)。

【7】加入調(diào)試選項(xiàng),啟用DEBUG宏,有兩種辦法辦法

<1>參考文章Makefile,如何傳遞宏定義DEBUG和Debug版和Release版的程序

在編譯時(shí),直接在make 后面?zhèn)魅雲(yún)?shù) -d ,表示Debug模式,輸出有關(guān)文件和檢測(cè)時(shí)間的詳細(xì)信息,如

make -d

可以輸出源程序中定義的DEBUG宏定義的調(diào)試信息

<2>用gedit打開(kāi)根目錄下的config.mk文件,然后搜索“DDEBUG”,找到如下語(yǔ)句

DBGFLAGS= -g # -DDEBUG

將注釋掉的DDEBUG選項(xiàng)打開(kāi),修改后下面語(yǔ)句

DBGFLAGS= -g -DDEBUG

但是此種辦法需要在調(diào)試完成時(shí)需要在將其注釋掉。

1.3,根據(jù)啟動(dòng)流程修改或添加基本的u-boot源碼,使其能夠在內(nèi)存中啟動(dòng)

【1】增加對(duì)S3C2440一些寄存器的支持,添加中斷禁止部分和時(shí)鐘設(shè)置部分

用gedit打開(kāi)cpu/arm920t/start.S,定位到134行附近,如下代碼

#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)
/* turn off the watchdog */

由于2410和2440的寄存器及地址大部分是一致的,所以這里就直接在2410的基礎(chǔ)上再加上對(duì)2440的支持即可,修改后代碼如下:

#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)|| defined(CONFIG_S3C2440)
/* turn off the watchdog */

... ...

# if defined(CONFIG_S3C2410)
ldr r1, =0x3ff
ldr r0, =INTSUBMSK
str r1, [r0]
# endif

# if defined(CONFIG_S3C2440)//添加s3c2440的中斷禁止部分
ldr r1, =0x7fff //根據(jù)2440芯片手冊(cè),INTSUBMSK寄存器有15位可用
ldr r0, =INTSUBMSK
str r1, [r0]
# endif

# if defined(CONFIG_S3C2440) //添加s3c2440的時(shí)鐘部分
#define MPLLCON 0x4C000004 //系統(tǒng)主頻配置寄存器基地址
#define UPLLCON 0x4C000008 //USB時(shí)鐘頻率配置寄存器基地址
ldr r0, =CLKDIVN //設(shè)置分頻系數(shù)FCLK:HCLK:PCLK = 1:4:8
mov r1, #5
str r1, [r0]
ldr r0, =MPLLCON //設(shè)置系統(tǒng)主頻為405MHz
ldr r1, =0x7F021 //這個(gè)值參考芯片手冊(cè)“PLL VALUE SELECTION TABLE”部分
str r1, [r0]
ldr r0, =UPLLCON //設(shè)置USB時(shí)鐘頻率為48MHz
ldr r1, =0x38022 //這個(gè)值參考芯片手冊(cè)“PLL VALUE SELECTION TABLE”部分
str r1, [r0]
# else //其他開(kāi)發(fā)板的時(shí)鐘部分
/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 202.8 MHz ! */
ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]

ldr r0, =MPLLCON //設(shè)置系統(tǒng)主頻為202.8MHz
ldr r1, =0xa1031 //這個(gè)值參考芯片手冊(cè)“PLL VALUE SELECTION TABLE”部分
str r1, [r0]

#endif /* CONFIG_S3C2400 || CONFIG_S3C2410|| CONFIG_S3C2440*/

【2】S3C2440的時(shí)鐘部分除了在start.S中添加外,還要分別在board/samsung/mini2440/mini2440.c和cpu/arm920t/s3c24x0/speed.c中修改或添加部分代碼。

(1)用gedit打開(kāi)board/samsung/mini2440/mini2440.c,定位到33行,修改或添加如下內(nèi)容:

//設(shè)置主頻和USB時(shí)鐘頻率參數(shù)與start.S中的一致

#define FCLK_SPEED2 //設(shè)置默認(rèn)等于2

#if FCLK_SPEED==0 /* Fout = 203MHz, Fin = 12MHz for Audio */
#define M_MDIV 0xC3
#define M_PDIV 0x4
#define M_SDIV 0x1
#elif FCLK_SPEED==1 /* Fout = 202.8MHz */
#define M_MDIV 0xA1
#define M_PDIV 0x3
#define M_SDIV 0x1
#elif FCLK_SPEED==2 /* Fout = 405MHz */
#define M_MDIV 0x7F //這三個(gè)值根據(jù)S3C2440芯片手冊(cè)“PLL VALUE SELECTION TABLE”部分進(jìn)行設(shè)置
#define M_PDIV 0x2
#define M_SDIV 0x1
#endif

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(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)越多用戶希望企業(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ù)字世界的話語(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)閉