基于嵌入式LINUX的車(chē)載導航系統設計
(2) Linux 在S3C2440 上的移植
嵌入式 Linux 管理整個(gè)導航系統的硬件設備并對所有程序進(jìn)行調度,是軟件系統的核心。由于Linux 是面向PC 機的操作系統,將其用于嵌入式領(lǐng)域,需要進(jìn)行移植,它一般包括啟動(dòng)加載代碼(Bootloader)的移植、內核移植、驅動(dòng)程序的編寫(xiě)、文件系統的構建等。將 U-boot 源代碼在A(yíng)DS 環(huán)境下進(jìn)行編譯,將編譯成功的二進(jìn)制代碼燒寫(xiě)到開(kāi)發(fā)板所帶Flash 上,然后在上電啟動(dòng)。Bootloader 首先完成硬件設備的初始化,然后設置Linux 內核的啟動(dòng)參數,最后調用Liuux 內核,直接跳轉到Linux 內核的第一條指令處。從 Linux 的方式看待設備可區分為3 種基本設備類(lèi)型:字符設備,塊設備,或者網(wǎng)絡(luò )設備。車(chē)載導航系統設備驅動(dòng)程序由以下三個(gè)部分組成:
(1)自動(dòng)配置和初始化子程序。初始化子程序首先運行,負責檢測硬件設備是否存在和能否正常運行;
(2)中斷服務(wù)子程序。由嵌入式Liuux 系統來(lái)接收硬件中斷,再通過(guò)系統來(lái)調用中斷服務(wù)子程序;
(3)服務(wù)于I/O 請求的子程序。對I/O 設備進(jìn)行存取。將編寫(xiě)好的設備驅動(dòng)編譯到內核中,在系統啟動(dòng)時(shí)和內核一起啟動(dòng)。
文件系統構成了 Linux 系統上所有數據的基礎。經(jīng)過(guò)比較,系統設計時(shí)決定使用Cramfs文件系統,當訪(fǎng)問(wèn)文件時(shí),Cramfs 文件系統自動(dòng)的將要訪(fǎng)問(wèn)的文件解壓到RAM 中,會(huì )盡可能給實(shí)際執行的應用程序保留RAM 空間,而且可以為運行時(shí)解壓縮挪出額外的CPU 周期。使用mkcramfs 命令生成cramfs 鏡像文件,再將其下載到系統中去,Linux 啟動(dòng)時(shí)自動(dòng)加載根文件系統,完成系統的啟動(dòng)。
(3)多線(xiàn)程技術(shù)在Qt 中的應用
在具有圖形用戶(hù)界面的 Qt 應用程序中,主線(xiàn)程由GUI 線(xiàn)程充當,它同時(shí)擁有一個(gè)或多個(gè)非GUI 線(xiàn)程作為工作線(xiàn)程來(lái)處理其它耗時(shí)操作,例如不斷更新的車(chē)輛方向、速度,地圖的匹配等。這樣,即使在負載很重的情況下,應用程序也可以保證圖形用戶(hù)界面的響應。依賴(lài) Qt 提供的多線(xiàn)程技術(shù),使得該導航系統中的多數據交互成為可能,GUI 線(xiàn)程在調用了exec()函數后,要么等待一個(gè)事件,要么處理一個(gè)事件,每一個(gè)線(xiàn)程都可以有自己的事件循環(huán),如圖4所示,起始線(xiàn)程通過(guò)QcoreApplication::exec()啟動(dòng)事件循環(huán),其他非GUI 線(xiàn)程通過(guò)Qthread::exec()啟動(dòng)各自的事件循環(huán)。
圖 4 Qt 線(xiàn)程事件模型
5 結論
本文作者的創(chuàng )新點(diǎn):
(1)將嵌入式Liuux 操作系統用于車(chē)載導航系統,是對傳統的車(chē)輛導航系統的重大改進(jìn),成本大幅降低,同時(shí)利用Linux 系統的多線(xiàn)程技術(shù),可以解決系統中多個(gè)任務(wù)并行處理的問(wèn)題,保障了系統的穩定性、可靠性,提高了系統的運行速度。
(2)顯示系統采用Qt/Embeded 軟件進(jìn)行用戶(hù)顯示界面設計,一次編寫(xiě),隨處編譯,方便移植到各種不同的平臺,只需重新編譯即可,使用開(kāi)源版節約大量軟件授權費用,這些都是傳統WinCE 程序所不能比擬的。
(3)目前本系統已經(jīng)裝載在車(chē)上試運行,實(shí)踐證明本系統能實(shí)時(shí)顯示車(chē)輛當前運行狀況,快速響應用戶(hù)操作,為駕駛者提供良好的導航信息。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論