uboot移植記錄之一

uboot移植記錄之一

23小時前
uboot移植記錄之一
 
uboot整個移植過程我們可以分爲三個階段:
一,移植可以從Nor flash啓動的uboot
這個階段是移植一個最簡單的uboot,可以燒在Nor flash內運行.
二,移植支持Nand flash驅動的uboot
加入Nand flash驅動的支持,可以在uboot命令行下操作Nand flash.但還未能從Nand flash啓動,只能在Nor flash內運行.
三,移植可以從Nor flash啓動的uboot
可以燒錄在Nand flash,並設置從Nand flash啓動運行uboot.
分三個階段進行移植,可以對整個uboot的移植過程及原理更加清晰明瞭,同時降低了發現問題時解決問題的困難度和解決範圍.
 
 
首先介紹移植可以從Nor flash啓動的uboot. 這個階段相對簡單一點,是移植一個最簡單的uboot,可以燒在Nor flash內運行.不需要修改太多的東西。步驟如下:
測試一下默認的smdk2410_config配置能否在你的板子上正常運行
1.編譯uboot1.1.4

#make smdk2410_config
#make ARCH=arm


注:編譯針對arm的平臺時,uboot默認使用arm-linux-gcc編譯,若交叉編譯器名字不一樣,需要自行在Makefile裏修改。
 
會出現兩個錯誤.
錯誤信息一:
cc1: Invalid option `abi=apcs-gnu'
  make[1]: *** [hello_world.o] Error 1
  make[1]: Leaving directory `/root/u-boot-1.1.4/examples'
  make: *** [examples] Error 2  
解決辦法:
出錯的文件是/cpu/arm920t/下的config.mk:

  PLATform_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
改成:
  PLATform_CPPFLAGS +=$(call cc-option,-mapcs-32,$(call cc-option,-mabi=apcs-gnu,))
 
錯誤信息二:
make[1]: *** No rule to make target `hello_world.srec', needed by `all'.  Stop.
make[1]: Leaving directory `/work/src/u-boot-1.1.4/examples'
解決方法:
打開 examples/Makefile  
把example文件夾下的Makefile中的
第126行
%.srec: % 改成 %.srec: %.o
第129行的
%.bin: % 改成 %.bin: %.o
 
 
2.若編譯成功,則會在uboot源碼下產生u-boot.bin文件。將這個文件燒錄到nor flash。
注意: 默認u-boot的smdk2410_config是不支持nandflash的,只能在nor flash內運行,所以只能燒錄到nor flash內運行。如果燒錄到nandflash下是不能運行的。
 
3.參考開發板資料,設置好跳線,從nor flash啓動。
啓動信息如下:

U-Boot 1.1.4 (Dec 30 2007 - 23:25:02)
U-Boot code: 33F80000 -> 33F9696C BSS: -> 33F9AC58
RAM Configuration:
Bank #0: 30000000 64 MB
*** Warning - bad CRC, using default environment
Flash: 512 kB
In: serial
Out: serial
Err: serial

 
發現有3個問題:
1) 啓動時開發板蜂鳴器一直在響。
懷疑是我的開發板蜂鳴器對應的GPIO口和smdk2410的GPIO口地址不對應,從而導致啓動時誤賦了值,一直在響。
2) Warning - bad CRC, using default environment
這個問題是因爲第一次使用uboot時沒有設置過變量,設置保存一下就不會在出現了。
3) Flash: 512 kB
我的板子Nor flash是1MB的,而這裏顯示512KB
 
4.下面進行uboot源碼修改
這裏主要根據開發板硬件的實際情況,基於smdk2410的源碼進行修改(主要是配置文件include/configs/smdk2410.h),並解決如上碰到的問題1和3。
若對硬件板子的情況不是太瞭解,可以參考2410的datasheet以及開發板供應商提供的硬件資料。
 
從我開發板uboot第一次啓動的情況來看,問題不是太大。
首先修改include/configs/smdk2410.h。裏面包含了很多對目標板設置的宏。
smdk2410.h的內容和要修改的地方如下:
 

#define CONFIG_BOOTDELAY 3
/*#define CONFIG_BOOTARGS "root=ramfs devfs=mount console=ttySA0,9600" */
#define CONFIG_ETHADDR 08:00:3e:26:0a:5b
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 192.168.1.103
#define CONFIG_SERVERIP 192.168.1.102
#define CONFIG_BOOTFILE "uImage"
#define CONFIG_BOOTCOMMAND "tftp 30000000 uImage/; bootm 30000000"
//這是bootdelay後運行的命令

//這些宏對應與uboot的變量,即在uboot命令行下執行printenv打印出的變量。可以在這裏設置(定義爲默認值),也可以在uboot啓動後通過setenv命令設置。


#define CFG_PROMPT "ARMSYS2410 # " /* Monitor Command Prompt */
#define CFG_LOAD_ADDR 0x33000000 /* default load address */
#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */
#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */

 
解決問題3:

#define CONFIG_AMD_LV400        1       /* uncomment this if you have a LV400 flash */
#if 0
#define CONFIG_AMD_LV800        1       /* uncomment this if you have a LV800 flash */
#endif
改爲:
#define CONFIG_AMD_LV800        1       /* uncomment this if you have a LV800 flash */
#if 0
#define CONFIG_AMD_LV400        1       /* uncomment this if you have a LV400 flash */
#endif
注意如下兩個地方:
#ifdef CONFIG_AMD_LV800
#define PHYS_FLASH_SIZE         0x00100000 /* 1MB */
這裏解決了u-boot啓動時的問題3即Nor Flash大小爲512 kB ,是因爲沒有選擇正確的Nor flash型號。
#define CFG_MAX_FLASH_SECT      (19)    /* max number of sectors on one chip */
#define CFG_ENV_ADDR            (CFG_FLASH_BASE + 0x0F0000) /* addr of environment */
宏CFG_ENV_ADDR定義了存放uboot變量的地址,換算一下爲1MB-64KB=960KB地方,而實際uboot編譯出來的大小僅爲120KB左右,由此可以得出,即使從新燒錄了新編譯的uboot到Nor flash內,也不會影響先前設定使用的uboot變量。
#endif
注:可以在u-boot的README裏查到這些部分宏的作用
 
5.解決蜂鳴器一直響問題
查看ARMSYS2410-B底板電路圖,在Reset Singal模塊裏可以看到蜂鳴器(BUZZER)控制口連接到TOUT1引腳,並且低電平響。如下:
 
 
由s3c2410 Datasheet知道TOUT1複用了GPB1口。因此,只要在uboot啓動時給GPBDAT寄存器適當賦值,關閉BUZZER就可以了。

修改smdk2410.c
#vi board/smdk2410/smdk2410.c
找到board_init()函數
在gpio->GPBUP = 0x000007FF;下面
添加如下內容:

/*******stop beep******/
gpio->GPBDAT &= ~0x00000002;
//Open BUZZER

delay (5000000);
//BUZZER Delay Time

gpio->GPBDAT |= 0x00000002;

 
6.重新編譯
#make clean
#make ARCH=arm
 
7.燒錄u-boot.bin到nor flash
啓動信息:
U-Boot 1.1.4 (Jan  3 2008 - 23:11:07)
U-Boot code: 33F80000 -> 33F96DC4  BSS: -> 33F9B0E8
RAM Configuration:
Bank #0: 30000000 64 MB
Flash:  1 MB
In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  0
ARMSYS2410 #
 
可以從Norflash啓動的uboot補丁:

 

 

 

文件: u-boot-1.1.4-nor-patch.tar.gz
大小: 1KB
下載: 下載
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章