資料介紹
本文試圖通過代碼來深入剖析Qualcomm手機開機的整個過程,即從按下開機鍵一直到出現(xiàn)待機界面,Qualcomm的手機軟件在整個流程中究竟完成了哪些工作。本文的主要目標是理清手機的初始化流程,并為今后Amoi定做初始化工作提供一個參考。
一、開機的簡要流程分析
Qualcomm的平臺軟件支持兩種啟動方式:一種是Nor Flash啟動方式,另外一種就
是Nand Flash啟動方式。Nor Flash啟動方式就相當于硬件直接找到一個入口點開始執(zhí)行代碼,相比較而言會 比較簡單,且Amoi沒有采用此種方式,所以本文對于這種方式不做詳細分析。另外一種就是Nand Flash啟動方式,這種方式和PC的啟動方式比較相像,也是Amoi采用的Boot方式,下面將詳細分析在此方式下面的開機過程。
按下開機鍵之后,將產生一個時鐘中斷,從而通知AMSS主芯片的Boot Load硬件去將放置于Nand Flash上面的第一個Block(8K)里面的Boot代碼Copy到內核內存(RAM,這個內存應該是CPU自帶的內存,同后面提到的SDRAM有一定區(qū)別,可以把它當作CPU的Cache)的0xFFFF0000地址,并開始執(zhí)行Boot代碼。Boot的主要任務是完成整個系統(tǒng)的硬件初始化工作(類似于PC上面的BIOS所完成的硬件自檢工作,至于Boot的詳細工作機制,后文會有詳細描述)。Boot所完成的工作里面,最重要的一件事就是會將整個手機軟件代碼(AMSS軟件包)拷貝到SDRAM中,并最后將控制權交給AMSS軟件。說白了,就是Boot執(zhí)行完成之后,代碼的執(zhí)行點將由Boot跳轉到AMSS軟件的的入口點函數main()。(此函數在mobile.c里實現(xiàn))。

