首頁>技術>

嵌入式系統啟動流程嵌入式的基本架構硬體基本由三大塊組成:

CPUDDRFLASH(EMMC)儲存

軟體結構

圖中可以看到,軟體結構基本可以分為四個部分。1、Bootloader區存放的是Bootloader,它負責嵌入式系統最初的硬體初始化、驅動和核心載入。2、引數區不是必須的,通常存放了一些系統引數,並且通常這個區是沒有檔案系統,引數以原始資料的格式來存放。3、核心映象區存放的Linux核心壓縮映象,它被解壓後運行於記憶體,作為嵌入式裝置的Linux作業系統。4、檔案系統區存放經過壓縮的檔案系統,它會被Linux核心解壓並掛載,並作為各種應用程式、檔案的主要載體。這四個部分都是存放在硬體的FLASH中。以mstar平臺為例,BootLoader對應的是mboot,引數區對應的是mboot操作儲存的那部分變數,這部分是mstar預留的一個特別分割槽,如果不執行emmc擦除,這部分在升級的時候是不會被清空的。核心映象對應的就是編譯出來的核心,檔案系統在安卓系統上可以看成system等分割槽。嵌入式系統從上電開始啟動,後續基本分為三個過程:

啟動載入程式BootLoader,mstar的是uboot,海思的是fastboot,基本上是一個東西。Boot執行後引導linux核心開始執行,載入相關必備驅動核心載入檔案系統等,執行相關開機應用,系統開始執行。

BootLoader的啟動當晶片上電後,會從一個固定的地址開始執行一段彙編程式。這段程式的作用是配置ddr,cpu等一些基本屬性,然後會呼叫boot的啟動程式碼,之後boot就會開始執行。(ps:通常來說,cpu可以讀寫flash裡面的程式,但是是不能直接執行程式的。一般的就有2種處理,硬體直接用Nor flash,cpu可以執行nor flash上的程式,另外一種就是把nand flash上的前4K資料通過硬體方法搬運到DDR,然後cpu從這個指定的地址執行。)以mstar平臺為例,當拿到一塊空片或者把EMMC整個擦除後,上電會看到一串DDR相關的列印。

這部分是由固化在主晶片裡面的程式執行並列印的,程式執行後,會做主要硬體的自檢,從這個列印一定程度上可以用來判斷當前主機板在DDR、主晶片是否有問題.核心的啟動boot在啟動完成後,會把核心解壓到DDR指定的一個地址,之後就會跳轉到這個地址開始執行。以mstar為例,在mboot命令列用print可以看到如下變數

其中的bootcmd就是啟動核心的命令,在mboot命令列下執行這串命令,核心就會開始啟動,並開始執行整個linux和安卓。而另一個bootargs變數是mboot傳遞給核心的環境變數,裡面是一些對控制檯串列埠,記憶體分配等一些配置。如debug口的複用,就是通過修改這裡,將控制檯配到另外一個串列埠,這樣就實現了debug作為其它串列埠的複用。某些特殊情況下需要mboot傳變數到核心,也可以通過在這裡新增一個變數來實現。檔案系統啟動核心啟動後,會開始初始化各個子系統,然後開始掛載檔案系統。這裡主要是建立各個 系統目錄,檔案系統建立後,linux系統基本上就已經執行起來了。安卓系統啟動Linux在檔案系統這些準備後,會啟動一個init的程序。這個程序會載入init.rc,之後就開始一系列的配置,這裡後續再說明。linux核心安卓是基於linux核心來實現,核心的主要功能是實現對硬體的控制。安卓系統實質上是一個執行在linux上的java虛擬機器,因此核心大部分的操作跟嵌入式linux操作基本上是一樣的,如使用make menuconfig新增或刪除模組,驅動的新增和操作方式等等。但同時安卓針對核心也做了自己的改動,常見的如Binder IPC,OOM等。實際開發中核心部分涉及不多,主要可能會有部分開啟某個驅動或者新增遙控器的需求,這裡按照對應的說明新增即可。系統執行庫這部分主要有兩部分,一個是系統庫,主要是提供了網路,影象,多媒體,資料庫的支援。另外一個是執行時,這主要指安卓的核心庫如framework中很多的 cpp檔案編譯的庫,還有Dalvik虛擬機器。目前在開發的平臺中,像mstar的tvos,和海思的hippo部分,都是在這一層做處理。

應用框架層這層主要是供應用層呼叫的各種API,以及視窗,檢視等的管理。這部分主要集中在framework部分,基本是java程式碼。這部分跟系統執行庫部分介面較為緊密,很多功能最終都是通過jni呼叫系統執行庫來實現。mstar和海思都有在這層做自己的介面以及處理,如mstar的tvapi和tv2、還是的hippo下的東西。這兩部分是系統經常需要修改的地方。

應用層安裝在手機上的應用程式都是在這個層。

