1 引言 隨著中國的城市化的程度不斷加快,使得越來越多的人口與事業單位集中在一個“狹小”范圍內生活與工作。城市的迅速“膨脹”直接導致了交通網絡的日趨復雜,人員流動的日益頻繁也使得每個人對空間信息有了更多的依賴。人們更加關心“當前我在哪里?”“目的地在哪里?”“如何到達?”等問題。而以嵌入式系統為平臺的數字地理集成應用方案可以有效地解決這些矛盾。在此背景下,本文給出了基于ARM的嵌入式解決方案。
2 硬件實現
本嵌入式GPS導航系統的硬件核心是三星公司ARM9系列中的16/32位RISC處理器S3C2410A芯片,該芯片強大的實時處理能力和豐富的外圍接口非常適合嵌入式系統的開發,本系統正是基于該芯片的這些特點而設計的。系統框圖如圖1所示。
該系統以S3C2410A微處理器為核心,與2片32M的SDRAM(HY57V561620CT)和一片64M的NAND Flash(K9F1208U0B)組成了最小系統。外部添加了用于接收GPS信號的GPS模塊,用于顯示的液晶面板以及一片UDA1341TS的聲音芯片。此外,為了調試的方便,我們還增加了一片CS8900A的10M網卡芯片。
3 系統平臺的建立
系統平臺的建立主要包括兩部分,即宿主機(PC機)上操作系統的選擇和交叉編譯器工具鏈的建立。
PC機上的操作系統可以有多種選擇:安裝Linux發行版、在Windows下使用虛擬機或者使用Cygwin。由于現今Microsoft Windows統領著全球超過半數的PC機(在中國Windows占據近90%的份額),許多開發者開始使用虛擬機等手段來實現在Windows平臺下進行嵌入式Linux的開發,但這些方法都會或多或少地帶來些兼容性問題。開發嵌入式Linux最好的選擇便是在PC機上安裝Linux發行版,因為這樣與Windows毫無關聯,可占有系統全部資源,擁有系統最高性能和最佳的兼容性。
在建立交叉編譯器工具鏈方面必須注意一點的便是C運行庫的選擇。現在可供選擇的C運行庫有glibc, uClibc以及newlib等。glibc是由GNU項目提供的標準C運行庫,它針對PC應用設計,較龐大,但能提供最優的兼容性。如果一般的嵌入式開發可選用uClibc。uClibc原本是uCLinux開發過程中的一個C語言庫,現已經獨立于uCLinux項目并且進一步完善。它對glibc的大部分函數進行了重寫,并且目標就定位于嵌入式,所以其相對glibc而言要小巧很多。此外由于它的函數與glibc保持一致,這樣很多原本基于glibc開發的軟件基本無需改動便可改用uClibc編譯運行,使得在嵌入式系統上占用的內存和磁盤空間更少。但由于畢竟不是標準的C運行庫,因此uClibc擁有著一定的兼容性問題。
本系統選用了Fedora Core 5作為宿主機(PC機)的操作系統以及分別使用buildroot和crosstool建立兩條采用不同的C運行庫的交叉編譯器工具鏈。由于我們系統開發需要使用U-Boot的TFTP功能下載Linux內核以及Linux的NFS網絡文件系統,所以首先需要對Fedora Core 5設置TFTP以及NFS,而后需要設置一個串口通信軟件與開發板互動,本系統選擇了Kermit。
使用兩條采用不同C運行庫的交叉編譯器工具鏈的主要原因在于,我們的導航應用程序使用uClibc有兼容性問題,所以不得不采用glibc。而為了減少占用資源,我們U-Boot、Linux內核和Busybox仍然采用的是uClibc。