針對嵌入式移動設(shè)備在實時性、可靠性方面的要求,以飛思卡爾半導(dǎo)體公司的MX51為系統(tǒng)硬件平臺,給出了移動手持產(chǎn)品中的重力感應(yīng)(G?sensor)實現(xiàn)方案。采用ST(意法半導(dǎo)體)公司的LIS33DE芯片采樣重力感應(yīng)數(shù)據(jù),通過I2C總線傳入系統(tǒng)。運用輸入子系統(tǒng)、查詢、隊列等技術(shù),詳細(xì)討論linux2.6.31內(nèi)核下開發(fā)重力感應(yīng)驅(qū)動程序的方法。該設(shè)計應(yīng)用于智能手機、平板電腦等產(chǎn)品中,效果良好。
自旋鎖是專為防止多處理器并發(fā)而引入的一種鎖,它在內(nèi)核中大量應(yīng)用于中斷處理等部分(對于單處理器來說,防止中斷處理中的并發(fā)可簡單采用關(guān)閉中斷的方式,即在標(biāo)志寄存器中關(guān)閉/打開中斷標(biāo)志位,不需要自旋鎖)。
鑒于越來越多使用者將Linux移植到晶心平臺(Andes Embedded?)上(AndesCore? N12或N10),本文的目的在協(xié)助使用者快速、有效率的將Linux 移植到自建的FPGA板子上(CPU是AndesCore? 的 N12或N10)。筆者曾協(xié)助多家公司工程師進(jìn)行Linux移植到晶心平臺的工作,將Linux移植過程容易遭遇的問題與盲點進(jìn)行實際說明,期望能對使用者有所幫助,也希望讀者不吝指教提供您寶貴的意見。
文中闡述的是家庭監(jiān)護(hù)機器人項目中語音識別系統(tǒng)設(shè)計的部分,通過DSP、DMA和ARM Cortex-A8的并行處理,利用雙緩沖的方法,在嵌入式Linux上實現(xiàn)了基于ATK的實時語音識別系統(tǒng)。文中對該系統(tǒng)的軟硬件進(jìn)行了設(shè)計。在硬件方面,給出語音識別系統(tǒng)的硬件組成原理,并提供了關(guān)鍵部分原理圖;在軟件方面,提出實時語音識別的方法,給出應(yīng)用程序?qū)崿F(xiàn)
構(gòu)建以FPGA為核心的通信處理模塊,內(nèi)置一個32位處理器,加載uCLinux操作系統(tǒng),驅(qū)動兩個CMOS接口、一個SPI射頻接口、一個以太網(wǎng)接口、一塊液晶顯示器;硬件加速定位、圖像預(yù)處理、編碼等算法;開發(fā)良好人機交互接口。
嵌入式系統(tǒng)一般分為兩大類:需要硬實時性能的;和不需要硬實時性能的。過去,我們不得不做出艱難 抉擇,即選擇實時操作系統(tǒng)的性能還是我們鐘愛的 Linux 系統(tǒng)的豐富特性,然后努力彌補不足之處。
系統(tǒng)服務(wù)的命令保存在開發(fā)板根文件系統(tǒng)的/usr/etc/rc.local文件中。有的開發(fā)板開機后自動運行圖形界面程序,需要按住ctrl+c讓開發(fā)板進(jìn)入到linux的SHELL提示符界面。其實可通過注釋掉rc.local文件中調(diào)用圖形界面的命令,增加運行用戶應(yīng)用程序的命令,達(dá)到開機自動運行用戶應(yīng)用程序的目的。
本系統(tǒng)以AT91ARM9200作為核心芯片,以GoAhead WebServer作為嵌入式Web服務(wù)器,針對傳感器網(wǎng)絡(luò)的結(jié)構(gòu)、嵌入式Web體系結(jié)構(gòu)、嵌入式數(shù)據(jù)庫模型、嵌入式操作系統(tǒng)模型、嵌入式網(wǎng)關(guān)設(shè)計模型等進(jìn)行初步的研究與探索,提出一種無線傳感器網(wǎng)絡(luò)嵌入式網(wǎng)關(guān)的設(shè)計方案和無線傳感器網(wǎng)絡(luò)數(shù)據(jù)管理與查詢模式,研發(fā)了基于Web的傳感器網(wǎng)絡(luò)嵌入式網(wǎng)關(guān)系統(tǒng)。
在分析Linux2.6內(nèi)核新特性的基礎(chǔ)上,在S3C2410開發(fā)板上移植了2.6內(nèi)核和新的文件系統(tǒng),并成功地對H.264編解碼多媒體系統(tǒng)提供了支持。
本章主要給出了Linux平臺下文件、進(jìn)程控制與通信、線程控制與通信的編程實例。至此,一個完整的,涉及硬件原理、Bootloader、操作系統(tǒng)及文件系統(tǒng)移植、驅(qū)動程序開發(fā)及應(yīng)用程序編寫的嵌入式Linux系列講解就全部結(jié)束了。
基于華邦W90P710處理器的Linux內(nèi)核應(yīng)用,詳細(xì)介紹了Linux串口驅(qū)動的實現(xiàn)方法。同時對Linux文件系統(tǒng)操作入口函數(shù)及內(nèi)核的編譯做了詳細(xì)的說明。
隨著嵌入式技術(shù)的不斷發(fā)展,嵌入式系統(tǒng)在各種領(lǐng)域中得到了廣泛的應(yīng)用。本文針對嵌入式系統(tǒng)需要在顯示屏上實現(xiàn)字符的輸入,在Linux環(huán)境下,利用QT/E庫軟件,實現(xiàn)了軟鍵盤設(shè)計。主要介紹了軟鍵盤的設(shè)計以及軟鍵盤實現(xiàn)的程序編寫。
Linux系統(tǒng)下的多線程遵循POSIX線程接口,稱為pthread。編寫Linux下的多線程程序,需要使用頭文件pthread.h,連接時需要使用庫libpthread.a。順便說一下,Linux下pthread的實現(xiàn)是通過系統(tǒng)調(diào)用clone()來實現(xiàn)的。clone()是Linux所特有的系統(tǒng)調(diào)用,它的使用方式類似fork,關(guān)于clone()的詳細(xì)情況,有興趣的讀者可以去查看有關(guān)文檔說明。
使用GNU的工具我們?nèi)绾卧贚inux下創(chuàng)建自己的程序函數(shù)庫?一個“程序函數(shù)庫”簡單的說就是一個文件包含了一些編譯好的代碼和數(shù)據(jù),這些編譯好的代碼和數(shù)據(jù)可以在事后供其他的程序使用。程序函數(shù)庫可以使整個程序更加模塊化,更容易重新編譯,而且更方便升級。
本文討論了 Linux 內(nèi)核中可用的大量同步或鎖定機制。這些機制為 2.6.23 版內(nèi)核的許多可用方法提供了應(yīng)用程序接口(API)。但是在深入學(xué)習(xí) API 之前,首先需要明白將要解決的問題。
Linux 的虛擬內(nèi)存管理有幾個關(guān)鍵概念: 每個進(jìn)程有獨立的虛擬地址空間,進(jìn)程訪問的虛擬地址并不是真正的物理地址 虛擬地址可通過每個進(jìn)程上頁表與物理地址進(jìn)行映射,獲得真正物理地址 如果虛擬地址對應(yīng)物理地址不在物理內(nèi)存中,則產(chǎn)生缺頁中斷,真正分配物理地址,同時更新進(jìn)程的頁表;如果此時物理內(nèi)存已耗盡,則根據(jù)內(nèi)存替換算法淘汰部分頁面至物理磁盤中。
中斷(interrupt)被定義為一個事件,該事件改變處理器執(zhí)行的指令順序,這樣的事件與CPU芯片內(nèi)外部硬件電路產(chǎn)生的電信號相對應(yīng)。中斷通常分為同步(synchronous)中斷和異步(asynchronous)中斷。同步中斷指的是當(dāng)指令執(zhí)行時由CPU控制單元產(chǎn)生的,之所以稱為同步,是因為只有在一條指令終止執(zhí)行后CPU才會發(fā)出中斷。異步中斷是由其他硬件設(shè)備依照CPU時鐘信號隨機產(chǎn)生的。在Intel處理器中,同步中斷被稱為異常,異步中斷被稱為中斷。
面向嵌入式 Linux 的 DPM 是一種正在發(fā)展的技術(shù)。由于全球開放源代碼領(lǐng)域的開發(fā)人員所做的貢獻(xiàn),它的核心技術(shù)正在進(jìn)步,但實際應(yīng)用仍然必須清除一系列“路障”。
在Linux操作系統(tǒng)下有三類主要的設(shè)備文件類型,一是字符設(shè)備,二是塊設(shè)備,三是網(wǎng)絡(luò)設(shè)備。字符設(shè)備和塊設(shè)備的主要區(qū)別是:在對字符設(shè)備發(fā)出讀/寫請求時,實際的硬件I/O一般就緊接著發(fā)生了,塊設(shè)備則不然,它利用一塊系統(tǒng)內(nèi)存作緩沖區(qū),當(dāng)用戶進(jìn)程對設(shè)備請求能滿足用戶的要求,就返回請求的數(shù)據(jù),如果不能,就調(diào)用請求函數(shù)來進(jìn)行實際的I/O操作。塊設(shè)備是主要針對磁盤等慢速設(shè)備設(shè)計的,以免耗費過多的CPU時間來等待。
針對MPI集群通信的特點,通過分析當(dāng)前網(wǎng)絡(luò)的通信結(jié)構(gòu)和MPI的點到點通信模式,提出了一種基于數(shù)據(jù)鏈路層的集群通信機制,用以減少協(xié)議開銷和內(nèi)存拷貝次數(shù),從而提高集群節(jié)點間的通信性能,并且通過實驗驗證了該機制的可行性。