一種汽車儀表顯示系統的啟動方法、裝置及存儲介質與流程
1.本發明屬于車輛工程技術領域,尤其涉及一種汽車儀表顯示系統的啟動方法、裝置及存儲介質。
背景技術:
2.汽車儀表顯示系統是汽車與駕駛員進行信息交互的界面,為駕駛員提供必要的汽車運行信息,同時也是維修人員發現和排除故障的重要工具。而現在的汽車儀表大多是全液晶屏幕制成,汽車儀表通常由地板數據處理mcu即微控制單元和核心板高性能soc即系統級芯片組成,儀表的全液晶屏幕由soc驅動顯示,數據存放在外置的emmc即內嵌式存儲器中,且soc內部需要運行大型操作系統時,系統調用時間增加,使得在汽車儀表顯示系統開機時會出現啟動慢的情況,同時限制了系統的靈活性,也影響了汽車儀表顯示系統的安全性。
技術實現要素:
3.有鑒于此,本發明提供了一種提高汽車儀表顯示系統啟動速度、安全故障隔離和提升使用體驗的汽車儀表顯示系統的啟動方法、裝置及存儲介質,來解決上述存在的技術問題,具體采用以下技術方案來實現。
4.第一方面,本發明提供了一種汽車儀表顯示系統的啟動方法,包括以下步驟:獲取汽車儀表顯示系統的預加載指令,并對預加載指令進行編譯獲取linux內核的屬性信息,其中,汽車儀表顯示系統包括宿主機、客戶機和linux內核,宿主機通過linux內核與客戶機連接,屬性信息包括輸入驅動信息、輸出驅動信息和版本;根據linux內核的屬性信息對宿主機進行虛擬化得到lxc容器,并在客戶機內建立與lxc容器對應的分區存放根目錄記為rootfs;linux內核將lxc容器掛載至rootfs所在的分區,啟動lxc容器與rootfs所在的分區對應的操作系統以完成汽車儀表顯示系統的正常開機。
5.作為上述技術方案的進一步改進,啟動lxc容器和初始化與rootfs所在的分區對應的android系統以完成汽車儀表顯示系統的正常開機,包括:獲取lxc容器的運行環境并根據運行環境啟動容器環境的內部命令生成容器運行指令,并在android系統的內核中運行容器運行指令;根據容器運行指令獲取容器的進程信息,根據進程信息啟動android系統中的init進程得到android的核心服務,其中,容器的進程信息包括init.lxc、sh和ps,init.lxc為容器的啟動程序,sh為容器內部的shell,ps為調用的命令。
6.作為上述技術方案的進一步改進,android系統的最底層為linux的輸入子系統,客戶機作為linux輸入子系統的用戶,通過對操作linux輸入子系統創建的設備節點和硬件層進行交互,android系統的輸入模塊包括輸入事件收集器、輸入事件讀取器、輸入事件分發器和輸入設備驅動;
輸入事件收集器用于從輸入設備中收集輸入事件,對這些輸入事件進行識別與封裝,并提交給上一層進行處理;輸入事件讀取器用于從輸入事件收集器中獲取輸入事件,將事件交給輸入事件分發器;輸入事件分發器用于接收輸入事件讀取器傳來的事件信息并管理處理該事件的目標窗口;輸入設備驅動用于接收物理設備的事件輸入得到事件信息,并將事件信息傳給輸入事件收集器;當客戶機對輸入設備進行操作時,輸入設備驅動會捕捉該操作,輸入事件收集器不斷從輸入設備驅動中獲取待處理的事件,輸入事件讀取器從輸入事件收集器中獲取原始事件并進行加工處理事件,將處理事件傳給輸入事件分發器,輸入事件分發器將接收到的處理事件分發到合適的窗口中。
7.作為上述技術方案的進一步改進,輸入事件收集器的執行過程包括:獲取當前容器的編號和當前運行環境的容器編號,若運行的容器環境不是當前容器對應的前臺系統,則丟掉所有的輸入事件;若運行的容器環境是當前容器對應的前臺系統,則不做任何的操作,將事件信息傳給下個處理模塊。
8.作為上述技術方案的進一步改進,android系統的顯示模塊包括android應用程序所產生的圖像數據、在顯示模塊中用于管理應用程序所產生的圖像數據的窗口管理服務、經過窗口管理服務加工處理后的顯示數據、與硬件層的屏幕直接聯系的系統服務,android系統的顯示模塊執行過程包括:每一個應用將自己的顯示內容繪制到一個圖像數據中,將圖像數據傳遞給窗口管理服務進行處理,根據客戶機當前顯示的狀態對圖像數據添加相應的參數,系統服務獲取到圖像數據的參數后對所有圖像數據合成為顯示數據,系統服務將需要顯示的顯示數據傳遞給屏幕設備,屏幕顯示該顯示數據的內容。
9.作為上述技術方案的進一步改進,linux內核將lxc容器掛載至rootfs所在的分區,包括:獲取客戶機中的,roofts并將rootfs輸入android系統的編譯環境中,添加一個與rootfs對應的燒錄分區;將rootfs打包成lxcdata.img分區鏡像,并將編譯好的版本燒錄至客戶機以完成分區制作。
10.作為上述技術方案的進一步改進,根據linux內核的屬性信息對宿主機進行虛擬化得到lxc容器,包括:創建容器文件系統的創建只讀層、容器讀寫層和掛載點,將只讀層和讀寫層掛載到掛載點;添加宿主機的文件夾到容器的數據卷和對應的標簽得到掛載標簽,判斷數據卷是否為空;若是,表示客戶機未使用掛載標簽,結束創建過程;若否,則使用函數解析數據卷的字符串,當函數返回的字符數組長度為2,且數據
元素均不為空時,則掛載數據卷;否則,提示客戶機創建數據卷輸入值不正確。
11.作為上述技術方案的進一步改進,掛載數據卷的過程包括:讀取宿主機的默認文件目錄,根據默認文件目錄創建宿主機的初始文件目錄,在容器文件系統中創建與默認文件目錄對應的裝入點;將數據卷從宿主機的初始文件目錄中自動掛載到相應的容器中所需掛載的節點以啟動容器的掛載過程。
12.第二方面,本發明還提供了一種汽車儀表顯示系統的啟動裝置,包括:獲取單元,用于獲取汽車儀表顯示系統的預加載指令,并對預加載指令進行編譯獲取linux內核的屬性信息,其中,汽車儀表顯示系統包括宿主機、客戶機和linux內核,宿主機通過linux內核與客戶機連接,屬性信息包括輸入驅動信息、輸出驅動信息和版本;構建單元,用于根據linux內核的屬性信息對宿主機進行虛擬化得到lxc容器,并在客戶機內建立與lxc容器對應的分區存放根目錄記為rootfs;啟動單元,用于linux內核將lxc容器掛載至rootfs所在的分區,啟動lxc容器與rootfs所在的分區對應的操作系統以完成汽車儀表顯示系統的正常開機。
13.第三方面,本發明還提供了一種存儲介質,存儲介質上存儲有指令,指令被處理器執行時實現上述的汽車儀表顯示系統的啟動方法的步驟。
14.本發明提供了一種汽車儀表顯示系統的啟動方法、裝置及存儲介質,通過獲取汽車儀表顯示系統的預加載指令,并對預加載指令進行編譯獲取linux內核的屬性信息,根據linux內核的屬性信息對宿主機進行虛擬化得到lxc容器,并在客戶機內建立與lxc容器對應的分區存放根目錄記為rootfs,linux內核將lxc容器掛載至rootfs所在的分區,啟動lxc容器與rootfs所在的分區對應的操作系統以完成汽車儀表顯示系統的正常開機,保證部署在任何操作系統環境中的軟件都能始終如一地正常運行,可以提高汽車儀表顯示系統的啟動速度、安全性和靈活性。
附圖說明
15.為了更清楚地說明本發明實施例的技術方案,下面將對實施例中所需要使用的附圖作簡單地介紹,應當理解,以下附圖僅示出了本發明的某些實施例,因此不應被看作是對范圍的限定,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他相關的附圖。
16.圖1為本發明的汽車儀表顯示系統的啟動方法的流程圖;圖2為本發明的輸入事件收集器的執行過程的流程圖;圖3為本發明的lxc容器的創建過程圖;圖4為本發明的掛載數據卷的流程圖;圖5為本發明的汽車儀表顯示系統的啟動裝置的結構框圖;圖6為本發明的rootfs分區的結構示意圖。
具體實施方式
17.下面詳細描述本發明的實施例,所述實施例的示例在附圖中示出,其中自始至終相同或類似的標號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附
圖描述的實施例是示例性的,僅用于解釋本發明,而不能理解為對本發明的限制。
18.參閱圖1和圖6,本發明提供了一種汽車儀表顯示系統的啟動方法,包括以下步驟:s11:獲取汽車儀表顯示系統的預加載指令,并對預加載指令進行編譯獲取linux內核的屬性信息,其中,汽車儀表顯示系統包括宿主機、客戶機和linux內核,宿主機通過linux內核與客戶機連接,屬性信息包括輸入驅動信息、輸出驅動信息和版本;s12:根據linux內核的屬性信息對宿主機進行虛擬化得到lxc容器,并在客戶機內建立與lxc容器對應的分區存放根目錄記為rootfs;s13:linux內核將lxc容器掛載至rootfs所在的分區,啟動lxc容器與rootfs所在的分區對應的操作系統以完成汽車儀表顯示系統的正常開機。
19.本實施例中,啟動lxc容器和初始化與rootfs所在的分區對應的android系統以完成汽車儀表顯示系統的正常開機,包括:獲取lxc容器的運行環境并根據運行環境啟動容器環境的內部命令生成容器運行指令,并在android系統的內核中運行容器運行指令;根據容器運行指令獲取容器的進程信息,根據進程信息啟動android系統中的init進程得到android的核心服務,其中,容器的進程信息包括init.lxc、sh和ps,init.lxc為容器的啟動程序,sh為容器內部的shell,ps為調用的命令。lxc容器是linux系統下通過輕量級虛擬化技術創建的容器,輕量級虛擬化技術的底層操作系統上不會實現一個虛擬化層來為虛擬機提供服務,輕量級虛擬化技術完全由底層操作系統及linux內核提供支持,借助于內核的功能,可以在上層創建出多個隔離的進程運行空間,所有的獨立空間共享同一個底層內核,一個隔離的空間如底層操作系統環境的一個拷貝,通過限制一個空間可用的內存等資源實現底層資源的劃分,每個獨立空間的擦走哦系統環境和底層系統是一致的,這里的獨立空間即為容器。
20.需要說明的是,lxc是linux containers的縮寫,是一種開元的清涼虛擬化技術,lxc提供一個軟件包,客戶機通過使用軟件包里的一系列命令,可以對容器進行創建和銷毀,或通過命令對lxc容器進行配置。由于一個進程對應多個不同類型的命名空間,而同一個命名空間會被多個進程使用,為了辨識這種進程和命名空間之間多對多的關系,內核便設計類上述的數據結構作為兩者之間的代理。每個創建的新進程都會有它自己的命名空間,在創建進程的過程中可以通過制定參數使得該進程具有新的命名空間,用戶進程一般通過fork調用創建新的進程,但fork調用產生的進程和父進程屬于同一個命名空間。通過設置flags的一些標志位可以制定新錦成是否需要創建新的命名空間。為了能在宿主機對虛擬android進行操作和管理,需要在宿主機實現對輸入設備和顯示設備的復用,需要為每個容器分配一個數字id,在啟動容器的lxc命令中以參數的形式為容器指定一個id,之后容器中的進程可以通過讀文件獲取自己所在容器的id。需要支持客戶機配置一個所有容器可見的id,表示允許使用本地顯示設備和輸入設備的android容器的id,實現一個linux驅動,令該驅動在啟動時自動加載,驅動加載成功后,會在linux的proc文件系統中創建一個container_id文件,由于android系統啟動時會掛載linux的proc文件系統,每個android都能看到這個全局的container_id文件,客戶機通過向container_id文件寫入一個id值來切換到對應的android容器。
21.應理解,每個分區都是獨立的實體,都擁有各自的私有數據空間,并且能防止其他分區非法訪問或者破壞而實現數據隔離。分區間數據交換都是經過分區驗證的信息,防止
數據傳輸過程中被破壞,或者非法數據流對系統產生威脅而實現數據流控制。分區軟件具有時間和空間隔離特性,能有效地避免系統資源無序競爭引發的安全性問題而實現系統資源保護。當某一個分區應用發生不可避免的失效情況時,分區軟件能將失效影響范圍控制在該分區內,避免其他正常分區應用受到影響,從而大大提高系統可靠性。容器不是去虛擬出主機硬件,然后在硬件基礎上建立完整的軟件操作系統,它的目的是把進程和進程隔離開來,有了這個容器,客戶機可以將軟件運行所需的所有系統資源打包并存放到一個與宿主機完全相互隔離的文件系統中,容器與其他傳統虛擬機不同,不需要額外綁定一整套的操作系統,只需填軟件工作所需的那部分庫資源和相關設置,汽車儀表顯示系統因此變得高效、輕量,并保證部署在任何操作系統環境中的軟件都有能始終如一地正常運行,可以提高汽車儀表顯示系統的啟動速度和安全性。
22.可選地,android系統的最底層為linux的輸入子系統,客戶機作為linux輸入子系統的用戶,通過對操作linux輸入子系統創建的設備節點和硬件層進行交互,android系統的輸入模塊包括輸入事件收集器、輸入事件讀取器、輸入事件分發器和輸入設備驅動;輸入事件收集器用于從輸入設備中收集輸入事件,對這些輸入事件進行識別與封裝,并提交給上一層進行處理;輸入事件讀取器用于從輸入事件收集器中獲取輸入事件,將事件交給輸入事件分發器;輸入事件分發器用于接收輸入事件讀取器傳來的事件信息并管理處理該事件的目標窗口;輸入設備驅動用于接收物理設備的事件輸入得到事件信息,并將事件信息傳給輸入事件收集器;當客戶機對輸入設備進行操作時,輸入設備驅動會捕捉該操作,輸入事件收集器不斷從輸入設備驅動中獲取待處理的事件,輸入事件讀取器從輸入事件收集器中獲取原始事件并進行加工處理事件,將處理事件傳給輸入事件分發器,輸入事件分發器將接收到的處理事件分發到合適的窗口中。
23.本實施例中,內核從preloader獲得整個主機硬件的控制權,但這個過程卻并不是輕松容易的,內核啟動之前,文件系統并沒有被裝載,內核雖然要探測各種硬件,但內核本身必須得從某個分區上被裝載,這個分區是由preloader來識別的,即preloader必須要能夠識別內核未見所在的分區,而文件系統從邏輯上來看和從物理上來看是不一樣的,從邏輯上看它們是有層次關系的。文件系統從根開始的,根下有許多一級目錄如/user、/boot和/home等,這些目錄中有些目錄是可以單獨關聯到一個分區,而有些則不行,因為這些目錄是與根自身完成初始化相關的,而每一個目錄都通過根才能訪問,根所在的分區通常就是操作系統,是內核能夠實現進入用戶空間的最核心的位置,因此這個分區有個特定的名稱稱為根文件系統rootfs,若把某個分區與根建立了關聯關系,通過根所訪問的所有文件都將以根作為訪問入口,這個根就成了整個磁盤上的甚至于整個操作系統上訪問其它任何存儲設備的訪問入口,根下有/bin、/sbin等很多目錄,根本身掛載完成以后以后就要啟動操作系統,而/bin、/sbin所放的這些二進制程序是操作系統自身啟動就要用到的程序。當內核初始化完以后需要建立根文件系統,客戶機系統告訴內核根在哪個分區上,即用戶需要向內核傳遞一個參數,若內核驅動不了這個分區,它將不能訪問rootfs,即內核必須要能
通過驅動程序探測到分區,這樣才能訪問這個分區。在內核版本號命名的目錄里,有該內核所需的各種外圍模塊,在這個目錄下有許多文件,其中包含文件系統驅動程序模塊,內核所需的模塊就在這個設備上,要想訪問這個設備得先有驅動,而要想拿到驅動得先能訪問該設備。
24.需要說明的是,內核和要訪問的設備之間再加一個層次,該層次只有一個簡單的功能向內核提供這個設備的驅動,這個文件不是事先編譯好的,內核是編譯好的,模塊也是編譯好的,在安裝操作系統時需要內核裝起來,把內核模塊裝進來。
25.參閱圖2,可選地,輸入事件收集器的執行過程包括:s22:獲取當前容器的編號和當前運行環境的容器編號,若運行的容器環境不是當前容器對應的前臺系統,則丟掉所有的輸入事件;s23:若運行的容器環境是當前容器對應的前臺系統,則不做任何的操作,將事件信息傳給下個處理模塊。
26.本實施例中,android系統的顯示模塊包括android應用程序所產生的圖像數據、在顯示模塊中用于管理應用程序所產生的圖像數據的窗口管理服務、經過窗口管理服務加工處理后的顯示數據、與硬件層的屏幕直接聯系的系統服務,android系統的顯示模塊執行過程包括:每一個應用將自己的顯示內容繪制到一個圖像數據中,將圖像數據傳遞給窗口管理服務進行處理,根據客戶機當前顯示的狀態對圖像數據添加相應的參數,系統服務獲取到圖像數據的參數后對所有圖像數據合成為顯示數據,系統服務將需要顯示的顯示數據傳遞給屏幕設備,屏幕顯示該顯示數據的內容。
27.需要說明的是,eventhub模塊是android輸入子系統的最底層,它直接訪問linux的輸入設備文件和linux輸入子系統進行交互,eventhub模塊初始化時會打開linux在/dev/input/目錄下創建的所有輸入設備并進行管理,同時該模塊會監控該目錄下是否有設備節點的增刪,新設備節點增加,則會打開新的設備文件,新設備節點增加,則會打開新的設備文件,設備節點減少,則會關閉已打開的設備文件,該模塊通過epoll系統調用監控所有打開的設備文件,并將讀到的原始輸入事件轉發給inputreader模塊。inputreader模塊是eventhub的使用者,從eventhub獲取所有底層設備文件的輸入,inputreader根據收到數據的類型通用不同的處理函數進行處理,inputreader還會監控eventhub發送的事件信息,包括設備的增、柵掃描事件,并進行相應的處理,最后inputreader會將收到的輸入數據發到消息隊列中供inputdispatcher處理。inputdispatcher從消息隊列中取出inputreader產生的事件進行分發,inputdispatcher在分發前,會對輸入進行過濾、攔截,當確定需要使用時,會根據輸入內容選擇合適的窗口,并寫入窗口的事件接受管道中,最后由窗口進行處理,最后在界面上顯示。在應用程序框架層注入需要考慮打包的情況,處理較為復雜,通過輸入設備注入原始的輸入數據,可以較細粒度的重現客戶機操作,同時中間沒有經過android系統的任何處理,且宿主機是具有root權限的,最后選擇在linux設備上注入輸入條件,可以降低延遲和提高效率,可選地,linux內核將lxc容器掛載至rootfs所在的分區,包括:獲取客戶機中的,roofts并將rootfs輸入android系統的編譯環境中,添加一個與rootfs對應的燒錄分區;將rootfs打包成lxcdata.img分區鏡像,并將編譯好的版本燒錄至客戶機以完成
分區制作。
28.參閱圖3,可選地,根據linux內核的屬性信息對宿主機進行虛擬化得到lxc容器,包括:s33:創建容器文件系統的創建只讀層、容器讀寫層和掛載點,將只讀層和讀寫層掛載到掛載點;s34:添加宿主機的文件夾到容器的數據卷和對應的標簽得到掛載標簽,判斷數據卷是否為空;s35:若是,表示客戶機未使用掛載標簽,結束創建過程;s36:若否,則使用函數解析數據卷的字符串,當函數返回的字符數組長度為2,且數據元素均不為空時,則掛載數據卷;否則,提示客戶機創建數據卷輸入值不正確。
29.本實施例中,啟動容器時,創建只讀層busybox,創建讀寫層writelayer(),創建掛載點mnt,并把只讀層和讀寫層掛載到掛載點,將掛載點作為容器的根目錄。容器退出時,卸載掛載點mnt的文件系統,刪除掛載點,刪除讀寫層writelayer。只有在volume不為空,且使用volume函數解析volume字符串返回的字符數組長度為2,數據元素均為空時,才執行刪除掛載函數來處理。對于其余部分,還使用前面的刪除函數。刪除掛載點和數據卷函數的處理邏輯過程為:卸載volume掛載點的文件系統,保證整個容器的掛載點沒有被使用,卸載整個容器文件系統的裝載點,刪除容器文件系統的掛載點,整個容器退出過程中的文件系統處理就結束了。
30.參閱圖4,可選地,掛載數據卷的過程包括:s44:讀取宿主機的默認文件目錄,根據默認文件目錄創建宿主機的初始文件目錄,在容器文件系統中創建與默認文件目錄對應的裝入點;s45:將數據卷從宿主機的初始文件目錄中自動掛載到相應的容器中所需掛載的節點以啟動容器的掛載過程。
31.本實施例中,將宿主機/root/busybox目錄作為文件的根目錄,但在容器內對文件的操作會直接影響到宿主機的/root/busybox目錄,而真正的容器是要能做到將容器和鏡像隔離的,實現在容器中進行的操作不會對鏡像產生任何影響的功能。newworkspace()函數是用來創建容器文件系統的,其包括createreadonlylayer(),creatwritelayer()和creatmountpoint(),createreadonlylayer()函數新建busybox文件夾,將busybox.tar解壓到busybox目錄下,作為容器的只讀層。creatwritelayer()函數創建了一個名為writelayer的文件夾,作為容器唯一的可寫層。在creatmountpoint()函數中,首先創建了mnt文件夾,作為文件的掛載點,然后把writelayer()目錄和busybox目錄mount到mnt目錄下,最后在newparentprocess()函數中將容器使用的宿主機目錄/root/busybox替換成/root/mnt,在newparentprocess()函數中將容器使用的宿主機目錄/root/busybox替換成/root/mnt,這樣,使用ufs系統啟動容器的代碼。將容器對應的writelayer和container-init layer刪除,而保留鏡像所有的內容,本代碼在容器退出時會刪除writelayer。ufs包usybox實現了將容器和鏡像的分離,但容器退出時,容器可寫層的所有內容都會被刪除,volume可以解決客戶機需要將部分數據持久化在容器中的問題。通過將宿主機的目錄作為數據卷掛載到容器中,且在容器退出后,數據卷中的內容還能保存在宿主機上。
32.需要說明的是,在容器退出時添加綁定宿主機文件夾到容器數據卷的功能,在文
件的命令中添加-v標簽,在函數中將volume傳給創建容器的newparentprocess函數和刪除容器文件系統的deleteworkspace()函數,繼續把volume值傳給創建容器文件系統的newworkspace()方法,從而提高容器的靈活性。容器在退出所有可寫層的內容,commit子命令的目的是把運行狀態下容器的內容存儲成鏡像保存下來。創建容器時使用ufs對busybox進行包裝,使得容器在運行中,若進行寫操作時會臨時創建出一個可寫層,以達到不破壞原有文件系統的目的,若不對容器的寫操作做保存,則容器結束時,文件系統的內容與啟動容器前相比不會有任何變化,這正好滿足了容器的文件系統應采用分層的方法,實現了啟動容器應具備的volume數據卷功能和對進行鏡像打包的功能。
33.參閱圖5,本發明還提供了一種汽車儀表顯示系統的啟動裝置,包括:獲取單元,用于獲取汽車儀表顯示系統的預加載指令,并對預加載指令進行編譯獲取linux內核的屬性信息,其中,汽車儀表顯示系統包括宿主機、客戶機和linux內核,宿主機通過linux內核與客戶機連接,屬性信息包括輸入驅動信息、輸出驅動信息和版本;構建單元,用于根據linux內核的屬性信息對宿主機進行虛擬化得到lxc容器,并在客戶機內建立與lxc容器對應的分區存放根目錄記為rootfs;啟動單元,用于linux內核將lxc容器掛載至rootfs所在的分區,啟動lxc容器與rootfs所在的分區對應的操作系統以完成汽車儀表顯示系統的正常開機。
34.本實施例中,linux內核名字空間機制是將原來共享的全局資源拆分成很多個組進程共享的資源,當一個名字空間里面的所有進程都退出時,名字空間也會被內核銷毀,即當名字空間是動態創建與銷毀的,伴隨進程創建,隨著進程退出而銷毀,基于角訪問控制的uts名字空間隨機化,來阻止主機信息泄露,將uts名字空間固定的初始值進行隨機化處理,根據客戶機需求和可信程度,設立不同類別的角,不同類別角獲得uts名字空間的信息是不同的,宿主機返回用戶,有需求且可信的角可獲得真實有用信息如系統版本信息,不可信的客戶機獲取的信息是進行隨機化處理過的信息。uts名字空間包含了運行內核的名稱、版本、底層體系結構類型等信息,提供了主機名和域名的隔離,進程可以在調用函數clone()或unshare()時制定clone_newuts標識來創建uts名字空間,也可以根據需要創建自己獨特的uts名字空間,其中包含主機名和域名等,雖然uts名字空間內包裝的utsname是從原始數據復制而來,用戶進程可以在uts名字空間內擁有屬于自己的主機名hostname和域名domainname標識,這個標識可讓uts名字空間內的執行環節獨立于宿主機和其上的其他容器,從而提高了汽車儀表顯示系統的啟動速率。
35.在另一個可行的實施例中,本發明還提供了一種存儲介質,存儲介質上存儲有指令,指令被處理器執行時實現上述的汽車儀表顯示系統的啟動方法的步驟。
36.在這里示出和描述的所有示例中,任何具體值應被解釋為僅僅是示例性的,而不是作為限制,因此,示例性實施例的其他示例可以具有不同的值。
37.應注意到:相似的標號和字母在下面的附圖中表示類似項,因此,一旦某一項在一個附圖中被定義,則在隨后的附圖中不需要對其進行進一步定義和解釋。
38.以上所述實施例僅表達了本發明的幾種實施方式,其描述較為具體和詳細,但并不能因此而理解為對本發明范圍的限制。應當指出的是,對于本領域的普通技術人員來說,在不脫離本發明構思的前提下,還可以做出若干變形和改進,這些都屬于本發明的保護范圍。
技術特征:
1.一種汽車儀表顯示系統的啟動方法,其特征在于,包括以下步驟:獲取汽車儀表顯示系統的預加載指令,并對預加載指令進行編譯獲取linux內核的屬性信息,其中,汽車儀表顯示系統包括宿主機、客戶機和linux內核,宿主機通過linux內核與客戶機連接,屬性信息包括輸入驅動信息、輸出驅動信息和版本;根據linux內核的屬性信息對宿主機進行虛擬化得到lxc容器,并在客戶機內建立與lxc容器對應的分區存放根目錄記為rootfs;linux內核將lxc容器掛載至rootfs所在的分區,啟動lxc容器與rootfs所在的分區對應的操作系統以完成汽車儀表顯示系統的正常開機。2.根據權利要求1所述的汽車儀表顯示系統的啟動方法,其特征在于,啟動lxc容器和初始化與rootfs所在的分區對應的android系統以完成汽車儀表顯示系統的正常開機,包括:獲取lxc容器的運行環境并根據運行環境啟動容器環境的內部命令生成容器運行指令,并在android系統的內核中運行容器運行指令;根據容器運行指令獲取容器的進程信息,根據進程信息啟動android系統中的init進程得到android的核心服務,其中,容器的進程信息包括init.lxc、sh和ps,init.lxc為容器的啟動程序,sh為容器內部的shell,ps為調用的命令。3.根據權利要求2所述的汽車儀表顯示系統的啟動方法,其特征在于,android系統的最底層為linux的輸入子系統,客戶機作為linux輸入子系統的用戶,通過對操作linux輸入子系統創建的設備節點和硬件層進行交互,android系統的輸入模塊包括輸入事件收集器、輸入事件讀取器、輸入事件分發器和輸入設備驅動;輸入事件收集器用于從輸入設備中收集輸入事件,對這些輸入事件進行識別與封裝,并提交給上一層進行處理;輸入事件讀取器用于從輸入事件收集器中獲取輸入事件,將事件交給輸入事件分發器;輸入事件分發器用于接收輸入事件讀取器傳來的事件信息并管理處理該事件的目標窗口;輸入設備驅動用于接收物理設備的事件輸入得到事件信息,并將事件信息傳給輸入事件收集器;當客戶機對輸入設備進行操作時,輸入設備驅動會捕捉該操作,輸入事件收集器不斷從輸入設備驅動中獲取待處理的事件,輸入事件讀取器從輸入事件收集器中獲取原始事件并進行加工處理事件,將處理事件傳給輸入事件分發器,輸入事件分發器將接收到的處理事件分發到合適的窗口中。4.根據權利要求3所述的汽車儀表顯示系統的啟動方法,其特征在于,輸入事件收集器的執行過程包括:獲取當前容器的編號和當前運行環境的容器編號,若運行的容器環境不是當前容器對應的前臺系統,則丟掉所有的輸入事件;若運行的容器環境是當前容器對應的前臺系統,則不做任何的操作,將事件信息傳給下個處理模塊。5.根據權利要求2所述的汽車儀表顯示系統的啟動方法,其特征在于,android系統的
顯示模塊包括android應用程序所產生的圖像數據、在顯示模塊中用于管理應用程序所產生的圖像數據的窗口管理服務、經過窗口管理服務加工處理后的顯示數據、與硬件層的屏幕直接聯系的系統服務,android系統的顯示模塊執行過程包括:每一個應用將自己的顯示內容繪制到一個圖像數據中,將圖像數據傳遞給窗口管理服務進行處理,根據客戶機當前顯示的狀態對圖像數據添加相應的參數,系統服務獲取到圖像數據的參數后對所有圖像數據合成為顯示數據,系統服務將需要顯示的顯示數據傳遞給屏幕設備,屏幕顯示該顯示數據的內容。6.根據權利要求1所述的汽車儀表顯示系統的啟動方法,其特征在于,linux內核將lxc容器掛載至rootfs所在的分區,包括:獲取客戶機中的,roofts并將rootfs輸入android系統的編譯環境中,添加一個與rootfs對應的燒錄分區;將rootfs打包成lxcdata.img分區鏡像,并將編譯好的版本燒錄至客戶機以完成分區制作。7.根據權利要求1所述的汽車儀表顯示系統的啟動方法,其特征在于,根據linux內核的屬性信息對宿主機進行虛擬化得到lxc容器,包括:創建容器文件系統的創建只讀層、容器讀寫層和掛載點,將只讀層和讀寫層掛載到掛載點;添加宿主機的文件夾到容器的數據卷和對應的標簽得到掛載標簽,判斷數據卷是否為空;若是,表示客戶機未使用掛載標簽,結束創建過程;若否,則使用函數解析數據卷的字符串,當函數返回的字符數組長度為2,且數據元素均不為空時,則掛載數據卷;否則,提示客戶機創建數據卷輸入值不正確。8.根據權利要求7所述的汽車儀表顯示系統的啟動方法,其特征在于,掛載數據卷的過程包括:讀取宿主機的默認文件目錄,根據默認文件目錄創建宿主機的初始文件目錄,在容器文件系統中創建與默認文件目錄對應的裝入點;將數據卷從宿主機的初始文件目錄中自動掛載到相應的容器中所需掛載的節點以啟動容器的掛載過程。9.一種汽車儀表顯示系統的啟動裝置,其特征在于,包括:獲取單元,用于獲取汽車儀表顯示系統的預加載指令,并對預加載指令進行編譯獲取linux內核的屬性信息,其中,汽車儀表顯示系統包括宿主機、客戶機和linux內核,宿主機通過linux內核與客戶機連接,屬性信息包括輸入驅動信息、輸出驅動信息和版本;構建單元,用于根據linux內核的屬性信息對宿主機進行虛擬化得到lxc容器,并在客戶機內建立與lxc容器對應的分區存放根目錄記為rootfs;啟動單元,用于linux內核將lxc容器掛載至rootfs所在的分區,啟動lxc容器與rootfs所在的分區對應的操作系統以完成汽車儀表顯示系統的正常開機。10.一種存儲介質,存儲介質上存儲有指令,指令被處理器執行時實現上述權利要求1-8任一項所述的汽車儀表顯示系統的啟動方法的步驟。
技術總結
本發明公開了汽車儀表顯示系統的啟動方法、裝置及存儲介質,通過獲取汽車儀表顯示系統的預加載指令,并對預加載指令進行編譯獲取Linux內核的屬性信息,根據Linux內核的屬性信息對宿主機進行虛擬化得到Lxc容器,并在客戶機內建立與Lxc容器對應的分區存放根目錄記為rootfs,Linux內核將Lxc容器掛載至rootfs所在的分區,啟動Lxc容器與rootfs所在的分區對應的操作系統以完成汽車儀表顯示系統的正常開機,保證部署在任何操作系統環境中的軟件都能始終如一地正常運行,可以提高汽車儀表顯示系統的啟動速度、安全性和靈活性。安全性和靈活性。安全性和靈活性。