中介軟體目前正在推進系統中介軟體的使用,整個的思路實際就是將應用層的框架打包成IST自己的介面,然後用呼叫這些介面來實現常用的邏輯功能和UI顯示。一些原本放再系統的應用框架裡面的邏輯功能和UI,都統一單獨出來,放在中介軟體中來實現,而這部分基本是脫離於平臺存在的,後續開發,也主要以這一塊為主,底層只負責提供控制硬體的介面。因此應用的開發人員對於應用框架層都需要有了解,而不僅僅是UI那塊東西。硬體基本架構目前公司在做的主機板主要功能就是顯示+觸控,同時配套其它需要功能。顯示部分主要是主機板接收各種訊號源,比顯示到螢幕上。這裡涉及到兩部分,點屏和訊號源輸入。每個主機板在開始除錯時,先要做的就是點屏。屏的型別主要有4K和2K,但是目前客戶已經基本上在使用4K的螢幕,2K的是在部分廣告機或者小顯示器上用到,配屏一般使用原廠提供的預設屏參就可以點亮。2K 一般用的是LVDS,主要涉及到位數(6/8/10bit),奇偶,引數4K的屏都是使用VBO訊號,主要涉及到一個單雙分割槽的修改。另外還有不是主晶片直接點屏,而是通過一個out晶片來點屏的,這個時候都是需要主晶片輸出一個固定格式的訊號給到out晶片,然後進行點屏。

訊號源目前常用的訊號源有:DTV/ATV,AV,YPBPR,VGA,HDMI,DP,DVI,TYPE-C。DTV/ATV,AV,YPBPR,VGA都是模擬訊號,HDMI,DP,DVI,TYPE-C是數字訊號。對於DTV/ATV,需要新增對應的tuner驅動才能接收到訊號。訊號中,AV/YPBPR/VGA/HDMI一般都是主晶片預設就有的介面,而DP,DVI,TYPE-C都是需要通道晶片轉化成hdmi再給到主晶片。當主晶片的HDMI介面不夠的時候,就需要使用到HDMI-SWITCH來擴充套件HDMI口。目前在用的HDMI-SWITCH有兩種控制型別:I2C,IO口。當切換到HDMI的擴充套件口時,需要控制SWITCH晶片切換到對應的port口。

HDMIHDMI是目前最常用的訊號,也是出現問題較多的訊號。下面是HDMI經常涉及的幾個概念,後續再針對HDMI做一些詳細的說明。HDMI標準,HDMI1.4和HDMI2.0。最簡單的區分就是能不能支援4k2k@60hz的。對於主機板來說,一般都是支援的,對於訊號源來說,有些訊號源是支援的,有些是不支援。EDID,用來告知訊號源當前的顯示器對視訊和音訊的支援情況。常用的HDMI輸出裝置都是會先讀取這個edid,然後視情況輸出訊號。所以有些時候沒有訊號的,排查EDID相關的問題。HDCP,HDMI用來加密訊號的,分為HDCP1.4和HDCP2.2CEC,通過輸入訊號的裝置來控制顯示器HPD,訊號源的一個檢測機制,當訊號源插入的時候,這個腳是高的,當拔出的時候是低的。經常通過操作這個腳來模擬HDMI的插拔。DP,DVIDP是通過晶片轉成HDMI,使用基本跟HDMI類似TYPE-C音訊在mstar的平臺上,需要針對不同的訊號源配置不同的音訊輸入。音訊輸出也分為I2S和模擬的,需要根據實際情況做匹配。

觸控觸控主要是供切到對應的訊號源後,可以給對應的訊號源裝置提供一個觸控輸入,這樣可以直接在顯示屏上操作訊號源裝置。目前常用的觸控用兩種,串列埠+usb 、雙usb。具體參見介紹觸控的文件。

USB跟隨這部分跟觸控是一體的。當切換到不同訊號源時,根據不同需求來控制public USB口,確認是否需要跟著訊號源一起切換。這個時候將USB插入主機板的的時候,USB直接是接在了當前顯示訊號源所在的裝置上。

網路交換有的主機板為了讓OPS和主機板通過一根網線就能上網,會在主機板上加一個網路交換晶片。目前對於這個晶片一般不用做太多控制,但為了支援WOL功能,需要在待機的時候給網路交換晶片供電。WOL功能主要是指主機板待機後,可以通過網路傳送喚醒包來喚醒主機板。晶片都是預設支援的,對於有網路交換晶片的主機板,只需要給交換晶片待機的時候供電就可以。

WIFI主機板的WIFI使用的都是USB介面,主機板一般會有一些預設支援的晶片型別。對於沒有的,需要自己重新編譯和新增驅動。新增方法見相關文件。

RS232目前所有的主機板都是需要支援使用RS232來控制主機板,RS232用的也是串列埠協議。在mstar的主機板上,RS232跟4pin的debug口是複用的同一個口。這裡有一個拓展功能就是通過網路來實現RS232一樣的功能。這部分只是在命令解析部分不同,最終命令處理的地方是一樣的。

麥克風模組現在用的麥克風模組,就是一個USB麥克風。但是需要給模組輸入一個I2S訊號來做消回聲處理,這裡就涉及到I2S和模擬聲音同時輸出的問題。

RTC時鐘晶片,用來在斷電的情況下儲存時間。海外的一般使用電容電池,國內的使用的是一般電池。

HDMIOUT可以同時點屏和輸出一路HDMI訊號,目前在用的主要是MN869121和NT68411。其中MN869121需要自己修改程式碼,NT68411是直接燒錄韌體。功放晶片調整晶片輸出音訊,需要配置輸入的音訊格式和晶片驅動,輸入的音訊格式為I2S或者模擬

51
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 安全刪除Elasticsearch資料節點