<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁(yè) > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > Android平臺(tái)Bootloader的刷屏功能擴(kuò)展設(shè)計(jì)

          Android平臺(tái)Bootloader的刷屏功能擴(kuò)展設(shè)計(jì)

          作者: 時(shí)間:2013-01-10 來(lái)源:網(wǎng)絡(luò) 收藏

          摘要:Android系統(tǒng)在正常啟動(dòng)中,刷屏功能一般在內(nèi)核中執(zhí)行,而的任務(wù)應(yīng)該是執(zhí)行硬件初始化,并盡快跳轉(zhuǎn)到Linux內(nèi)核。在啟動(dòng)過(guò)程中使能一個(gè)顯示驅(qū)動(dòng),實(shí)現(xiàn)刷屏功能,并不違背這一目標(biāo)。本文通過(guò)對(duì)的原理分析和嵌入式芯片C6310中的研究,設(shè)計(jì)了Bootloader中LCD硬件初始化和軟件驅(qū)動(dòng)程序。該設(shè)計(jì)完善了Bootloader的擴(kuò)展功能,加快了手機(jī)動(dòng)畫的實(shí)現(xiàn),改善了客戶的使用體驗(yàn)。
          關(guān)鍵詞:Bootloader;;

          引言
          Android自2011年以來(lái)實(shí)現(xiàn)了計(jì)算機(jī)誕生以來(lái)最快速度的用戶群體增長(zhǎng),目前Android以每天85萬(wàn)新激活數(shù)的速度快速征服世界,在世界范圍內(nèi)成為占有率最高的智能手機(jī)操作系統(tǒng)。根據(jù)賽諾的調(diào)研報(bào)告,Android系統(tǒng)在中國(guó)的市場(chǎng)份額高達(dá)74.7%。然而很多硬件制造商在舊設(shè)備的升級(jí)問(wèn)題上動(dòng)作緩慢。Android 4.0的配置要求比起之前的Android系統(tǒng)有較大的提高,導(dǎo)致很多廠商在中低端市場(chǎng)的新機(jī)型和主推機(jī)型都無(wú)法達(dá)到最低配置要求。根據(jù)市場(chǎng)的需求,低端Android手機(jī)存在著巨大商機(jī)。在低價(jià)格的情況下,如何實(shí)現(xiàn)高配置的要求,成為手機(jī)開(kāi)發(fā)商研究的重點(diǎn)。
          對(duì)于Android系統(tǒng),Bootloader是基于特定平臺(tái)來(lái)實(shí)現(xiàn)的。Booloader是否解鎖關(guān)系到各方的利益,解鎖Bootloader將會(huì)給用戶帶來(lái)很大的好處,Android用戶將能夠自行根據(jù)需要刷寫固件,去掉可能導(dǎo)致扣費(fèi)的運(yùn)營(yíng)商服務(wù),得到更加多樣的Android體驗(yàn)。因此,本文根據(jù)定制的實(shí)際平臺(tái),提出了一種面向客戶需求的實(shí)現(xiàn)Bootloader擴(kuò)展功能的設(shè)計(jì)方案。

          1 Bootloador的基本原理及功能介紹
          Bootloader(系統(tǒng)啟動(dòng)加載器),其實(shí)就是在系統(tǒng)啟動(dòng)之前運(yùn)行的一段程序。Bootloader的作用是對(duì)硬件設(shè)備初始化,建立內(nèi)存空間映像圖,從而把系統(tǒng)的軟件環(huán)境帶到一個(gè)合適的狀態(tài)。這樣,系統(tǒng)在調(diào)用內(nèi)核時(shí)就準(zhǔn)備好真正的環(huán)境,最終引導(dǎo)系統(tǒng)正常啟動(dòng)。對(duì)于Android系統(tǒng),通常并沒(méi)有PC機(jī)那樣的周件程序BIOS,因此Bootloader必須完成整個(gè)系統(tǒng)的加載任務(wù)。而且對(duì)于嵌入式系統(tǒng),其硬件的差別也是很大的,在操作系統(tǒng)啟動(dòng)之前,必須完成這些硬件的初始化工作,這就導(dǎo)致嵌入式系統(tǒng)Bootloader的功能和具體實(shí)現(xiàn)都比PC系統(tǒng)復(fù)雜得多。
          LK(Linux Kernel)是小內(nèi)核小操作系統(tǒng),是AndroidBootloader的核心。在高通代碼中,Android Bootloader位于bootable\bootloader\1k目錄下,Bootloader的功能性設(shè)計(jì)主要在app\aboot.c下,aboot_init函數(shù)是LK的功能入口點(diǎn)。aboot_init的執(zhí)行過(guò)程如下:
          ①設(shè)置NAND/EMMC讀取信息頁(yè)面大小;
          ②讀取按健信息。判斷是正常開(kāi)機(jī)、進(jìn)入fastboot,還是進(jìn)入recovery模式;
          ③從NAND中加載內(nèi)核;
          ④啟動(dòng)內(nèi)核。實(shí)現(xiàn)刷屏功能可以在讀取按鍵之前,所以Bootloader擴(kuò)展功能的設(shè)計(jì)流程如圖1所示。

          本文引用地址:http://www.ex-cimer.com/article/159564.htm

          b.JPG



          2 及外圍設(shè)備連接
          2.1 LCD控制器介紹
          LCD控制器是Android手機(jī)開(kāi)發(fā)項(xiàng)目中C6310芯片的必備模塊,它負(fù)責(zé)將需要顯示的數(shù)據(jù),如操作界面、圖像等送給LCD顯示設(shè)備。在手機(jī)的應(yīng)用中,LCD顯示設(shè)備主要有以下幾類:被動(dòng)顯示模式STN屏、主動(dòng)顯示模式TFT屏,以及主動(dòng)模式OLED屏。根據(jù)顯示顏色不同,又可以分為單色屏和彩色屏。LCD控制器不直接和LCD顯示屏相連,而是和LCD驅(qū)動(dòng)器相連,這樣簡(jiǎn)化了接口信號(hào)數(shù)量和顯示控制過(guò)程。LCD控制器時(shí)序由控制信號(hào)和圖像數(shù)據(jù)兩部分組成,其中控制信號(hào)包括VCLK、HSYNC、VSYNC,分別為像素時(shí)鐘信號(hào)、行同步信號(hào)、幀同步信號(hào)。作為幀同步信號(hào)的VSYNC,每發(fā)出一個(gè)脈沖,都意味著新的一屏圖像數(shù)據(jù)開(kāi)始發(fā)送。而作為行同步信號(hào)的HSYNC,每發(fā)出一個(gè)脈沖,都意味著新的一行圖像資料開(kāi)始發(fā)送。在幀同步以及行同步的頭尾都必須保留回掃時(shí)間。這樣的時(shí)序安排起源于CRT顯示器電子槍偏轉(zhuǎn)所需的時(shí)間,但后來(lái)成為實(shí)際上的工業(yè)標(biāo)準(zhǔn),因此TFT屏也包含了回掃時(shí)間。
          C6310芯片內(nèi)部集成了一個(gè)LCD控制器,通常配置寄存器來(lái)控制其工作,命令和圖像數(shù)據(jù)的傳輸由LCD主控制器自動(dòng)完成。C6310的LCD控制器采用并行或串行接口工作時(shí),最多支持3層圖像合并(L1、L2、L3),L4層用作命令存儲(chǔ)空間。命令存儲(chǔ)空間中一個(gè)命令有20位,占用32位空間。第一個(gè)0~17位對(duì)應(yīng)LCD_CMD寄存器中0~17位;第19位用作命令、數(shù)據(jù)切換位。


          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();