u boot mips移植分析

2021-04-16 15:43:48 字數 3547 閱讀 6547

1.    引言

文章是2年前移植u-boot時候分析的,u-boot方面文章比較多,但是mips方面的稍微少一點,因此貼上來就當資料蒐集貼吧.

(note: 上傳後和原圖有些出入,不知道什麼原因,不過總體框圖還是正確的)

1.1.    參考資料

詹榮開特點和功能

u-boot

yamon

支援的cpu和board

1.      支援種類繁多,包括arm的各個系列,ppc,mips

2.      mips的支援較差,目前支援au1100,au1500系列,4kec的需要自己移植

(工作量主要在起始**的初始化部分,包括cahe和中斷的初始化)

1.基本上對mips系列的都支援,包括sead

tm ,sead-2

tm malta

tm, altas

tm2.基本上屬於mips系列專用,未聽說過將yamon應用去其他架構的例項(可行性低,相當於重寫)

image大小

通常200k~300k左右,可對一些功能進行裁減至100k下

一般最小500k

主要包括初始**(start code)+大端image+小端image,通過修改,可裁減掉一種endian的image,大概減少200k左右

最小化裁減:可能接近100k

**結構

1.採用了將平台無關和平台相關的**分開處理的方法

1.採用了將平台無關和平台相關的**分開處理的方法

核心啟動方式

串列埠,tftp,本地, dhcp

串列埠,tftp,本地

核心支援格式

vmlinux,或gzip壓縮,或bzip2壓縮,或zimage

只支援原始的vmlinux,網上有人也嘗試修改過yamon來支援zimage(amd的1500開發板提供了支援zimage的補丁)

除錯功能

只有簡單的go

功能強大,支援gdb,還有異常處理等

可移植性

對於移植到新的板子或cpu,需要修改的目錄結構較清晰,容易新增

因為yamon沒有採用大量的ifdef來控制選項,是通過yamon啟動後自動detect到cpu和board的型別的,所以修改稍微麻煩

可裁減性

結構清晰,易於裁減

結構也較清晰,但由於存在較多yamon自動檢測的部分,裁減性稍差

可擴充套件性

易於擴充套件,對於擴充套件shell命令和增加driver較為容易

對shell command和driver的支援也較易新增

總結

u-boot是乙個較為通用的bootloader,主要目的是啟動核心,同時給開發者提供較為方便的移植性,u-boot的擴充套件功能什麼豐富;

yamon(yet another monitor)是主要針對mips系列cpu的乙個功能強大的rom monitor程式,yamon的擴充套件功能較為單一;

結論

使用u-boot作為開發用bootloader

下面是yamon的目錄分析和啟動流程圖(主要根據參考資料裡的總結)

yamon目錄結構

yamon啟動流程

3.3.    u-boot目錄結構

根據上面的比較,我們簡單分析一下u-boot的**目錄結構,描述其**主要功能,如下圖所示:

4.    設計移植

4.1.    啟動流程

下面我們詳細分析u-boot的啟動流程,並指出針對具體的硬體,啟動流程中需要修改的**,如下圖所示:

4.2.    移植分析

根據上述分析,我們**移植也包括三方面:

(1)    片級移植:

片級移植主要是針對具體cpu的初始化**的修改,針對我們的mips平台,主要包括: a) 通用暫存器的初始化

b) cp0的初始化(status, config, watch, count, compare, etc.)

c) watchdog初始化

d) cache初始化

e) tlb初始化

(2)    板級移植

a)    串列埠驅動

b)    flash讀寫驅動(nor, nand)

c)    hd讀寫驅動

d)    網絡卡驅動

(3)    功能層擴充套件

4.3.    修改**

主要修改的**說明如下:

(1)    makefile 新增開發板的編譯支援;

(2)    include/configs/myboard.h 開發板的定義,啟動引數等;

(3)    cpu/mips/start.s 修改初始化**和入口;

(4)    board/myboard/flash.c 對應的nor flash驅動;

(5)    board/myboard/myboard.c 對應的板級初始化**;

(6)    board/myboard/lowlevel_init.s 初始化硬體的彙編**;

(7)    board/myboard/serial.c 串列埠驅動;

(8)    drivers/rtl8019.h drivers/rtl8019.c 修改rtl8019驅動的暫存器定義等。

5.    擴充套件功能

以下的功能是根據以後開發除錯的不同需求,有可能需要新增的功能

5.1.    logo功能

logo功能在產品級使用中需要,在一般開發中可不使用,目前使用簡單的寫rgb資料來實現logo功能。

5.2.    nor flash驅動

nor flash的讀取是不需要驅動的,如果需要儲存資料到nor flash,或通過bootloader提供燒寫功能,就必須實現nor flash驅動, 由於最終產品不會有nor, 且目前開發板nor已有燒寫工具,因此未實現nor flash驅動。

5.3.    nand flash驅動

在後期的開發板,將使用nand flash作為儲存介質,如果需要使用u-boot作為開發用bootloader,需要將nand flash驅動移植到u-boot中。

5.4.    ata 驅動

在後期的開發板,如果使用硬碟作為儲存介質,如果需要使用u-boot作為開發用bootloader,需要將ata驅動移植到u-boot中。

5.5.    檔案系統解析

目前u-boot支援ext2, fat等,如果需要支援其他檔案系統,需要移植對應的**。

u boot mips移植分析

1.引言 文章是2年前移植u boot時候分析的,u boot方面文章比較多,但是mips方面的稍微少一點,因此貼上來就當資料蒐集貼吧.note 上傳後和原圖有些出入,不知道什麼原因,不過總體框圖還是正確的 1.1.參考資料 詹榮開特點和功能 u boot yamon 支援的cpu和 board 1...

uClinux移植和分析 2

printf和標準輸出 上次寫到main函式的引數傳遞.現在繼續往下進行.最近忙實驗室的事情,看了一周的文章,也沒啥進展,週末寫點技術貼,放鬆一下 進入main函式後,就要呼叫printf hello world n 了.順便將c語言引數傳遞提一下.字串 hello world n 編譯器是當作字串...

Adb移植(一)簡單分析

2013 06 14 10 43 41 標籤 adb移植 原始出處 作者資訊和本宣告。否則將追究法律責任。adb適用於電腦與android裝置進行除錯的工具。可以 執行裝置的shell 命令列 管理模擬器或裝置的埠對映 將本地apk軟體安裝到模擬器或android裝置 前期準備請看這裡這也是我當前移...