QSD8x50開機流程
QSD8x50開機流程 (arm9)?如同先前所介紹的QSD850是由兩顆ARM為主體 這裡我們先介紹ARM9的開機流程,由於arm9的code沒有Open.所以只大概介紹一下.. arm9的開機步驟如下 : PBL (Primary Boot Loader) ->? PBL由於是ROM所以理論上不會有code, DBL的流程如下? FSBL好像是當初為了符合WM7所設定的,怕大家亂刷ROM. 不過目前似乎都沒有再用了. OSBL流程如下:
以上程序做完理論上arm9應該就完成開機了. 這一部分將會介紹進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(); 接下來的 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 都簡單的介紹. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |