自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

關(guān)于MTK啟動過程詳解

移動開發(fā)
關(guān)于MTK啟動過程詳解是本文要介紹的內(nèi)容,主要是來了解MTK在啟動過程中的一些原理,具體內(nèi)容的實現(xiàn)來看本文詳解。

關(guān)于MTK啟動過程詳解是本文要介紹的內(nèi)容,主要是來了解MTK啟動過程中的一些原理。MT6305上電給基帶芯片供電,在一定時序條件后,給基帶芯片復(fù)位信號,開始了ARM核的啟動過程。要談啟動,我們必須熟悉Scatterfile、基帶資料的Memorymapping章節(jié)。Scatterfile定義了loadregion和excecuteregion,我們要關(guān)心系統(tǒng)運行時代碼、數(shù)據(jù)的地址分布。

Bootarm.s是一個重要的文件,與啟動過程有關(guān),其中的INT_Initialize函數(shù)是ARM啟動開始執(zhí)行的代碼。BSP所做的事情主要包括:

1、配置PLL,配置基帶芯片的EMI參數(shù),以讓系統(tǒng)能夠以最大的速度讀取外部存儲設(shè)備數(shù)據(jù),讓CPU以最大速度運行,從而縮短啟動過程。

2、做好runtime代碼及數(shù)據(jù)的準(zhǔn)備,確保excecuteregion的代碼及數(shù)據(jù)到位。

3、配置好ARM七種異常模式的堆棧,進(jìn)入RTOSnucleus的初始化。

4、nucleus留給客戶的初始化函數(shù)Application_Initialize,做了平臺該做的初始化工作,比如外部控制器的初始化等等。

RTOS

在分析系統(tǒng)問題,開發(fā)跨線程應(yīng)用時,必須熟悉RTOS。目前使用的RTOS是nucleus,盡管在BSP中看到了它對ThreadX的支持。不同的RTOS,實際上也是大同小異,但是具體的API或者參數(shù)會有不同,因此我們需要下載nucleus的API文檔,在需要了解細(xì)節(jié)時,可以翻閱此文檔。同時,TRACE32支持基于RTOS級別的調(diào)試,因此對RTOS的了解,有助于提高調(diào)試能力。

有點特殊的是,nucleus有LISR,HISR的概念,實際上它是一種給開發(fā)者的印象。它告訴開發(fā)者,中斷處理函數(shù)LISR要盡量的耗時短,以確保其它中斷能有機會及時響應(yīng)。HISR再處理略為次要些的工作,但耗時也不能太長,因為HISR比任何TASK的優(yōu)先級都高,我們應(yīng)該讓真正需要實時的工作獲取CPU的機會。

Application_Initialize中的mainp函數(shù),負(fù)責(zé)任務(wù)的創(chuàng)建。我們在代碼中見不到任務(wù)創(chuàng)建的函數(shù),只需要維護(hù)任務(wù)初始化參數(shù)數(shù)據(jù)結(jié)構(gòu)。對于系統(tǒng)的那些task信息,都保存在sys_comp_config_tbl變量中,我們看不到。但是MTK提供給客戶的custom_comp_config_tbl,客戶是可以修改的,在這里用戶可以定義自己的task。

關(guān)于任務(wù),需要關(guān)心數(shù)據(jù)結(jié)構(gòu)comptask_handler_struct。關(guān)于comptask_handler_struct成員的執(zhí)行順序,應(yīng)該是:comp_init_func在系統(tǒng)還未schedule即在Application_Initialize中完成,然后taskschedule后執(zhí)行comp_entry_func。comp_cfg_func、comp_reset_func、comp_end_func我認(rèn)為無太多意義。

task和module有什么區(qū)別?可以肯定的是,task是操作系統(tǒng)層面的概念,module是軟件平臺設(shè)計者因為某種需要而設(shè)計的,可能大家比我更清楚,但這種概念在具體工作中可能還是需要弄清楚。

到此,基于RTOS的各個TASK應(yīng)該都已經(jīng)調(diào)度起來。首先毫無疑問,idletask必須是優(yōu)先級最低的task。按照常理,系統(tǒng)會從最高優(yōu)先級的任務(wù)開始調(diào)度,至于如何跑到MMI顯示LOGO界面,在必要時,我們可以去研究。

GUI機制

至于MMIframewok,我未做太多了解,但任何GUI系統(tǒng)面對的都是最終的LCDbufffer。但不同的是,MTK的基帶芯片搞了個LCD控制器,并加了layer的概念,從硬件上支持2Dfunction和加速LCD的刷屏。對于上層的GUI,要做的是選擇哪個layer是active。

LCD控制器的刷屏機制。以6225為例,支持4layer。MTK資料對LCD控制器未做詳細(xì)的描述,是其對LCD接口塊圖的描述。但通過LCD控制器驅(qū)動,我們可以對LCD控制器內(nèi)部結(jié)構(gòu)做更多的假設(shè)。圖1中的Overlay,我們可以設(shè)想為一個專有的DMA控制器通道,目標(biāo)地址為LCD,源地址是layerbuffer。系統(tǒng)通過配置要刷哪幾層,配置alpha值來控制2D效果。這一目的的達(dá)到,硬件上有它的考慮,我們也沒有必要做太多確定性的假想。

需要說明的是,僅僅是這樣一張圖,我們應(yīng)該有更多的聯(lián)想。Layerbuffer都是從外部RAM開辟的內(nèi)存空間,LCD的訪問時序完全決定于如何配置LCD控制器。對Layerbuffer的讀寫,需要占用系統(tǒng)總線,即使再做總線上的區(qū)域規(guī)劃,外部RAM的數(shù)據(jù)總線是公共資源。對公共資源的訪問,就意味著并發(fā),意味著仲裁ARBITER。為什么在以前的項目中,出現(xiàn)一些關(guān)于LCD的莫名其妙的問題,不能說這里是根本原因,但我們應(yīng)該從系統(tǒng)的角度去注意到這點。我對資源的占有,就意味著別人的失去。以往被掩蓋的缺陷,可能會因為系統(tǒng)運行時的變化,暴露出來。這就是我認(rèn)為,有些系統(tǒng)問題,不能從代碼表面去分析,而要從ARM核的角度,從同cache,BUS,controller等外圍設(shè)備之間的聯(lián)系來系統(tǒng)的分析問題。

關(guān)注一下開機LOGO的顯示,是在uem_poweron_timer_expiry_hdlr函數(shù)中,同時這里做了latchpower的動作。還有潛力,提前顯示出LOGO。

內(nèi)存分配機制

在MTK的資料中,介紹了它的內(nèi)存管理機制,有3種:ADM、Controlbuffer、SystemMemory。后兩個是系統(tǒng)使用的,與上層應(yīng)用無關(guān)。但是我對kal_system_alloc也做了初步分析。

sys_mem_ptr,其估計應(yīng)該指向的是System_Mem_Pool,debug_mem_ptr,其估計應(yīng)該指向的是debug_Mem_Pool。經(jīng)過初步分析,kal_system_alloc就是從System_Mem_Pool做簡單的加法操作,sys_mem_left_size就是System_Mem_Pool還剩下多少。kal_system_alloc從sys_mem_ptr開始來計算要取的內(nèi)存。ctrl_buf是通過kal_system_alloc的內(nèi)存,然后再通過NU_Create_Partition_Pool創(chuàng)建POOL。系統(tǒng)的一些taskstack.等也都是通過kal_system_alloc來分配的。

也就是說,Controlbuffer、SystemMemory用的都是System_Mem_Pool的空間。而System_Mem_Pool可以查到,是在custom_configmem函數(shù)中配置。

ADM就完全沒有使用操作系統(tǒng)提供的內(nèi)存管理算法,是平臺自創(chuàng)了一套。開發(fā)者,可以自己開辟一個POOL,自己在這個池用ADM提供的內(nèi)存管理API完成內(nèi)存的動態(tài)管理。具體的分配算法,就沒有再細(xì)看,跟一些通用的內(nèi)存分配算法應(yīng)該一致。但是在以前調(diào)試一個問題的時候,應(yīng)該是可以斷定,ADM在每一個allocnode前后都加了GAP調(diào)試區(qū),來判斷是否被overwrite。

至于系統(tǒng)中,到底是用了多少塊內(nèi)存用于ADM,各塊內(nèi)存又是讓哪些應(yīng)用在共享,開發(fā)者可能更清楚。在系統(tǒng)中是否建立了對內(nèi)存動態(tài)分配的監(jiān)控機制,比如查詢內(nèi)存泄漏、動態(tài)內(nèi)存使用效率等等。

文件系統(tǒng)

文件系統(tǒng)用的是FAT格式,最關(guān)鍵的是如何MOUNT存儲設(shè)備,如何匹配文件系統(tǒng)讀寫接口。MTK通過表格的形式來讓客戶選擇支持的flash,真的是很方便,考慮太周到。

編譯機制

MTK的makefile,寫的很復(fù)雜,有perl腳本,也有make腳本,但框架結(jié)構(gòu)很好。雖然我對makefile結(jié)構(gòu)通讀了一遍,但沒有仔細(xì)花時間對此形成文檔。

方案印象

MTK軟件平臺,接觸了一年,總體感覺其底層代碼寫的很工整,結(jié)構(gòu)很清晰。越到上層,代碼就顯的龐大凌亂,結(jié)構(gòu)性和可讀性都不強。如果把芯片設(shè)計也說上,我覺得MTK的基帶芯片設(shè)計很智慧,針對特定的多媒體手機應(yīng)用,設(shè)計出專門的控制器嵌入芯片內(nèi)部。像uart控制virtrualfifo和camera的resizer以及l(fā)cdcontroller,用低成本控制器來快速完成邏輯,從而減輕CPU的負(fù)擔(dān),提高芯片的整體性能。在其他多媒體處理器中,都是不多見的。

與業(yè)界認(rèn)為從事MTK平臺開發(fā)的技術(shù)含量低恰恰相反,我認(rèn)為MTK方案技術(shù)含量非常高。MTK軟件平臺的代碼開放程度也不低,MTK的技術(shù)支持也非常有力而迅速,以MTK平臺為基礎(chǔ)的終端承載了最豐富多樣的應(yīng)用。MTK方案給希望對手機平臺有深入而全面了解的同事提供了機會。

基于MTK平臺的產(chǎn)品開發(fā)

有那么多的公司在做基于MTK平臺的產(chǎn)品,競爭那么激烈,研發(fā)上如何在競爭中體現(xiàn)優(yōu)勢?硬件上,大家都一樣。軟件上,也是一樣。你可以有,別人也可以有或者偷,別人可以有,我們也可以有或者偷。最多是差個把月,怎么辦。一個中心兩個基本點。以服務(wù)好客戶為中心,保證兩個基本點,一是要快,二是差異。

拉不到客戶什么就不要做了。在大家都差不多的情況下,我們以客戶為中心,快速的滿足客戶需求,提供產(chǎn)品。這樣能拉住客戶,讓客戶找不到離開的理由。第二是產(chǎn)品差異,是創(chuàng)新。如果有產(chǎn)品創(chuàng)新最好,要么降低了成本,要么吸引了消費者。但這兩點中,還是快字最重要,這是可以通過團(tuán)隊專業(yè)實力和激情來保證的。但是創(chuàng)新,有運氣的成分,需要研發(fā)同市場碰撞出火花。鼓勵和激勵創(chuàng)新,但不能只靠產(chǎn)品創(chuàng)新一定會出現(xiàn)。

小結(jié):

關(guān)于MTK啟動過程詳解的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對你有所幫助!

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-06-28 13:27:13

ARM Linux

2010-05-06 14:05:15

Unix系統(tǒng)

2021-09-28 15:03:06

Linux內(nèi)核arm

2009-08-11 09:03:45

Windows 7系統(tǒng)啟動

2011-07-28 10:34:38

Cocoa 程序 啟動

2014-06-23 10:31:09

Android啟動過程

2011-08-31 10:20:26

MTK驅(qū)動開發(fā)

2009-12-03 10:00:46

Linux系統(tǒng)啟動

2011-08-31 10:37:06

MTK開發(fā)入門

2012-02-20 14:47:08

JavaPlay

2018-03-13 13:00:03

Linux運維啟動分析

2012-08-16 09:07:57

Erlang

2024-09-11 09:25:03

Tomcat組件PREP

2021-07-02 06:34:53

Go語言sysmon

2011-08-30 16:32:41

MTK開發(fā)環(huán)境

2010-07-05 17:38:39

IIS 7.0 FTP

2019-05-27 14:43:49

Tomcat架構(gòu)部署

2020-04-20 21:30:51

Tomcat部署架構(gòu)

2023-03-24 14:52:27

AbilityPage應(yīng)用

2018-10-18 14:06:15

Linux系統(tǒng)過程
點贊
收藏

51CTO技術(shù)棧公眾號