代碼運行到了Main()之后,在這個函數里面將完成操作系統(tǒng)(rex)的初始化工作,其實現(xiàn)方法是調用 rex_init()。Rex_init()完成的工作很簡單:
1.完成操作系統(tǒng)必要的一些數據結構(timer鏈表、任務鏈表等))的初始化之外;
2.接下來,它創(chuàng)建了三個任務,分別是:rex_idle_task、rex_dpc_task和tmc_task。
Idle任務沒什么好解釋的,目前這個任務為空,什么也沒做,dpc_task目前不知道是做什么的,暫時可以不用管。前面的這兩個任務都屬于操作系統(tǒng)層面的,由操作系統(tǒng)來維護,和手機軟件關系不大。哪一個和手機軟件關系大呢?答案是:tmc_task。大家可以把這個當作操作系統(tǒng)的入口(主)任務,也可以把它當作整個手機軟件的入口任務。即AMSS軟件里的所有其它任務的創(chuàng)建和維護就是由這個tmc_task來完成的。
到此為止,整個AMSS軟件還并沒有跑起來,只是跑到了tmc_task里面了。在tmc_task里面,會調用tmc_init()來完成整個AMSS軟件包的初始化工作,其中最重要的一項工作就是調用tmc_define_tasks()將AMSS軟件包所有需要的任務都創(chuàng)建起來了。比如說slee_task、dog_task、cm_task、wms_task、ui_task等。這些任務,一般不需要直接和AL層軟件打交道,但請大家記住,手機上所有功能的實現(xiàn)最根本點就是由這些服務組件(Service Task)來完成的。將來大家跟蹤一個具體的功能模塊時,比如說通話模塊,如果需要,可以再去深入研究它的具體實現(xiàn)。
好了,到現(xiàn)在為止,所有的AMSS核心軟件就全部跑起來了(手機的功能模塊,在軟件方面就體現(xiàn)為OS層面的一個任務)。但現(xiàn)在大家還根本看不到Brew和AEE的影子。呵呵,各位不要急。到了這個層面之后,我想稍微多說幾句。最早的Qualcomm平臺,比如說5xxx系列,是根本沒有Brew的,那個時候的AL(Application Layer)層軟件開發(fā),是直接調用底層Service task所提供的API來完成相應的工作的。從這種角度來看的話,顯然那時的開發(fā)是比較郁悶和難度較高的。不過,到了65xx之后,Qualcomm平臺引入了Brew,手機開發(fā)商就沒必要去從這么底層(Service API)的層面進行手機開發(fā)了,他們完全可以基于Brew來實現(xiàn)一臺手機的所有功能(Qualcomm給我們的參考代碼,就是全Brew平臺的)。
Brew的運行環(huán)境AEE是如何跑起來的呢?關鍵在于ui_task(),由于ui_task和我們手機開發(fā)的關系非常密切,其地位也相當重要,所以,后文我將單獨對它進行一個深入的研究與分析。到目前為止,大家只需要知道ui_task將AEE加載起來了,并且,它起到了一個中間層的作用,即所有AMSS底層服務組件的消息,都將經由ui_task而轉到AEE,并最終轉到具體的App(Applet)的執(zhí)行代碼里面(HandleEvent())。
注意:
1.上述的開機過程,在每一次按開機鍵都需要走一遍,即關機之后,整個系統(tǒng)的所有功能都將消失,而不像有些手機,看起來是關了機,但實際上底層還是有一些軟件模塊在跑。為什么可以肯定地說上述開機過程每次都必須走一遍,原因很簡單,因為我們的平臺軟件是基于Nand Flash啟動的,所有的代碼都需要Copy到SDRAM才能運行,而關機斷電之后,SDRAM里的東東會全部丟失,所以,毫無疑問,上述的過程必須每次開機都執(zhí)行;
2.關機的過程相對比較簡單,系統(tǒng)檢測到關機中斷之后,將調用tmc_powerdown_handler()來完成關機動作,它將把所有AMSS的任務都Stop掉,并最后調用rex_exit()退出Rex,從而完成整個關機動作。
3.顯然,關機動作前,如果有必要,每一個任務必須將它希望保存的信息保存到Flash上面,以便下次開機時可以得到這些信息;
?
- 電磁爐的維修全過程分享 85次下載
- 手工制作pcb全過程 0次下載
- 正激有源鉗位的詳細分析 68次下載
- 用C語言開發(fā)DSP系統(tǒng)的全過程的講解 22次下載
- IGBT制作全過程資料下載
- 360 N5手機碎屏拆解維修全過程 2次下載
- 功率放大電路的仿真資料詳細分析 30次下載
- 如何實現(xiàn)LTE無線網絡優(yōu)化案例的詳細分析 22次下載
- Uboot啟動的全過程詳細資料分析 6次下載
- Buck變換器原理詳細分析 30次下載
- uboot1-1-6代碼詳細分析 25次下載
- 圖解詳說proteus7.4安裝全過程 0次下載
- 組裝電腦全過程視頻教程
- 水利工程全過程造價管理關鍵因素分析
- CPU制造全過程
- 詳細分析MOSFET開關過程米勒效應的影響 8.6k次閱讀
- 芯片制造全過程 1.3w次閱讀
- 鴻蒙系統(tǒng)逐步跟蹤系統(tǒng)調用實現(xiàn)全過程 2.3k次閱讀
- 基于Boonton功率表的脈沖射頻部件及系統(tǒng)的詳細分析 1.4k次閱讀
- 繪制原理圖的基本規(guī)測和各種電氣控制原理圖詳細分析 6.7k次閱讀
- 使用機器視覺進行藥片缺陷檢測的詳細分析 5.4k次閱讀
- 物聯(lián)網的產業(yè)生態(tài)是怎樣的詳細分析概述 5.7k次閱讀
- 詳細分析高速通信和數據中心的時序要求以及時鐘振蕩器解決方案 8.6k次閱讀
- openwrt啟動過程詳細分析 1.4w次閱讀
- 基于代碼無法重用的詳細分析 3.8k次閱讀
- 詳解bootloader的執(zhí)行流程與ARM Linux啟動過程分析 1.1w次閱讀
- 對電子工藝總結的詳細分析 1.1w次閱讀
- RFID系統(tǒng)產生的安全隱患及針對性的解決策略方案詳細分析 2.4k次閱讀
- uboot編譯過程詳細分析 3.6w次閱讀
- 焊接技術詳細分析 2.2k次閱讀
下載排行
本周
- 1MDD品牌三極管BC807數據手冊
- 3.00 MB | 次下載 | 免費
- 2MDD品牌三極管BC817數據手冊
- 2.51 MB | 次下載 | 免費
- 3MDD品牌三極管D882數據手冊
- 3.49 MB | 次下載 | 免費
- 4MDD品牌三極管MMBT2222A數據手冊
- 3.26 MB | 次下載 | 免費
- 5MDD品牌三極管MMBTA56數據手冊
- 3.09 MB | 次下載 | 免費
- 6MDD品牌三極管MMBTA92數據手冊
- 2.32 MB | 次下載 | 免費
- 7STM32G474 HRTIME PWM 丟波問題分析與解決
- 1.00 MB | 次下載 | 3 積分
- 8新能源電動汽車高壓線束的銅鋁連接解決方案
- 2.71 MB | 次下載 | 2 積分
本月
- 1愛華AIWA HS-J202維修手冊
- 3.34 MB | 37次下載 | 免費
- 2NB-IoT芯片廠商的資料說明
- 0.31 MB | 22次下載 | 1 積分
- 3PC5502負載均流控制電路數據手冊
- 1.63 MB | 22次下載 | 免費
- 4H110主板CPU PWM芯片ISL95858HRZ-T核心供電電路圖資料
- 0.63 MB | 6次下載 | 1 積分
- 5UWB653Pro USB口測距通信定位模塊規(guī)格書
- 838.47 KB | 5次下載 | 免費
- 6技嘉H110主板IT8628E_BX IO電路圖資料
- 2.61 MB | 4次下載 | 1 積分
- 7蘇泊爾DCL6907(即CHK-S007)單芯片電磁爐原理圖資料
- 0.04 MB | 4次下載 | 1 積分
- 8蘇泊爾DCL6909(即CHK-S009)單芯片電磁爐原理圖資料
- 0.08 MB | 2次下載 | 1 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191439次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183353次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81602次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73822次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App





創(chuàng)作
發(fā)文章
發(fā)帖
提問
發(fā)資料
發(fā)視頻
上傳資料賺積分
評論