1. 程式人生 > >X210v3S的BSP構建之uboot移植(一)

X210v3S的BSP構建之uboot移植(一)

本篇部落格記錄將uboot,kernel,rootfs及QT4.8+openCV移植到x210v3s開發板全過程,持續更新中.......

博主資訊

中文名:瘋仔

英文名:Swann Kang

座標:天津(Tianjing)

時間:2017/12/03(大三)

交流QQ:1159943540

淘寶店鋪:瘋仔嵌入式物聯網科技


開發平臺及軟體版本介紹

目標開發板:  x210v3s

CPU:      SAMSUNG S5PV210

資源:     512MB DDR2,4GB inand,DM9000,IIC顯示屏等

UBOOT版本:1.3.4 android_uboot_smdkv210.tar.bz2

Kernel:   2.6.35.7

busybox:1.23

QT:4.8.5

開發環境:vmware12.0 +  64位 Ubuntu16.04 虛擬機器

參考開發板:三星SMDKV210

開發環境搭建:

1.安裝交叉編譯工具鏈:arm-none-linux-2009q3

2.安裝ssh伺服器

3.

開始移植:

解壓uboot原始碼

tar -jxvf android_uboot_smdkv210.tar.bz2

主makefile分析


TEXT_BASE 是將來我們整個 uboot 連結時指定的連結地址。因為 uboot 中啟
用了虛擬地址對映,因此這個 C3E00000 地址就等於 0x23E00000(也可能是
33E00000具體地址要取決於 uboot中做的虛擬地址對映關係)。 
回顧裸機中講的連結地址的問題,再想想 dnw 方式先下載x210_usb.bin 然後
再下載uboot.bin 時為什麼第二個地址是 23E00000.



檢視原理圖



x210v3s在DRAM0和DRAM1的位置各接了256MB的DDR2記憶體

配置編譯:

make  smdkv210single_config

make -j4

燒錄執行:

檫除原uboot

安卓:busybox dd if=/dev/zero of=/dev/block/mmcblk0 bs=512 seek=1 count=1 conv=sync
 sync
LINUX:busybox dd if=/dev/zero of=/dev/mmcblk0 bs=512 seek=1 count=1 conv=sync
 sync

燒錄uboot至sd卡

fdisk -l檢視sd裝置


啟動:

錯誤分析:

1.未列印“OK“字樣,說明在這之前已出錯

uboot原始碼分析

找到uboot入口函式

u-boot.lds 中找到 start.S入口 
(1)在 C 語言中整個專案的入口就是 main 函式(這是 C 語言規定的),所以譬如
說一個有10000 個.c 檔案的專案,第一個要分析的檔案就是包含了 main 函式的
那個檔案。 
(2)在 uboot 中因為有彙編階段參與,因此不能直接找 main.c。整個程式的入口
取決於連結指令碼中ENTRY 宣告的地方。ENTRY(_start)因此_start符號所在的文
件就是整個程式的起始檔案,_start所在處的程式碼就是整個程式的起始程式碼。



找到start.s


start.s解析


lowlevel_init.s解析


在uart_asm_init函式中列印‘o'


在這裡列印’k'

經除錯發現三星smdkv210開發板有PMIC的IIC電源管理,在這裡沒有,把118行 bl PMIC_InitIp註釋,再重新編譯執行


可以看到uboot已經啟動,但啟動核心失敗

print列印環境變數,發現環境變數錯誤,bdinfo檢視詳細


重新設定環境變數

set bootcmd 'movi read kernel 30008000; movi read rootfs 30B00000 300000; bootm 30008000 30B00000'

set bootargs console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3

SMDKV210 # set ipaddr 10.5.74.20

SMDKV210 # set serverip 10.5.74.81

SMDKV210 # set gatewayip 10.5.74.1

save

重新啟動,發現環境變數無法儲存,mmc驅動無法工作

SD/MMC:  unrecognised EXT_CSD structure version 7
unrecognised EXT_CSD structure version 7
Card init fail!
0 MB

從啟動資訊中發現關鍵資訊,開發板inand版本高,uboot無法識別,把資訊複製到source insight中搜索,定位問題

在/u-boot-samsung-dev/drivers/mmc/mmc.c中


把相應程式碼修改,這裡直接註釋err = -1和goto out 等

重新編譯燒錄


此時inand版本號的問題已解決,發現核心啟動失,檢視環境變數

使用命令md和mw進行記憶體讀寫測試


讀寫正常,說明DDR初始化成功,並且正常工作,但是不難看出,大小錯了

x210v3s開發板中,實際在bank0上接了256MBDDR,地址為0x20000000到0x2fffffff,bank1中接了256MB記憶體,地址為0x40000000到0x4fffffff

修改程式碼

在include/configs/中的smdkv210single.h中


修改後make clean 再重新編譯燒錄


記憶體配置修改成功,嘗試ping命令,發現網絡卡地址配置錯了


在smdkv210single.h中修改配置

檢視原理圖




可知本發板的dm9000接在SROM BANK1上,起始地址為88000000,在標頭檔案中修該配置如下


同時還有smdkc110.c中dm9000_pre_init函式


重新編譯燒錄執行


可以看到已經ping通,網絡卡正常工作

至此uboot已初步移植成功,接下來我們在uboot中修改Makefile等新增自己定義的開發板,


然後複製smdkc110資料夾為swann210資料夾

同時在include/configs/中複製smdkv210single.h為swann210.h

同時修改swann210資料夾下的u-boot.lds連結指令碼


重新編譯

接下來我們為開發板的uboot新增開機logo