一直閱讀**以及實驗了一段時間
,這次就趁著這個時間將過往的一些東西整理一下。
omapl138是
ti的一款
dsp+arm
的雙核工業處理器。
ti的晶元上都有
rom(
read onlymemroy)記憶體,這塊rom記憶體只能在晶元出廠時以掩膜的方式固化,一般使用者是沒有辦法進行更改的。
rom裡面的**,也分許多版本,我所使用這款的
rom的
romid
是d800k008。
先說一下
omapl138
的啟動過程吧。 1、
omapl138
啟動流程:
上電後,
dsp核先啟動,
arm在這個時候是禁用狀態的。
dsp的
rom裡面的**將會:
- 讀某些暫存器,確認
arm核存在(不然將只有
dsp做引導)
- 程式
pdsp0
準備arm
復位向量
- 將arm復位,並讓
arm從它自己的
rom執行(這就是與
omapl137
主要的不同,
arm有它自己的
rom,並且將會主導之後的引導程序)
- dsp進入空閒迴圈狀態。 2、
arm開始從
rom執行後,它將會:
- 把
dsp置為禁用狀態
- 初始化硬體,例如,
psc,
pll,外部儲存裝置等
- 讀bootcfg
暫存器決定引導模式,它將會從適當的引導**去載入和執行
arm ubl
,例如spi flash
,nand
,nor等
3、arm ubl
開始執行。它的行為是軟體定義的。例如:
- ti提供的
arm ubl
將會載入並執行
uboot
,也將進一步執行
linux
。linux
應用能通過
dsplink
去載入和執行
dsp。這個模式與達文西模式一樣
- 工業客戶能在某些引導**選擇載入並執行
dsp ais
映象。同時,
arm ubl
也能開始引導
uboot
和linux
。以這種方式的話,
dsp能在
linux
引導結束前處理資料。
omapl138的
rombootloader支援多種啟動模式,而啟動模式是有硬體上的配置決定的,由晶元管腳bootmode[7:0]
通過外部上、下拉電阻設定。
arm啟動前的這一部分是看不到,只有到了
arm開始讀取啟動模式的時候才是可見的(實際上是我找不到相關的細節可以觀察的了)。
這裡所使用的啟動方式是
nor flash
的模式,而
nor flash
的boot
模式包括三種:
1. legacynor boot(傳統的nor引導)
2. directnor boot(直接引導)
3. aisnor boot(ais檔案的引導)
根據官方的文件
using thetms320c6748/c6746/c6742 bootloader
所說的,所有的引導模式,除了
hpi和
2/3的
nor boot
方式之外,其它所有的引導模式都使用
ais作為引導目標。這裡這個
ais就很關鍵了,我在工作中所使用的這個模式就是這樣第三種,使用
ais nor boot
的方式,
ais檔案後面說,先說一下
nor啟動方式:
nor flash的啟動方式需要
nor flash
已經連線在了外部儲存器介面(
emifa
)上的ema_cs[2]
介面上,對於這種啟動模式,
bootloader
會將emifa
配置成8-bit
的訪問模式去從
nor flash
的上讀取第乙個字。這第乙個字表明
nor flash
應該被8
位或16
位的訪問方式訪問,以及使用什麼樣的引導方法。
下面解釋這個配置字:
reserved為保留位,這裡不做解釋;
copy:從
nor flash
的基位址拷貝到數字訊號處理器(
dsp)的
l2 ram
的資料長度。這個值只在
legacy boot
模式被使用,單位是kb。
範圍:0x01 1kb
0x02 2kb
...0x0e 14kb
0x0f 15kb
method:這個字段表明使用的是哪種
nor boot
0x0 :
legacy norboot
0x1 :
direct norboot
0x2 :
ais nor boot
access :
emifa
的訪問模式
0x0 :
8-bit
的訪問方式
0x1 :
16-bit
的訪問方式 如果
access
欄位為0x01
,那麼bootloader
在使用method
特定的引導方式之前將
emifa
重新配置為
16-bit
的訪問方式。
bootloader
的預設配置是
8-bit
的訪問方式。
legacy nor boot
對於這種引導方式,
bootloader
從norflash
的開始(
0x60000000
)拷貝一塊
copy
字段大小的資料到
dsp的
l2 ram
的開始位址上(
0x11800000
)。這塊資料應該被設定成為第二段
bootloader
。如下所示的:
對於這種引導方式,
bootloader
通過分支位址
0x60000004
將控制權轉移給存在於
norflash
中的第二段
bootloader
。第二段
bootloader
直接從這裡執行。
ais nor boot
對於這種引導方式,
bootloader
要求ais
映象從0x6000004
開始,然後被對映到
在我所使用的系統上使用的方式是
aisnorboot,
所以介紹下
ais的檔案:
ais是一種儲存引導映象的格式。除了上述提到的
hpi和兩種
nor-boot
模式之外,所有的模式都是支援
c6748/c6746/c6742
的bootloader
使用ai
作為引導目標的。
ais是一種二進位制語言,使用
32位欄位小端格式訪問。
ais開始由乙個魔術字(
magic word0x41504954)和某些ais命令
bootloader
會按照順序去執行這些命令。
jump &close(j&c)命令標識了結尾。
每個ais
命令由乙個
opcode
,之後跟著乙個或多個引數,再一些設定的資料組成。
opcode
和引數是以乙個字的(
4個位元組)寬度。如果資料長度不足
4個位元組,那麼將會用
0去填充。
後續將對手頭上的ais檔案進行例項分析。
OMPL138及U Boot的啟動過程分析(四)
本篇對之前的分析做乙個總結 1.開機上電,使用者在boot 管腳上配置的啟動方式被鎖定取樣到syscfg模組的bootcfg暫存器,從而確定處理器的啟動方式。2.psc模組中的啟動預設值是 arm核休眠,dsp核使能。所以這時候dsp啟動,dsp從片內dsp l2 rom處讀取指令執行。這裡有ti已...
word的作用及uboot中 start的引用
gnu彙編中.word偽指令的理解 分類 linux 在u boot中遇到 armboot start bss start等這些變數,這些偽指令的用法涉及以下知識 1.彙編是 絕對引用 即引用的就是位址 在start.s中 text base word text base uboot映像在sdram...
ARM學習筆記 uboot的作用及主要工作 1
pc啟動 上電 bios 引導作業系統windows 識別c d盤 執行應用程式 嵌入式 上電 bootloader linux核心 掛接根檔案系統 執行應用程式 u boot打補丁 編譯 燒寫 1.解壓縮 2.打補丁patch命令 3.配置 4.編譯 uboot作用 主要作用 1.讀flash 2...