新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于嵌入式LINUX的車載導(dǎo)航系統(tǒng)設(shè)計(jì)

基于嵌入式LINUX的車載導(dǎo)航系統(tǒng)設(shè)計(jì)

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

(2) Linux 在S3C2440 上的移植

嵌入式 Linux 管理整個(gè)導(dǎo)航系統(tǒng)的硬件設(shè)備并對(duì)所有程序進(jìn)行調(diào)度,是軟件系統(tǒng)的核心。由于Linux 是面向PC 機(jī)的操作系統(tǒng),將其用于嵌入式領(lǐng)域,需要進(jìn)行移植,它一般包括啟動(dòng)加載代碼(Bootloader)的移植、內(nèi)核移植、驅(qū)動(dòng)程序的編寫、文件系統(tǒng)的構(gòu)建等。將 U-boot 源代碼在ADS 環(huán)境下進(jìn)行編譯,將編譯成功的二進(jìn)制代碼燒寫到開發(fā)板所帶Flash 上,然后在上電啟動(dòng)。Bootloader 首先完成硬件設(shè)備的初始化,然后設(shè)置Linux 內(nèi)核的啟動(dòng)參數(shù),最后調(diào)用Liuux 內(nèi)核,直接跳轉(zhuǎn)到Linux 內(nèi)核的第一條指令處。從 Linux 的方式看待設(shè)備可區(qū)分為3 種基本設(shè)備類型:字符設(shè)備,塊設(shè)備,或者網(wǎng)絡(luò)設(shè)備。車載導(dǎo)航系統(tǒng)設(shè)備驅(qū)動(dòng)程序由以下三個(gè)部分組成:

(1)自動(dòng)配置和初始化子程序。初始化子程序首先運(yùn)行,負(fù)責(zé)檢測(cè)硬件設(shè)備是否存在和能否正常運(yùn)行;

(2)中斷服務(wù)子程序。由嵌入式Liuux 系統(tǒng)來(lái)接收硬件中斷,再通過(guò)系統(tǒng)來(lái)調(diào)用中斷服務(wù)子程序;

(3)服務(wù)于I/O 請(qǐng)求的子程序。對(duì)I/O 設(shè)備進(jìn)行存取。將編寫好的設(shè)備驅(qū)動(dòng)編譯到內(nèi)核中,在系統(tǒng)啟動(dòng)時(shí)和內(nèi)核一起啟動(dòng)。

文件系統(tǒng)構(gòu)成了 Linux 系統(tǒng)上所有數(shù)據(jù)的基礎(chǔ)。經(jīng)過(guò)比較,系統(tǒng)設(shè)計(jì)時(shí)決定使用Cramfs文件系統(tǒng),當(dāng)訪問(wèn)文件時(shí),Cramfs 文件系統(tǒng)自動(dòng)的將要訪問(wèn)的文件解壓到RAM 中,會(huì)盡可能給實(shí)際執(zhí)行的應(yīng)用程序保留RAM 空間,而且可以為運(yùn)行時(shí)解壓縮挪出額外的CPU 周期。使用mkcramfs 命令生成cramfs 鏡像文件,再將其下載到系統(tǒng)中去,Linux 啟動(dòng)時(shí)自動(dòng)加載根文件系統(tǒng),完成系統(tǒng)的啟動(dòng)。

(3)多線程技術(shù)在Qt 中的應(yīng)用

在具有圖形用戶界面的 Qt 應(yīng)用程序中,主線程由GUI 線程充當(dāng),它同時(shí)擁有一個(gè)或多個(gè)非GUI 線程作為工作線程來(lái)處理其它耗時(shí)操作,例如不斷更新的車輛方向、速度,地圖的匹配等。這樣,即使在負(fù)載很重的情況下,應(yīng)用程序也可以保證圖形用戶界面的響應(yīng)。依賴 Qt 提供的多線程技術(shù),使得該導(dǎo)航系統(tǒng)中的多數(shù)據(jù)交互成為可能,GUI 線程在調(diào)用了exec()函數(shù)后,要么等待一個(gè)事件,要么處理一個(gè)事件,每一個(gè)線程都可以有自己的事件循環(huán),如圖4所示,起始線程通過(guò)QcoreApplication::exec()啟動(dòng)事件循環(huán),其他非GUI 線程通過(guò)Qthread::exec()啟動(dòng)各自的事件循環(huán)。

基于嵌入式LINUX的車載導(dǎo)航系統(tǒng)設(shè)計(jì)

  圖 4 Qt 線程事件模型

5 結(jié)論

本文作者的創(chuàng)新點(diǎn):

(1)將嵌入式Liuux 操作系統(tǒng)用于車載導(dǎo)航系統(tǒng),是對(duì)傳統(tǒng)的車輛導(dǎo)航系統(tǒng)的重大改進(jìn),成本大幅降低,同時(shí)利用Linux 系統(tǒng)的多線程技術(shù),可以解決系統(tǒng)中多個(gè)任務(wù)并行處理的問(wèn)題,保障了系統(tǒng)的穩(wěn)定性、可靠性,提高了系統(tǒng)的運(yùn)行速度。

(2)顯示系統(tǒng)采用Qt/Embeded 軟件進(jìn)行用戶顯示界面設(shè)計(jì),一次編寫,隨處編譯,方便移植到各種不同的平臺(tái),只需重新編譯即可,使用開源版節(jié)約大量軟件授權(quán)費(fèi)用,這些都是傳統(tǒng)WinCE 程序所不能比擬的。

(3)目前本系統(tǒng)已經(jīng)裝載在車上試運(yùn)行,實(shí)踐證明本系統(tǒng)能實(shí)時(shí)顯示車輛當(dāng)前運(yùn)行狀況,快速響應(yīng)用戶操作,為駕駛者提供良好的導(dǎo)航信息。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

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

評(píng)論


相關(guān)推薦

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

關(guān)閉