加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

QSD8x50開機流程

发布时间:2020-12-15 18:30:09 所属栏目:百科 来源:网络整理
导读:QSD8x50開機流程 (arm9) ?如同先前所介紹的QSD850是由兩顆ARM為主體 一個是Modem用的ARM9,另一個則是arm11的app CPU Qualcomm幾乎都是以Modem為主體.所以開機流程是ARM9開完才會去開ARM11. 這裡我們先介紹ARM9的開機流程,由於arm9的code沒有Open.所以只大概

QSD8x50開機流程 (arm9)

?如同先前所介紹的QSD850是由兩顆ARM為主體
一個是Modem用的ARM9,另一個則是arm11的app CPU
Qualcomm幾乎都是以Modem為主體.所以開機流程是ARM9開完才會去開ARM11.

這裡我們先介紹ARM9的開機流程,由於arm9的code沒有Open.所以只大概介紹一下..

arm9的開機步驟如下 :

PBL (Primary Boot Loader) ->?
DBL (Device Boot Loader) ->?
FSBL (Fail-Safe Boot Loader) ->
OSBL (Operating System Boot Loader) ->
最後就會進arm9的OS -> AMSS

PBL由於是ROM所以理論上不會有code,
主要目的是去把JTAG燒入的DBL給load起來.

DBL的流程如下?
初始化exception 向量表->啟動ARM9指令cache->
設定硬體組態像是CLK,EBI1,EBI2->
取得Partition table->判斷是否要進FSBL->
不進FSBL的話就把OSBL load起來進入.

FSBL好像是當初為了符合WM7所設定的,怕大家亂刷ROM.

不過目前似乎都沒有再用了.

OSBL流程如下:


初始化 MMU/cache/RAM ->
初始化 Flash -> 進入Downlaod mode ->
不Down load 的話建立Share Memory 區域->
->啟動或關閉 JTAG->載入MDSP image ->
讀進AMSS->關閉Cache以及MMU->控制權交給AMSS

以上程序做完理論上arm9應該就完成開機了.


QSD8x50開機流程 (OS - arm11)

這一部分將會介紹進OS這端的boot,有點類似 Win Mobile的 Eboot .

因為我覺得改ROM的話重點會是在OS image,所以就簡單介紹.

PC 端的Fastboot就是跟這端做溝通然後 Downlaod.

一開始的code會在init.s 不過還是簡單介紹就好就跳過,直接從C code開始.

Android_Q8K/bootable/bootloader/legacy/usbloader/mian.c

啟始的function是

int _main(unsigned zero,unsigned type,unsigned tags)

smem_init();

// 主要是初始化 share memory 準備跟arm9 溝通,

裡面可以看到是share memory 在arm11這端指到 0x00100000 的memory address

(init.s 看到是有啟動MMU,所以應該是Virtual address)

然後把share memory 參數給印出來.

arm11_clock_init();

//初始化 arm11這邊的clock,因為 arm11 沒進Power Collapse 的時候是由 TCXO 提供主頻.

然後用PLL 轉出不同的頻率給其他 unit 用. 所以在這設定.理論上應該不需要改.

不過想改CPU 頻率可以看裡面註解改在這,不過進OS就會被Kernel 接管了

接下來做 tag的動作不太清楚是在做甚麼.Maybe再確認 Linux的版本吧

smem_ptable_init

//這裡應該是要建 share memory table 第一個去call的function 是 smem_get_entry

smem_get_entry的內容會先檢查 SMEM是否有init好,然後得到傳入ID的address給heap

再檢查傳入的aize,最後回傳SMEM+heap offset 的 address,這邊應該只是在做SMSM的初始表而已.

重點在後面要怎麼用

??? board_init();
??? keypad_init();

接下來的 board initial 我的Linux忘記把Code CO 出來.. 以後再補充.

後面的我懶了...我挑重點講

flash_init?會透過Command 去讀取 flash id 及一些參數像是page size 等

然後會做個delay後,再去透過SMEM 檢查是什麼原因會到fastboot這邊.

通常Hard/soft,reset都會重跑到開頭檢查. 這裡是用 SMEM_APPS_BOOT_MODE 去取得結果.

接下來就做usbloader_init() 先 initusb,在boot_register_poll_func 應該是透過call back 去做USB通訊的動作.

在下來看現在是充電還是資料傳輸的狀態. 如果接下來是開進Linux就會去做 boot_linux_from_flash();

不然就到usbloader.c 做 Fastboot dpwnload?USB有插上的話.

大概Q8K 簡單的流程如上,接下來會把重心都放到 Kernel/Driver上.

像是Camera 等其他Driver?從 Driver ->?HAL -> Framework -> JNI 都簡單的介紹.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读