計算機科學和技術畢業(yè)論文-Linux操作系統(tǒng)的實時性技術研究_第1頁
計算機科學和技術畢業(yè)論文-Linux操作系統(tǒng)的實時性技術研究_第2頁
計算機科學和技術畢業(yè)論文-Linux操作系統(tǒng)的實時性技術研究_第3頁
計算機科學和技術畢業(yè)論文-Linux操作系統(tǒng)的實時性技術研究_第4頁
計算機科學和技術畢業(yè)論文-Linux操作系統(tǒng)的實時性技術研究_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

./學士學位論文題目Linux操作系統(tǒng)的實時性技術研究學生指導教師年級2008級專業(yè)計算機科學與技術系別計算機科學與技術學院計算機科學與信息工程摘要:信息技術的發(fā)展和Internet廣泛深入的應用使嵌入式系統(tǒng)成為電子計算機行業(yè)的熱點。嵌入式系統(tǒng)技術上的成就為航空航天、工業(yè)控制等技術領域上的探索提供了更加科學和有效的手段,同時也為人們的日常生活帶來了更多欣喜和便利。嵌入式技術是在計算機和通信技術的基礎上發(fā)展起來的,以嵌入式微處理器和嵌入式操作系統(tǒng)為發(fā)展核心。諸多的嵌入式操作系統(tǒng)中,嵌入式憑借自身硬件支持上的廣泛性、開源性和可移植性等特點發(fā)展迅速。在嵌入式技術日新月異的背景下,許多應用對于嵌入式系統(tǒng)的實時性提出了更高的要求,根據(jù)這一要求,本文將致力于嵌入式Linux實時性能的研究。所研究的嵌入式Linux的目標硬件平臺采用基于X86體系結構的PC/104總線系統(tǒng),該總線系統(tǒng)包括CPU模塊和數(shù)據(jù)采集模塊。本文首先概括地介紹了嵌入式系統(tǒng)的概念及特點、PC/104總線的特點、嵌入式系統(tǒng)目前國內外的發(fā)展狀況,在此基礎上介紹了本課題的研究背景及必要性;然后對實驗系統(tǒng)硬件平臺的設計和配置做了詳細介紹;接下來在分析了Linux內核關鍵機制后詳細論述了目標系統(tǒng)的嵌入式Li~軟件環(huán)境的構建過程,其中對符合本實驗要求的Linux內核的定制和移植、根文件系統(tǒng)的構造、引導加載程序的寫入做了詳細描述。本文的重點是開發(fā)數(shù)據(jù)采集模塊在自行構建的嵌入式Linux軟件環(huán)境下的設備驅動,其中首先對Linux設備驅動程序作了簡要介紹,然后詳細描述了數(shù)據(jù)采集模塊設備驅動的設計與實現(xiàn)過程。本文的最后通過一個基于C/S網(wǎng)絡架構的遠程數(shù)據(jù)采集程序對嵌入式Linux的實時性能作了測試和論證。關鍵詞:嵌入式系統(tǒng)、Linux、PC/104、設備驅動、實時性目錄第一章緒論1.1嵌入式系統(tǒng)1嵌入式系統(tǒng)的定義及特點11.1.2.嵌入式操作系統(tǒng)11.2PC/104總線21.3嵌入式操作系統(tǒng)國內外發(fā)展現(xiàn)狀21.4嵌入式操作系統(tǒng)的發(fā)展趨勢31.4.1.嵌入式實時超微內核31.4.2.開發(fā)環(huán)境的開放性和集成化31.5課題研究背景及意義31.6論文的主要研究內容3第二章嵌入式實驗系統(tǒng)硬件設計與配置2.1實驗系統(tǒng)總覽42.2下位機CPU模塊SCM/LX3160介紹42.2.1SCM/LX-3160的性能特點52.2.2SCM/LX-3160母板邏輯62.3下位機I/O模塊DIAMOND-MM-32-AT分析72.3.1DIAMOND-MM-32-AT概述72.3.2DIAMOND-MM-32-AT模擬輸入的范圍和分辨率92.3.3DIAMOND-MM-32-ATA/D采樣模式102.3.4DIAMOND-MM-32-AT模擬輸出的范圍和分辨率112.3.5DIAMOND-MM-32-AT數(shù)字I/0工作模式122.4本章小結14第三章嵌入式Linux軟件開發(fā)環(huán)境的構建3.1Linux內核分析153.1.1Linux內核概述153.1.2Linux內核系統(tǒng)體系結構163.1.3申請內存的動態(tài)分配163.1.4Linux中斷機制173.1.5Linux系統(tǒng)調用接口183.2內核的定制18內核的選擇18內核的裁剪和編譯203.3基于Busybox工具的根文件系統(tǒng)的搭建273.3.1Busybox簡介273.3.2根文件系統(tǒng)的構建過程273.4存儲設備的準備303.5引導加載程序的選擇與寫入313.6本章總結31第四章數(shù)據(jù)采集驅動程序的設計與實現(xiàn)4.1Linux設備驅動程序介紹324.1.1Linux對于設備和模塊的分類324.1.2Linux設備驅動程序的作用324.1.3Linux內核與設備驅動程序的關系334.2Linux設備驅動程序中的幾個重要概念334.2.1模塊與應用程序33內核空間與用戶空間344.3DMM32驅動程序的設計與實現(xiàn)344.3.1DMM32設備的工作模式344.3.2DMM32驅動程序中需要加入的頭文件、系統(tǒng)宏及全局變量38設備驅動程序中四個重要的數(shù)據(jù)結構394.3.4設備的初始化及釋放42設備的打開和關閉43設備的讀寫434.3.7設備的模式控制434.3.8中斷處理例程46其它-些設置函數(shù)484.4設備驅動的編譯494.5DMM32設備驅動程序的使用與工作過程49設備驅動的使用494.5.2DMM32設備驅動的工作過程概述504.6本章總結51第五章基于嵌入式Linux的實時性測試5.1遠程數(shù)據(jù)采集程序的設計與實現(xiàn)525.1.1Linux下的Socket編程簡介52遠程數(shù)據(jù)采集程序流程525.2遠程數(shù)據(jù)采集程序的測試結果及分析545.3本章小結58第六章總結與展望6.1總結596.2展望59.第一章緒論計算機技術、通信技術的發(fā)展以及互聯(lián)網(wǎng)的普及使得計算機的微型化和專業(yè)化成為發(fā)展趨勢。后PC時代的到來又使得以嵌入式微處理器和嵌入式操作系統(tǒng)為核心的嵌入式技術成為一個新的技術發(fā)展方向。嵌入式技術在飛速發(fā)展的同時也在改變著社會生產(chǎn)的各個行業(yè)和群眾生活的各個方面,從消費電子到工業(yè)設備,從民用產(chǎn)品到國防軍事,都能看到嵌入式技術產(chǎn)品的身影。嵌入式技術在工業(yè)自動化、國防、航天等領域有著突出的應用,例如宇宙飛船、火箭、導彈制導系統(tǒng);在人們日常生活中隨處可見的手持移動通訊設備、智能家電也都是以嵌入式系統(tǒng)為技術依托。生產(chǎn)信息化技術與人們生活水平的提高又對嵌入式系統(tǒng)提出了新的要求,新一代嵌入式產(chǎn)品的實時性成為衡量其性能的主要指標。本文將深入研究基于開源操作系統(tǒng)Linux的嵌入式系統(tǒng)的實時性能,為嵌入式Linux的廣泛應用提供論證。1.1嵌入式系統(tǒng)1.1.1嵌入式系統(tǒng)的定義及特點嵌入式系統(tǒng)的定義有很多,下面給出兩種比較合理的定義。從技術角度的定義:嵌入式系統(tǒng)是以應用為中心,以計算機技術為基礎,軟件與硬件可裁剪,在功能、可靠性、成本、體積以及功耗方面需求嚴格的專用計算機系統(tǒng)。從系統(tǒng)角度的定義:嵌入式系統(tǒng)是完成復雜功能的硬件和軟件,并使其緊密合在一起的計算機系統(tǒng)。從上面的定義可知嵌入式系統(tǒng)是一個整體的概念,包括硬件部分和軟件部分。硬件部分包括嵌入式微處理器、外圍硬件設備,軟件部分包括嵌入式操作系統(tǒng)和應用程序。與通用計算機系統(tǒng)的通用性和廣泛性不同,嵌入式系統(tǒng)是面對專業(yè)領域和特定環(huán)境的應用系統(tǒng),因而嵌入式系統(tǒng)有其自身的特點:1嵌入式系統(tǒng)的專用性決定了其體積小、功耗低、集成度高的特點,能夠把通用計算機中需要很多板卡共同完成的功能集成在嵌入式芯片內部,這使得嵌入式系統(tǒng)的移動性大為增強,與網(wǎng)絡的禍合性也越來越緊密。2嵌入式系統(tǒng)的硬件和軟件的設計必須遵循高效原則,根據(jù)功能量體裁衣、去除冗余,這樣才能在具體應用中對處理器的選擇更具有競爭力。3>嵌入式系統(tǒng)中的軟件通常都固化在存儲器芯片或ROM中,目的是提高系統(tǒng)運行速度和可靠性。4>嵌入式系統(tǒng)通常對實時性要求較高。1.1.2.嵌入式操作系統(tǒng)當硬件資源一定的情況下,系統(tǒng)性能就取決于軟件。嵌入式系統(tǒng)發(fā)展中,嵌入式操作系統(tǒng)的發(fā)展也起著異乎尋常的作用。嵌入式操作系統(tǒng)負責全部硬件軟件資源的分配、控制協(xié)調并發(fā)。隨著網(wǎng)絡技術的發(fā)展和信息家電的普及,嵌入式操作系統(tǒng)也從單一的弱功能性向高專業(yè)化的強功能性發(fā)展。一般情況下,嵌入式操作系統(tǒng)可以分為兩類,一類是面向控制、通信等領域的實時操作系統(tǒng),如WindRiver公司的Vxworks、QNX系統(tǒng)軟件公司的QNX、ATI的Nucleus等;另一類是面向消費電子產(chǎn)品的非實時操作系統(tǒng),這類產(chǎn)品包括個人數(shù)字助理<PDA>、移動電話、機頂盒、WebPhone等。Linux操作系統(tǒng)作為開源操作系統(tǒng)的杰出代表在嵌入式領域應用極為廣泛,對于教學、科研具有重要的研究價值。1.2PC/104總線PC/104是一種專為嵌入式系統(tǒng)定義的工業(yè)總線標準,因具有104個針腳而得名,其信號定義與PC/AT相同,只是機械和電氣規(guī)范不同。與普通的PC總線的主要不同有以下幾點:1.小尺寸機構:標準模塊的機械尺寸僅為96×90mm。2.堆棧式連接:總線以針孔式層疊連接,即PC104總線模塊之間總線的連接是通過上層的針和下層的孔相互咬和相連,這種層疊封裝有極好的抗震性。3.輕松總線驅動:減少元件數(shù)量和電源消耗,4mA總線驅動即可使模塊正常工作,每個模塊1-2瓦能耗。以上特點使得PC/104總線結構的模塊特別適合嵌入式系統(tǒng)的開發(fā)。本實驗系統(tǒng)中的SCM幾X3160、DIAMOND-MM-32-AT都是遵循PC/104總線標準的嵌入式設備。1.3嵌入式操作系統(tǒng)國內外發(fā)展現(xiàn)狀各個領域對嵌入式系統(tǒng)實時性要求的提高也促進了各國對實時嵌入式操作系統(tǒng)的研發(fā)和嵌入式操作系統(tǒng)實時性的改進。從上世紀80年代起,美國的軟件開發(fā)商就開始進行商業(yè)化的嵌入式系統(tǒng)和專業(yè)嵌入式操作系統(tǒng)的研發(fā)。經(jīng)過了近三十年的發(fā)展,嵌入式操作系統(tǒng)的功能和結構得到了不斷完善,多任務操作系統(tǒng)和實時性較高的操作系統(tǒng)正得到推廣和應用。目前應用較為廣泛的嵌入式實時操作系統(tǒng)主要有:VxworksVxworks是美國WindRiver公司在1983年設計設計的一款嵌入式實時操作系統(tǒng),具有良好的可靠性和卓越的實時性以及友好的用戶開發(fā)環(huán)境,被廣泛用于航空、航天、通信等對實時性要求頗高的領域LynxOSLynxOS是一個分布式的實時操作系統(tǒng),提供256個全局用戶線程優(yōu)先級,并提供一些傳統(tǒng)的非實時系統(tǒng)的服務特征。RTLinuxRTLinux是具有硬實時特性的源代碼開發(fā)的多任務操作系統(tǒng),由美國新墨西哥州大學研發(fā)的。它通過在Linux內核與硬件中斷之間增加一個可搶占的實時內核來提高整個操作系統(tǒng)的實時性能。RTAI來自意大利的RTAI的設計思想源于RTLinux,RTAT在Linux內核之上定義了一個實時的硬件抽象層,實時任務通過該抽象層提供的接口與Linux內核交互。因此它在盡量少地修改Linux源代碼的情況下增加了Linux的實時性能。近幾年國內的一些公司也加入了實時嵌入式操作系統(tǒng)的研發(fā),推出自己的嵌入式操作系統(tǒng),較為著名的有DeltaOS、HOPEN05。DeltaOS具有高可靠性和高實時性內核DeltaCORE,嵌入式的TCP/IP協(xié)議層DeltaNET、嵌入式文件系統(tǒng)DeltaFILE、嵌入式圖形接口DeltaGUI,同時它還支持ARM、X86、MIPS等多種嵌入式微處理器。HOPEN05是我國具有自主知識產(chǎn)權的一個實時多任務操作系統(tǒng),具有微內核并且用戶可根據(jù)自身需要進行內核定制。目前,以上兩款操作系統(tǒng)都廣泛應用于國內外市場的消費電子、通信產(chǎn)品、工業(yè)控制、輔助教學等領域。1.4嵌入式操作系統(tǒng)的發(fā)展趨勢.嵌入式實時超微內核微內核思想即將操作系統(tǒng)中共性的東西抽象出來構成操作系統(tǒng)的公共基礎而操作系統(tǒng)的具體功能實現(xiàn)由微內核之外的服務器來來實現(xiàn)。這是一種機制與策略分離的開放性設計思路。微內核為嵌入式應用提供了一個緊湊的可搶占的基本內核代碼層,并且具有良好的擴展性。.開發(fā)環(huán)境的開放性和集成化嵌入式應用軟件的特殊性決定要實現(xiàn)一個高性能的實時應用軟件必須具有強有力的開發(fā)工具及環(huán)境。與實時操作系統(tǒng)配合的開發(fā)環(huán)境已經(jīng)發(fā)展到了第三代,它以客戶服務器的系統(tǒng)結構為基礎,具有運行系統(tǒng)的無關性、環(huán)境的一致性等特點。1.5課題研究背景及意義本課題來源于某導彈控制系統(tǒng)的電性能檢測與診斷研究課題,該課題設計到嵌入式系統(tǒng)的開發(fā)和應用問題,希望創(chuàng)建一個支持多任務操作并且具有良好實時性的嵌入式系統(tǒng)平臺。目前該課題中使用PC/104總線標準的CPU模塊和數(shù)據(jù)采集模塊、X86體系結構,所采用的操作系統(tǒng)為單任務的DOS操作系統(tǒng),所以無法實現(xiàn)檢測中多任務的并行處理。在上述背景下,創(chuàng)建一個X86體系結構下、基于PC/104總線標準、支持多任務操作并且具有良好實時性的嵌入式軟件開發(fā)平臺成為了本課題的出發(fā)點。上面所提到的幾種實時操作系統(tǒng),由于開發(fā)成本的問題予以拋棄,由于Linux的多任務、源碼開放性及可裁剪定制等特點,本課題選擇Linux作為實驗系統(tǒng)的操作系統(tǒng)。本課題將深入研究PC/104環(huán)境下嵌入式Linux的實時性能,以說明能夠在PC/104環(huán)境、X86體系結構下構建一個多任務且實時性良好的嵌入式Linux軟件平臺。1.6論文的主要研究內容本文結合嵌入式操作系統(tǒng)的現(xiàn)狀及發(fā)展趨勢,采用基于PC/104總線標準的硬件平臺,在X86體系結構下,展開了對嵌入式Linux軟件環(huán)境的構建、設備驅動程序的設計開發(fā)及應用技術的研究,主要研究內容如下:1.系統(tǒng)硬件平臺的設計。2.嵌入式Linux軟件開發(fā)環(huán)境的構建,包括Linux內核的簡要分析、對于符合本實驗系統(tǒng)的Linux內核的裁剪和移植、根文件系統(tǒng)的搭建、引導加載程序的選擇與寫入。3.PC/104總線標準的數(shù)據(jù)采集模塊DIAMOND-M-32-T的研究以及該硬件設備在嵌入式Linux下的驅動程序開發(fā)。4.設計基于嵌入式Linux的網(wǎng)絡傳輸應用程序,調用以上的硬件設備驅動程序,為嵌入式Linux的實時性研究提供實驗驗證。第二章嵌入式實驗系統(tǒng)硬件設計與配置本章將重點介紹該實驗系統(tǒng)下位機部分的CPU模塊SCM/LX3160和I/O模塊DIAMOND-MM-23-AT的結構和相關性能。2.1實驗系統(tǒng)總覽本實驗系統(tǒng)分為上位機和下位機兩部分,上位機是普通個人電腦<PC>,下位機是PC/104規(guī)范的嵌入式平臺。下位機由CPU模塊和I/O模塊兩部分組成:CPU模塊SCM/LX3160是盛博公司的一款高性能的"ALLINONE"PC/104模塊;IO模塊DIAMOND-MM-32-AT是美國DIAMOND公司出品的一款PC/104規(guī)范的多功能數(shù)據(jù)采集卡。Linux內核的裁剪移植、根文件系統(tǒng)的創(chuàng)建、引導加載程序的安裝和配置工作以及設備驅動程序的編寫和編譯在上位機PC上進行,下位機在經(jīng)過構建的嵌入式軟件環(huán)境下通過網(wǎng)絡文件系統(tǒng)<NetworkFileSystem,簡稱NFS>掛載已經(jīng)編譯好的設備驅動程序并運行之。系統(tǒng)硬件框架如圖2.1所示。圖2.1系統(tǒng)硬件框架圖2.2下位機CPU模塊SCM/LX3160介紹SCM/LX-3160與PC/AT標準完全兼容,并遵從PC/104標準。在IBM-PC上運行的眾多軟件全部能在以SCM/LX-3160為基礎的系統(tǒng)中運行。模塊集成了PS/2鍵盤、PS/2鼠標、CRT、IDE、USB2.0、4串一并、2個10/100BaseT以太網(wǎng)等接口,在極小空間里實現(xiàn)PC機幾乎所有的功能。平板顯示接口、CF卡接口、串口多種形式選擇、看門狗功能等接口讓設計人員更方便的實現(xiàn)嵌入式系統(tǒng)應用。SCM/LX-3160專為嵌入式應用設計,具有低功耗、高可靠性、小體積、無風扇、寬溫工作的特點,使之廣泛適用于國防電子、車載系統(tǒng)、醫(yī)療儀器、通信、電力控制、工業(yè)現(xiàn)場控制、安防系統(tǒng)等應用中。SCM/LX-3160的性能特點SCM/LX3160采用AMDGeodeLX800CPU,工作頻率高達500MHz,具有128KB一級高速緩存和128KB二級高速緩存,在板表貼256MRAM,以下是它的其他性能:VGA控制器支持CRT及TFTLCD輸出2個Intel10M/100M以太網(wǎng)接口EIDE接口4個串口<COMI/2:RS232/422/485可選;COM3/COM4:RS232>一個CF卡接口<支持I型II型>AC97兼容AUDIO高度緊湊的PC/104結構形式支持PC/104總線手動復位和蜂鳴器輸出在板電池,保存實時時鐘SCM/LX3160的物理特性如下:尺寸:90mm×96mm×15mm電源要求:+5V±5%典型功能:5Won500MHz工作環(huán)境:S型:0℃~70℃;N型:-25℃~+75℃5%~95%相對濕度,無凝結貯存溫度:-55℃~+SCM/LX3160的許多功能是由軟件而不是由硬件控制的,故該CPU板的諸多功能建立在板載標準的ROM-BIOS支持及相關的軟件設置。圖2.2展示SCM/LX3160的機械尺寸圖。圖2.2SCM/LX3160機械尺寸圖SCM/LX-3160母板邏輯以下主要從SCM/LX-3160的CPU、內存管理、以太網(wǎng)控制器、中斷控制器等方面介紹其物理邏輯。1.CPUSCM/LX-3160使用的AMDGeodeLx800CPU是AMD公司最新一代的嵌入式低功耗1.2V處理器,具有完整的X86內核,整數(shù)運算單元使用8級流水線技術,內置一個X87兼容的浮點運算單元,兩個高速緩存都包含有獨立的指令Cache和數(shù)據(jù)Cache,大大提高了頁地址的訪問速度。其所支持的指令完全兼容INTEL公司的PentiumPro、AMD公司的MAD-K6指令集以及Athlon〔速龍的MMX技術。2.內存管理內存管理單元完全與X86體系兼容,支持TLB<虛擬地址的內置全關聯(lián)系統(tǒng)>,有兩級128KB的高速緩存。內存管理支持64位寬的數(shù)據(jù)總線,支持200M、400MT/S的前端總線速度,支持PCI對主內存的訪問。SCM/LX-3160在板提供256MBDDRSRAM,不使用奇偶校驗,并且模塊上電時檢查所有內存單元保證了其可靠性。3.以太網(wǎng)控制器SCM/LX-3160集成了兩個Intel8255X以太網(wǎng)控制器,英特爾公司生產(chǎn)的8255X以太網(wǎng)控制器是一個完整集成的10/100Base-TXLAN解決方案。它由媒體存取控制器MAC和物理層PHY接口結合成單一部件的解決方案構成。8255X可在全雙工或半雙工模式下工作。在全雙工模式下,8255X遵循IEEE802.3x流控制規(guī)范。8255X中的CSMA/CD單元具有802.3協(xié)議中的所有功能,例如幀格式化、幀剝離、沖突處理等;8255X中的PHY單元支持10Base-T-/100Base-TX的全雙工和半雙工協(xié)議。4.中斷控制器在一般的80x86微機系統(tǒng)中采用8259A可編程中斷控制器,每個8259A芯片管理8個中斷源。在PC/AT系列兼容機中使用兩片8259A芯片,共可以管理15級中斷向量。圖2.3PC/AT微機級聯(lián)式8259A中斷控制系統(tǒng)SCM/LX-3160帶有一個與8259A等同的中斷控制器。該中斷控制器與PC/AT機兼容,提供8個優(yōu)先級的中斷,其中有一些與模塊的在板設備接口和控制器相關,有一些可用于PC/AT擴展總線。表2.1列出了典型中斷用途。表2.1SCM/LX-3160中斷使用定義IRO系統(tǒng)資源NMI奇偶校驗錯誤0定時器1鍵盤2中斷控制器<8259兼容>3串行口2、串行口44串行口1、串行口35PCIPnP6軟驅接口7并行接口8實時時鐘9PCIPnP10PCIPnP11網(wǎng)絡控制器12PS/2鼠標13協(xié)處理器14EIDE15EIDE,如果BIOS中第二個IDE控制器禁止,IRQ15可用以上中斷定義并非不能更改,可以通過SCM/LX-3160系統(tǒng)啟動之前長按delete鍵進入板卡的BIOS設置,釋放其中的IRQ3、4、5、6、7、9、10、15。2.3下位機I/O模塊DIAMOND-MM-32-AT分析DIAMOND-MM-32-AT概述DIAMOND-MM-32-AT是嚴格符合PC/104規(guī)范的多功能數(shù)據(jù)采集卡,它的多功能體現(xiàn)在以下方面:它提供了32路16分辨率可編程輸入通道;在FIFO操作模式下最高采樣頻率達200Ksamples/s;具有4路12位分辨率的模擬輸出;用戶可調節(jié)的模擬輸出范圍;提供31路的數(shù)字I/O;帶有1個為A/D轉換和中斷計時提供時鐘源的32位計數(shù)器/定時器和1個通用的16位計數(shù)器/定時器;此外,它還提供具有專利保護的模擬輸入/輸出自校準功能。具體性能特性如下:1.模擬量輸入32路16位分辨率的模擬量輸入通道,可以被配置為犯路單端輸入或16路差分輸入,再或者16路單端輸入和8路差分輸入;輸入模擬量的增益、范圍、極性均可編程調節(jié);最高采樣頻率達200KHz;帶有可存儲512個樣品值的FIFO降低了中斷開支;軟件控制下的輸入模擬量范圍自校準功能。2.模擬量輸出4路12位分辨率的模擬量輸出通道,最大輸出電流5mA;全量程的多范圍輸出,包括單極和雙極;可編程的量程變化范圍;軟件控制下的輸出模擬量范圍的自動校準功能。3數(shù)字量的輸入/輸出用8255集成芯片構成的24路雙向數(shù)字通道為增強型電流驅動配有帶緩沖器的I/O外部數(shù)據(jù)鎖存和中斷操作的握手機制用戶可配置阻值的上下拉電阻7個固定輸出方向的輔助FO通道具備可編程功能4.計數(shù)器/定時器和戶JD觸發(fā)器1個32位的計數(shù)器/定時器用作A/D時鐘和中斷控制計時1個16位的通用計數(shù)器/定時器每個計數(shù)器/定時器都有輸入可編程資源允許外部A/D觸發(fā)和門限輸入在計數(shù)器/定時器觸發(fā)中斷的模式下通過A/D轉換脈沖輸出和外部觸發(fā)器實現(xiàn)多板的同步能力5.其它性能貯存溫度:-40℃~單位標度不需要電位微調或用戶校準圖2.4展示了DIAMOND-MM-32-AT的系統(tǒng)邏輯。DIAMOND-MM-32-AT模擬輸入的范圍和分辨率DIAMOND-MM-32-AT有著16位的A/D轉換器,這也意味著這些ADC輸出的數(shù)值精度可以達到1/216。16位二進制數(shù)的最大值為216-1,能夠從板卡的ADC讀到的直接數(shù)值為0-65535中的任一數(shù)值,所以可以勘察出的輸入電壓值的最小變化為模擬輸入通道全量程的1/216<l/65535>。輸入電壓的每一個1/216的變化都會導致ADC最后讀取數(shù)據(jù)的加1/減1,這種變化也稱作與1LSB有關。1.輸入的范圍和分辨率DIAMOND-MM-32-A的模擬輸入電壓可以是單極性也可以是雙極性。有關的輸入電壓的信息,諸如增益、范圍、極性等信息可以通過對11號寄存器的有關控制位的設置來實現(xiàn)。從圖2.4中可以看出:在輸入信號到達A/D轉換器之前,經(jīng)過一個可編程增益放大器,而這個增益放大電路首先要對輸入電壓范圍進行掃面,目的是使輸入信號能夠更好的匹配A/D轉換器從而得到更好的分辨率。本實驗系統(tǒng)選擇高增益,使得A/D轉換器能夠盡可能掃描到輸入信號的全部范圍,防止忽略掉超出正常范圍的信號。A/D轉換電路中還有一個內置的電平限幅器,防止選擇過高的增益系數(shù)后產(chǎn)生過高電平或過低電平,其工作過程如下:當放大后的信號經(jīng)過A/D轉換器會在超高電平處和超低電平處進行電平修整<限幅>。因而在這種情況下,板卡無法真正讀取輸入信號的全部范圍。輸入信號的多個參數(shù)如極性、范圍、增益構成了一個唯一的代碼值,這個代碼值需要被寫入到11號寄存器<模擬輸入配置寄存器>才能使配置生效。表2.2展示了9種不同輸入信號參數(shù)下的全量程范圍和分辨率,其中的代碼值為4、5、6、7的四種情況為可編程量程范圍,此外代碼值為9-11的三種情況等效于代碼值為O-2的三種情況。表2.2DAMONO-MM-32-AT模擬輸入電壓范圍的配置代碼極性范圍增益全量程范圍分分辨率<1LSB>0雙極性5V1±5V153μV1雙極性5V2±2.5V76μV2雙極性5V4±1.25V38μV3雙極性5V8±0.625V19μV4單極性5V1NULLNULL5單極性5V2NULLNULL6單極性5V4NULLNULL7單極性5V8NULLNULL8雙極性10V1±10V305μV9雙極性10V2±5V153μV10雙極性10V4±2.5V76μV11雙極性10V8±1.25V38μV12單極性10V10~10V153μV13單極性10V20~5V76μV14單極性10V40~2.5V38μV15單極性10V80~1.25V19μV2.A/D轉換公式不論輸入信號的范圍如何,從刀D轉換器得到的16位二進制數(shù)的值都是-32768到32767之間的一個數(shù)。這是因為ADC的輸入范圍就被固定為±10V,所有的輸入信號在達到ADC之前都被放大或轉換成±1OV的范圍。例如,一個范圍為0-1OV的輸入信號在達到ADC之前,首先會被整體降低5V變?yōu)椤?V范圍的信號,然后被放大2倍最終變?yōu)椤?OV范圍的信號。在不同的輸入范圍下根據(jù)得到的ADC輸出值計算輸入電壓的方法如下:記FS=full-scalevoltage全量程范圍<比如,±5V范圍時FS=5V>,輸入電壓為Vin,ADC輸出值為A/Dcode。DIAMOND-MM-32-ATA/D采樣模式DIAMOND-MM-32-AT有多種采樣模式,通過FIFO控制寄存器<Base+7>的FIFO使能位和Scan使能位及中斷控制寄存器<Base+9>的A/D中斷使能位的設置來實現(xiàn)。同時,只有當A/D中斷可用時FIFO存儲才可用。下面是對于該板卡的三種典型A/D工作模式的具體描述。1.FIFODIAMOND-MM-32-AT用一個1K字節(jié)的FIFO<FirstInFirstout先進先出>隊列型緩沖區(qū)來管理戶以D轉換后的數(shù)據(jù)。這個緩沖區(qū)用來暫時保存A/D轉換器產(chǎn)生的數(shù)據(jù)直到這些數(shù)據(jù)被用戶程序讀取。每個A/D采樣數(shù)據(jù)占2個字節(jié),因而整個FIFO最多可存512個采樣數(shù)據(jù)。FIFO緩沖區(qū)的使能通過設置FIFO控制寄存器的使能位來實現(xiàn)。單次采樣模式對FIFO的暫時存儲和先進先出的特征并無要求,所以可以對FIFO不作選擇。當然也可以使用FIFO,每個A/D采樣數(shù)據(jù)暫存到FIFO里,當外部軟件需要該數(shù)據(jù)時從FIFO中讀取,此種情況下FIFO中僅存一個采樣數(shù)據(jù)。故而在這種低速采樣模式下,每發(fā)生一次A/D轉換,用戶程序就會將FIFO中的數(shù)據(jù)讀出,數(shù)據(jù)采樣和數(shù)據(jù)讀取有著一一對應的關系,此時FIFO的內容不會溢出。而對于高速采樣模式或中斷操作情況下,FIFO的使用可以讓用戶程序一次讀取多個采樣數(shù)據(jù)因而有效地降低了總線對于A心轉換結束的響應頻率和中斷頻率。此外,FIFO要求采樣頻率一定要超過總線上的最大中斷頻率,以防用戶程序讀取空數(shù)據(jù)。一般來講,ISA總線的允許的最大中斷頻率為40KHz。由于DIAMOND-MM-32-AT的最大采樣頻率為40KHz,所以在高速采樣模式下FIFO要求降低最大中斷頻率。在中斷操作模式下,中斷處理例程每一次運行都會將FIFO中的數(shù)據(jù)全部讀走,于是有公式2.4。其中,fint為中斷頻率,fs為采樣頻率,n為每次中斷讀取的采樣數(shù)據(jù)的個數(shù),通過FIFO深度控制寄存器<Base+6>對n進行設置。在本實驗系統(tǒng)中,使用了DIAMOND-MM-32-AT、對n的默認設置一一FIFO深度的一半即256。因此,在任何操作系統(tǒng)之下該板卡的最高中斷頻率被降低為781Hz。如果Scan和FIFO都可用,那么當FIFO達到軟件設定的閾值時產(chǎn)生中斷,然后中斷處理例程從FIFO中讀取指定數(shù)量的采樣數(shù)據(jù),即便采樣數(shù)據(jù)的數(shù)量不是所掃描通道個數(shù)的整數(shù)倍也是如此。比如,掃描通道的個數(shù)設定為10、FIFO閾值設定為256,那么當發(fā)生第一次中斷時中斷處理例程將會從FIFO中讀取256個采樣數(shù)據(jù),這包括對10個通道的25次完整掃描和第26次掃描中的前6個通道的采樣數(shù)據(jù),當下一次中斷發(fā)生時,中斷處理例程又會繼續(xù)讀取第26次掃描中剩下的4個采樣數(shù)據(jù)及接下來25次完整掃描的數(shù)據(jù)和2個下一次掃描中的數(shù)據(jù)。2.Scan掃描采樣掃描指的是對于多個連續(xù)通道順序地快速采樣。比如,每秒鐘掃描一次并同時對0-15號通道進行采樣<掃描頻率為1Hz>,每次A/D時鐘脈沖<軟件命令/定時器/外部觸發(fā)器>到來,16個通道就被進行一次性地快速采樣。每次的掃描間隔為5-2μs。因為每個A/D時鐘觸發(fā)對全部選通通道的采樣,所以每個通道的采樣頻率等于掃描頻率,并且總采樣頻率等于掃描頻率乘以選通通道數(shù)。Scan掃描操作和FIFO操作是相互獨立的,可以同時有效,亦可單獨有效。3.順序連續(xù)采樣在順序連續(xù)采樣中,每個A/D時鐘脈沖只會觸發(fā)當前通道的一次A/D轉換,因此設置了一個通道計數(shù)器。如果選通通道范圍為1<highchannel=lowchannel>,那么時鐘脈沖的到來只會觸發(fā)對當前輸入通道采樣數(shù)據(jù)的A/D轉換;而如果選通通道范圍大于1<highchannel>lowchannel>,當前通道的A/D轉換結束后通道計數(shù)器從低通道向高通道方向移動,最高通道的A/D轉換完成后通道計數(shù)器會復位至最低通道等待下一輪轉換。表2.3展示了每種模式的配置和描述。表2.3DIAMONO-MM-32-ATA/D采樣模式設置及描述ScanFIFO中斷模式描述否否否單次采樣這是最基本的一種采樣模式,用于軟件控制下的采樣頻率要求精確度不高或者外部信號控制下速率低的情況下的低于100Hz的低速采樣。一次采樣一個通道或多個通道。是否否掃描采樣用于軟件或外部信號控制下的低于I00Hz的連續(xù)采樣,掃描采集多個連續(xù)通道的信號,單次掃描內采樣間隔為5-20μs不等,掃描間隔可長可短依賴于軟件或外部觸發(fā)器。高于100Hz的掃描采樣一般采用中斷模式。否否是單次中斷采樣,低速用于采樣頻率低于100Hz但精度要求高的單通道或多通道隨機采樣的情況,采樣時鐘來自板載計數(shù)器/定時器或外部時鐘源,每次采樣間隔相同。是否是掃描中斷用于多個通道的采樣速率可控的低速采樣情況,每個通道的采樣頻率小于500Hz。每次采樣動作包括對所有通道的連續(xù)快速掃描和采樣,掃描間隔取決于采樣頻率。否是是單次中斷采樣,高速用于中高速采樣<大于500Hz>,最高支持板卡的最大采樣頻率200kHz。采樣頻率也可根據(jù)需要適當降低,采樣時鐘來自板載計數(shù)器/定時器或外部時鐘源。是是是掃描中斷采樣用于掃描速率和采樣頻率較高的多通道采樣的情況,采樣時鐘同樣來自板載計數(shù)器/定時器或外部時鐘源。DIAMOND-MM-32-AT模擬輸出的范圍和分辨率DIAMOND-MM-32-AT提供了4路12位分辨率的模擬輸出通道,12位二進制數(shù)的最大值為212-1即4095,故而允許寫入模擬輸出端口的數(shù)值范圍為0-4095。12位DAC的最小精度是全量程輸出范圍的1/4096,每個微小的改變稱為1LSB,有如下等式:1LSB=最大電壓幅值/4096例如:輸出電壓范圍=±5V,則有,最大電壓幅值=10V;1LSB=10/4096=2.44mV。此外,DIAMOND-MM-32-AT的D/A轉換芯片需要兩個參考電壓,一個是對于最高電壓的參考,另一個是對最低電壓的參考。并且電壓輸出范圍一旦設定,所有的模擬輸出通道都遵循同一個范圍。板卡加電后,各DAC自動復位至電壓輸出范圍的中值。DIAMOND-MM-32-AT數(shù)字I/0工作模式DIAMOND-MM-32-AT包含兩組數(shù)字I/O線路,分別如下:內部82C55數(shù)字I/O電路提供的24路數(shù)字I/O線路,這些線路是對8255芯片模式0和模式1功能的仿真,它為輸出模式提供外部驅動的緩沖。板卡的J4部分就是對此24路數(shù)字I/O的接口。板卡的J3部分包含的4路輸入和3路輸出既可被用于通用數(shù)字I/O,亦可定義成特殊用途。1.J4提供的主數(shù)字I/O:內部82C55電路。對于82C55電路提供的數(shù)字帕是通過對Page1的4個寄存器<Base+12至Base+15>來訪問的。82C55芯片的地址0就等效于該板卡上的Base+12。在對數(shù)字I/O訪問之前,首先要設置復合控制寄存器<Base+8>使Page1為當前頁,以便訪問與各DAC對應的寄存器。在使用Base+l2至Base+15寄存器之前,首先要在復合控制寄存器<Base+8>和頁控制寄存器<Base+7>對頁進行設置使Page1成為當前頁。此種數(shù)字I/O的功能類似于82C55的模式O的直接I/O和模式1的鎖存I/O。在模式1中,添加了鎖存和握手通知信號。J4部分的A、B、C三個口的輸入輸出都是可通過編程控制的。此外C口可以被分割成兩個部分<CO~C3,C4~C7>,每個部分的輸入輸出方向的設置都是獨立的。J4上的24路數(shù)字I/O都外接有4.7kΩ價作為上下拉電阻,保證各線路處于電平的穩(wěn)定狀態(tài)。同時,每條線路在8255控制芯片與FO針腳之間都有一個74FCT245芯片作為數(shù)據(jù)緩沖區(qū)和線路驅動。這些線路驅動能夠根據(jù)寫入的控制字而改變輸入輸出方向。板卡加電后,所有的端口被默認設置為輸入模式,如果某個端口需要改變?yōu)檩敵瞿J?需要在Base+l5中修改相應控制位。圖2.5展示了82C55電路的寄存器描述。圖2.5DAMOND-MM-32-AT內部82C55電路中寄存器描述Base+nD7D6D5D4D3D2D1D012,Read/writeA7A6A5A4A3A3A1A013,Read/writeB7B6B5B4B3B2B1B014,Read/writeC7C6C5C4C3C2C1C015,writeonly1ModeCModeADirADirCHModeBDirBDirCL2.各端口的工作模式描述:模式O和模式1<l>模式O為基本的輸入輸出模式,有以下特性:任何端口都具有輸出及輸入功能。輸出時各Port均有鎖定功能,能將信號鎖定在最后一次的輸出狀態(tài)上。輸入無鎖定功能,數(shù)據(jù)收到后端口上的信號將不會保留最后一次輸入的狀態(tài)。有2個8位端口<A和B>及2個4位端口<C0~C3和C4~C7>可供利用,一共可組成16種不同的輸出入狀態(tài)。<2>模式1為握手式的輸入輸出模式,帶有"Latch"<輸入模式有效>"Ack"<輸出模式有效>兩個通訊信號,并且只有端口A可以設置成模式1。在板卡最初加電或復位狀態(tài)時,Latch=low,Ack=low。此種模式又分以下四種情況:a.輸入模式,無中斷操作:"Latch"是上升沿有效的信號。若端口A被設置成模式1,外部數(shù)據(jù)輸入時"Latch"便會由低變高,端口A各針腳上的數(shù)據(jù)被暫時鎖存,同時"Ack"信號由低變高以通知內部控制芯片讀取數(shù)據(jù)。如果數(shù)據(jù)在"Latch"第二次上升沿到來時還未被讀取,將會被下次到來的數(shù)據(jù)所覆蓋;如果數(shù)據(jù)及時被內部控制芯片讀取,Ack和Latch會立即被置低以等待下次數(shù)據(jù)的到來。b.輸出模式,無中斷操作:若端口A被設置成模式1,內部數(shù)據(jù)要通過A端口輸出時,"Ack"由低變高預示有新數(shù)據(jù)到來,然后外圍電路就會通過線路驅動將"Latch"變高,此時"Ack"又會由高變低,"Latch"會在端口A的數(shù)據(jù)被讀走后變低。c.輸入模式,有中斷操作:當"Latch"被外圍電路置高后,端口A會把針腳上的數(shù)據(jù)暫時鎖存,"Ack"信號由低變高,此時中斷信號就會產(chǎn)生。中斷處理例程把端口A的鎖存數(shù)據(jù)讀走后Ack變低指示新數(shù)據(jù)允許被鎖存。同時中斷處理例程還負責向復合控制寄存器<Base十8>的第3位寫入"1”d.輸出模式,有中斷操作:與b情況類似,若端口A被設置成模式1,內部數(shù)據(jù)要通過端口A輸出,"Ack"由低變高預示有新數(shù)據(jù)到來。外圍電路鎖存住數(shù)據(jù)后,會通過線路驅動將Latch輸入變高,導致"Ack"變低和一個新的中斷請求的產(chǎn)生。中斷處理例程接下來會將端口A上的數(shù)據(jù)讀走。在這種模式下,應確保中斷信號產(chǎn)生前數(shù)據(jù)就己寫到端口A,以便讓外圍電路在Ack由低變高之前把數(shù)據(jù)從端口A讀走。在最后一次中斷到來時發(fā)現(xiàn)端口A已無數(shù)據(jù)后結束操作。綜合以上四種情況,對于a、b兩種無中斷操作的情況程序必須采用查詢方式,極其浪費CPU資源導致系統(tǒng)效率低下,因而本實驗系統(tǒng)的設備驅動程序只對c、d兩種帶有中斷操作的情況進行了實現(xiàn)。至于模式1下是否使用中斷,在中斷與A江>時鐘控制寄存器<Base+9>中進行設置,該寄存器描述如圖2.6。圖2.6中斷與A/D時鐘控制寄存器<Base+9>描述BitNo76543210NameADINTEDINTETINTERSVD1RSVD2XCLKENCLKSELADINTE:A/D中斷使能1 允許A/D模擬輸入時的中斷操作0 使戶JD中斷無效DINTE:數(shù)字I/O中斷使能1 J4接口的數(shù)字I/O部分"Latch"上升沿時觸發(fā)中斷0 使數(shù)字I/O中斷無效TINTE:板載82C54計數(shù)器O1 82C54計數(shù)器0的下降沿觸發(fā)中斷O 使計數(shù)器O的中斷操作無效RSVDI、RSVD2:保留CLKEN:A/D采樣的硬件時鐘使能1 使A/D采樣的硬件時鐘有效<硬件時鐘源選擇通過CLKSEL位設置來實現(xiàn)>,此時軟件觸發(fā)無效,即對Base功的寫操作不再會觸發(fā)一次戶口D轉換O 使A/D采樣的硬件時鐘無效,此時一個軟件命令觸發(fā)一次戶以D轉換CLKSEL:A/D硬件時鐘源的選擇<該位只有當CLKEN=l時有效>1 內部時鐘作為A/D時鐘源,板載82C54的計算器/定時器2輸出的下降沿觸發(fā)一次A/D轉換O 外部時鐘作為A/D時鐘源,來自I/O接口的EXTCLK針腳的下降沿觸發(fā)一次戶了D轉換3.J3的輔助數(shù)字I/O板卡J3接口的3路數(shù)字輸出和4路數(shù)字輸入既可作為一般用途,又可以為A/D和計數(shù)器/定時器提供輔助作用。對于它們的控制和設置依靠兩個控制寄存器<Base+1O、Base+9>中的幾個控制位來實現(xiàn)。下面分別對3路數(shù)字輸出和4路數(shù)字輸入作詳細闡述。<1>3路數(shù)字輸出J3第42針腳Ctr2Out/Dout2此針腳的功能由計數(shù)器與數(shù)字I/O配置寄存器<Base+10>的第5位來決定:1 此針腳的輸出為板載82C54計數(shù)器2的輸出0 此針腳的輸出為輔助數(shù)字輸出寄存器<Base+1>的第2位DOUT2的值J3第43針腳Dout1此針腳的輸出值為輔助數(shù)字輸出寄存器<Base+1>的第l位DOUTI的值J3第44針腳Ctr0Out/Dout0此針腳的功能由計數(shù)器與數(shù)字FO配置寄存器<Base+10>的第4位來決定:1 此針腳的輸出為板載82C54計數(shù)器O的輸出0 此針腳的輸出為輔助數(shù)字輸出寄存器<Base+1>的第0位DOUT0的值<2>4路數(shù)字輸入J3第45針腳Extelk/Din3該針腳輸出的數(shù)字時鐘信號能夠在輔助數(shù)字輸入寄存器<Base+4>的第3位讀到。它能夠在中斷和戶以D時鐘控制寄存器<Base+9>的CLKEN=l和CLKSEL二0時作為控制A/D轉換的外部時鐘。J3第46針腳Extgate/Din2該針腳輸出的數(shù)字時鐘信號能夠在輔助數(shù)字輸入寄存器<Base+4>的第2位讀到。它能夠在計數(shù)器與數(shù)字I/O配置寄存器<Base+10>的GT12EN=1時作為A/D轉換的使能門限信號。J3第47針腳Gate0/Din1該針腳輸出的數(shù)字時鐘信號能夠在輔助數(shù)字輸入寄存器<Base+4>的第1位讀到。它能夠在計數(shù)器與數(shù)字I/O配置寄存器<Base+10>的第2位GTOEN=l作為板載82C54計數(shù)器0的門限信號。當該門限信號為高時,計數(shù)器0計數(shù);門限信號為低時,計數(shù)器O無法計數(shù)。J3第48針腳Clk0/Din0該針腳輸出的數(shù)字時鐘信號能夠在輔助數(shù)字輸入寄存器<Base+4>的第0位讀到。它能夠在計數(shù)器與數(shù)字I/O配置寄存器<Base+10>的第1位SRCO=O作為板載82C54計數(shù)器0的外部時鐘信號,且上升沿有效。2.4本章小結本章敘述了整個實驗系統(tǒng)的硬件架構設計,并分別對下位機系統(tǒng)的CPU模塊SCM/LX-3160和I/O模塊DIAMOND-MM-32-AT的性能和各方面邏輯作了深入剖析,為軟件平臺的搭建及數(shù)據(jù)采集驅動程序的編寫提供了硬件支持。第三章嵌入式Linux軟件開發(fā)環(huán)境的構建下位機軟件開發(fā)環(huán)境的構建過程在上位機PC上完成,構建好的軟件環(huán)境存儲在一張總容量2GB的CF卡上。上位機PC安裝的Ubuntu9.03操作系統(tǒng),整個構建過程包括Linux內核的裁剪和移植、根文件系統(tǒng)的創(chuàng)建、引導加載程序的寫入。本章將首先分析Linux內核的關鍵機制,介紹內核移植到PC/104硬件平臺的方法和注意事項,然后提出了利用busybox工具構建根文件系統(tǒng)的方法,隨后闡述了在構建好的系統(tǒng)上寫入引導加載程序的過程,為基于該內核的硬件設備驅動程序的設計和實現(xiàn)打造一個合適的軟件平臺。3.1Linux內核分析3.1.1Linux內核概述一個完整可用的操作系統(tǒng)主要由4部分組成:硬件、操作系統(tǒng)內核、操作系統(tǒng)服務以及用戶應用程序。Linux操作系統(tǒng)把這4部分細化為:硬件、Linux內核、系統(tǒng)調用庫和用戶應用程序,如圖3.1。圖3.1Linux操作系統(tǒng)組成Linux的內核有如下特點:可移植性:支持廣泛的硬件平臺,在X86、ARM等體系結構上都可以運行;標準化和互用性;內核所有代碼都是遵守GPL軟件許可的免費軟件;完善的網(wǎng)絡支持;具有內置的TCP/IP協(xié)議,有IPv4、IPv6的兼容接口;安全性:Linux上的安全性主要包括系統(tǒng)存取安全機制、網(wǎng)絡存取安全機制、SSH<安全套接層>;模塊化:內核中大部分的設備驅動采用模塊化編寫,運行時可以根據(jù)系統(tǒng)需要加載任意模塊;穩(wěn)定性和可靠性;Linux內核的穩(wěn)定性在大多數(shù)Linux發(fā)行版操作系統(tǒng)中得到了印證;易編程:Linux內核代碼的大部分用C語言來編寫,容易上手,此外網(wǎng)絡平臺上也有很多可以借鑒的有用資源。內核版本Linux2.6相對于Linux2.4,提高了中斷性能并縮短了調度響應時間,其中最顯著的改進之處有:采用可搶占內核;更加有效的調度算法;同步性的提高。Linux內核系統(tǒng)體系結構Linux內核主要包括5個模塊;進程調度模塊、內存管理模塊、文件系統(tǒng)模塊、進程間通信模塊和網(wǎng)絡接口模塊等。各模塊之間存在一定的依賴關系,如圖3.2所示。進程調度虛擬文件系統(tǒng)進程調度虛擬文件系統(tǒng)文件系統(tǒng)內存管理進程間通信網(wǎng)絡接口圖3.2Linux內核各模塊間依賴圖虛擬文件系統(tǒng)模塊是Linuxo.95之后的版本實現(xiàn)的,網(wǎng)絡接口模塊是Linux0.96之后的版本實現(xiàn)的。由圖3.2可以看出,所有內核模塊都與進程調度模塊存在依賴關系,因為所有的模塊都需要依靠進程調度程序運行或掛起它們的進程。除此之外,進程調度模塊需要使用內存管理模塊來調整特定進程所使用的物理內存空間,進程間通信模塊則需要依靠內存管理器來支持共享內存通信機制,該機制允許兩個以上進程互斥地訪問內存的同一區(qū)域以進行進程間信息的交換;虛擬文件系統(tǒng)模塊也會使用網(wǎng)絡接口來支持網(wǎng)絡文件系統(tǒng)<NFS>,同樣也能使用內存管理子系統(tǒng)提供內存虛擬盤設備<Ramdisk>,而內存管理模塊也會使用文件系統(tǒng)模塊來支持內存數(shù)據(jù)塊的交換操作。申請內存的動態(tài)分配自Linux0.12版本開始,內存地址空間分為虛擬地址空間、線性地址空間和物理地址空間,內核代碼和數(shù)據(jù)以及各應用程序的代碼和數(shù)據(jù)映射在這三種地址空間的不同位置。對Linux0.12內核代碼和數(shù)據(jù)來說,head.s程序的初始化操作把內核代碼段和數(shù)據(jù)段都設置成了長度為16MB的段。在線性地址空間中,內核代碼段和數(shù)據(jù)段重疊在一起,線性地址從0到0xFFFFFF共16MB范圍,此地址范圍除了內核代碼段和數(shù)據(jù)段還包括內核段表<GDT、IDT、TSS>、頁目錄表、內核的二級頁表以及內核臨時堆棧。頁目錄表和二級頁表聯(lián)立將0-16MB的線性地址空間與物理地址空間一一對應起來。因此,對于內核代碼及數(shù)據(jù)而言,內核的虛擬地址空間、線性地址空間和物理地址空間三者之間的關系如圖3.3。圖3.3內核代碼和數(shù)據(jù)段在三種地址空間的關系當上層應用程序使用C函數(shù)庫中的內存分配函數(shù)malloc<>申請內存時,內核不會干涉這個過程,原因是內核此前已經(jīng)為各個進程在4GB的線性地址空間分配了64MB的空間。盡管如此,內核會為進程使用的代碼和數(shù)據(jù)空間維護一個當前位置值brk,這個值保存在每個進程的數(shù)據(jù)結構中,用來指示該進程的代碼和數(shù)據(jù)在線性地址空間的最高位置。當malloc<>函數(shù)為程序申請內存時,它會通過系統(tǒng)調用brk<>把程序申請的空間告知內核,然后內核更新該進程的brk值,但也并不意味著此時將進程申請的空間數(shù)量映射到物理內存。只有當程序尋址到某個不存在對應的物理頁面地址時,內核才會進行相關物理內存頁面的映射操作。Linux中斷機制Linux內核將中斷信號分為:硬件中斷和軟件中斷<異常>,中斷號從0-255。對于int0-int31<0x00-0x1f>,每個中斷的功能都有CPU保留,屬于軟中斷,也被稱為異常,此32個中斷是在CPU執(zhí)行指令時探測到異常情況而引起的;int32-int255<0x20-0xff>可以由用戶自己設定。所有的Linux中斷分類以及執(zhí)行后CPU的動作見表3.1。表3.1Linux中斷分類中斷名稱CUP檢測方式處理方式硬件中斷Maskable可屏蔽中斷CPU引腳INTR清標志寄存器eflags的IF標志可屏蔽中斷Nonmaskable非可屏蔽中斷CPU引腳NMI不可屏蔽中斷軟件中斷Fault錯誤出錯前檢測到CPU重新執(zhí)行引起錯誤的指令Trap陷阱出錯前檢測到CPU繼續(xù)執(zhí)行后面的指令Abort放棄<終止>出錯前檢測到終止引起這種錯誤的程序Linux將int32-int47<0x20-ox2f>對應于8259A中斷控制芯片發(fā)出的硬件中斷請求信號IRQ0-IRQ15,并把系統(tǒng)調用的中斷設置為int128<0x80>。系統(tǒng)調用中斷是用戶程序使用內核資源的唯一接口。在內核初始化時,首先/boot/head.s程序使用一個啞中斷向量對中斷描述符表<IDT>中的256個中斷向量進行了默認設置。這個啞中斷向量指向一個無中斷處理程序的"啞中斷"。之所以啟動之初就對256個中斷向量進行默認設置,是因為可以有效防止內核因遇到未設置中斷向量的中斷申請時發(fā)生異常。當然隨著內核的繼續(xù)運行,IDT也會被重設,使得各中斷描述符指向實際的處理過程。通常,異常中斷<int0-int31>在kernel/traps.c中被重設,系統(tǒng)調用中斷<int128>在kernel/sched.c中被重設。Linux內核在響應中斷的過程中為避免中斷對臨界代碼區(qū)的干擾,特意在Linux內核代碼的多處設置了c1i和sti命令,前者作用是復位efalgs標志寄存器中的中斷標志使內核不能響應外部中斷:后者作用則是重置eflags標志寄存器中的中斷標志使內核能夠識別并相應外部中斷。這樣可以有效地防止兩個任務對臨界代碼區(qū)的同時操作而帶來的數(shù)據(jù)塊不一致問題。Linux系統(tǒng)調用接口從中也作過介紹:在Linux內核下,用戶程序可通過調用中斷int128并在eax寄存器中指定系統(tǒng)調用號來使用內核資源。通常在應用程序中使用標準接口定義的C函數(shù)庫中的函數(shù)間接地使用內核的系統(tǒng)調用。在用戶應用程序中,當然要用"indude<頭文件名>"語句將包含有所要使用的系統(tǒng)調用的頭文件包括進來,系統(tǒng)調用在頭文件中以宏_syscallN<>的形式出現(xiàn),由此帶領程序轉入內核態(tài)執(zhí)行相應的系統(tǒng)調用函數(shù)體。在include/linux/sys.h文件中,定義了系統(tǒng)調用號為系統(tǒng)調用處理程序指針數(shù)組表sys_call_table[]中的索引值。應用程序、C函數(shù)庫、內核系統(tǒng)調用三者之間的關系。如圖3.4所示。圖3.4系統(tǒng)調用與應用程序、C函數(shù)庫的關系不同Linux版本為用戶應用程序提供的系統(tǒng)調用在參數(shù)方面略有不同,同一系統(tǒng)調用使用不同的內核源碼樹時在參數(shù)的個數(shù)、參數(shù)的含義以及返回值上都可能有差異。所以在編寫上層應用程序時使用系統(tǒng)調用時,參閱特定版本的詳細說明文檔成為必要。3.2內核的定制內核的選擇本論文的目的是研究嵌入式Linux的實時性問題,所以在選擇內核時必須考慮穩(wěn)定性強、可靠性高,同時盡可能新的內核版本。因為新的內核版本包含更多的硬件驅動,能夠更好地對外設進行支持,此外最新的版本往往能夠具有相對以往版本最優(yōu)的調度策略和中斷機制,能夠盡可能地提高整個系統(tǒng)的實時性,有關實時性的最后結論也可以排除內核版本低帶來的影響。這樣我們選擇了截止到2009年9月24日的"thelasteststableversion"Linux.1。上位機操作系統(tǒng)為Ubuntu9.10,該操作系統(tǒng)除了內核穩(wěn)定可靠、操作簡易之外還具有很多其他Linux操作系統(tǒng)不具備的新特性:網(wǎng)絡連接以NetworkManager的形式出現(xiàn),功能明顯增強采用ecryptfs的數(shù)據(jù)加密技術,用戶安全性方面有了重大進展虛擬化技術使用使得可利用的資源更加豐富圖形化的界面更加美觀,用戶界面更加友好Ubuntu9.10桌面系統(tǒng)的外觀如圖3.5。圖3.5Ubuntu9.10桌面系統(tǒng)外觀最重要的,Ubuntu9.10采用Linux-generic,Linux與其也非常相近,可以避免產(chǎn)生由于內核不兼容帶來的一些內核級的錯誤。由于Linux.1在定制內核選項時條目非常多,選項對于硬件的型號要求非常具體。在定制內之前,首先要查清內核之下硬件平臺的具體配置。采用的辦法是先在CF卡上預裝一個完整的但體積足夠小的操作系統(tǒng)然后用特定的命令輸出本地硬件配置的清單,我們選擇了UbuntuServer,預裝的過程Vmware虛擬機下進行。UbuntuServer安裝完成后,占有用CF卡容量的1GB左右的空間。然后把裝有完整操作系統(tǒng)的CF卡裝入SCM/LX3160的CF卡槽,開機運行時出現(xiàn)很多"kernelwarning",這是因為現(xiàn)有的操作系統(tǒng)并不是按照本地的硬件平臺所配置因而出現(xiàn)了內核恐慌,此時可被忽略,因為該步驟的目的只是利用該操作系統(tǒng)的完整Shell。在Linux下,輸出硬件配置的方法有很多,運行dmesg、lspci、prtdiag、psrinfo等命令或查看/Proc/meminfo、/proc/cpuinfo等系統(tǒng)文件。由于lspci命令輸出的硬件信息更加簡潔,在板卡運行后,在終端提示符后輸入命令:#lspci–v>home/pci.txt//將底層硬件二卜臺的信息輸出到/home/pci.txt文件中。輸出的pci.txt內容如圖3.6所示。圖3.6硬件配置輸出單內核的裁剪和編譯掌握了硬件的配置之后,下面就開始進行內核的定制工作,這一工作在上位機Ubuntu9.10下進行,具體步驟如下所述。1、內核源代碼的獲得從/Pub/linux/kernel/v2.6/下載免費的Linux.1內核源碼,源碼壓縮文件大約58.6MB。然后對源碼壓縮文件進行解壓,打開一個終端,在終端描述符下輸入以下命令:$sudo-S //切換到root用戶的權限,對/usr/src的寫操作要有root權限#cd/tlsr/src//進入用戶目錄,當然也可以是其他目錄,但必須保證有大于340MB的空閑空間#tar-jxvflinux-.l.tar.bz2//在用戶目錄將內核源碼包解壓,會生成一個名為1inux-文件夾,該文件夾被稱為"Linux內核源碼樹目錄"2、輔助工具包的獲得及安裝在配置和編譯內核之前,還需要幾個必需的工具包,包括bulid-essential、module-init-tools、libncurse5-dev、initramfs-tools,這些工具包的獲得也都是免費的。可以利用Ubuntu9.10的"新利得軟件包管理器"從開源網(wǎng)絡下載,但我們選擇利用apt-getinstall命令<此命令為Ubuntu操作系統(tǒng)中DebianWeb軟件包機制中的一部分>,因為該命令不僅能夠在網(wǎng)絡上自動搜索所需資源還同時可以下載所必需的依賴包并進行安裝。回到/usr/src用戶目錄,按照安裝的先后順序,依次在終端運行以下命令:#apt-getinstallbuild-essential//安裝構建內核必須的系列軟件包,該軟件包必須首先安裝,否則會造成以下凡個工具包安裝時的錯誤:#apt-getinstallmodule-init-tools//模塊初始化工具,用以內核運行后某些硬件驅動以模塊化的形式加載入內核級代碼#apt-getinstalllibncurses5-dev//安裝支持圖形化內核配置界面的軟件包#apt-getinstallinitramfs-tools//安裝文件系統(tǒng)初始化工具包3、配置內核選項在終端依次執(zhí)行命令:#cd/usr/src/linux-.1//進入內核源碼樹目錄#makemrproper//確保源代碼目錄下沒有不正確的.o文件。#makeclean//刪除以前編譯所下留下的配置文件,留下足夠的空間給要生民的模塊文件。下面就開始對內核選項進行配置。內核編譯的配置文件為~/.config,新下載內核源碼包中沒有該文件,需要利用源碼包中自帶的配置工具生成,源碼包中有4個配置工具,但是這些配置工具都是源碼形式,需要通過make命令現(xiàn)行編譯,然后才能運行。這4個配置工具的簡單描述如下:①makeconfig純文本方式地配置,需要逐個回答問題關于配置的問題。②makemenuconfig文本模式下的仿圖形界面,鍵盤操作并可以任意退后修改已設置的選項,依賴于先前安裝的libncurses5-dev工具包。③makexconfig基于QT圖像界面配置程序,需要在KDE的XWindow桌面環(huán)境下運行。④makegconfig基于GTK圖像界面配置程序,需要在GNOME的xwindow桌面環(huán)境下運行。比較以上4種工具,第一種問答式一旦有選項選錯就必須重新配置,最后兩種雖然可以使用鼠標,但是XWindow的運行本身就占用系統(tǒng)時間并且Window環(huán)境會引起編譯器的不穩(wěn)定。故我們選擇makemenuconfig配置工具,在終端執(zhí)行命令:#makemenuconfig//進入圖形化時內核配宣界面,見圖3.7圖3.7執(zhí)行makemenuconfig后進入的圖形化內核配置界面圖3.7所顯示界面的第一級目錄有:Generalsetup常規(guī)設置Enableloadablemodulesupport允許可加載模塊支持Enabletheblocklayer允許塊層:就是允許使用塊設備,比如硬盤Processortypeandfeatures處理器類型和特性PowermanagementandACPIoptions電源管理和acpi選項Busoptions<PCIetc.>總線選項Executablefileformats/Emulations可執(zhí)行文件格式/仿真Networkingsupport網(wǎng)絡支持DevicesDrivers設備驅動FirmwareDrivers固件驅動Filesystems文件系統(tǒng)Kernelhacking內核調試Securityoptions安全選項CrytographicAPI<NEW>加密apiVirtualization虛擬化Libraryroutines程序庫例行程序實驗系統(tǒng)配置內核時的思路是:在保證最基本的總線、網(wǎng)絡等硬件需求和下一步數(shù)據(jù)采集驅動程序的實現(xiàn)所可能用到的軟件支持的情況下,盡可能縮小內核的體積,裁剪掉不可用和不必要的功能和驅動程序。但是在實際的實驗過程中,要做到內核的最佳并最簡是非常困難的,對此本文在做內核裁剪時做了幾十次試驗,下面就本實驗系統(tǒng)的內核裁剪的經(jīng)驗做一個簡單闡述。對于硬件的選擇參照先前圖3.6的硬件配置清單。本實驗系統(tǒng)采用PC/104總線規(guī)范,與PC/AT標準完全兼容;PC/AT標準也就是ISA總線標準,所以在配置總線選項時對ISA的支持應該特別注意。下面對本實驗系統(tǒng)采用的最終內核配置版本必備的選項簡單羅列一下,其余未列部分為系統(tǒng)默認選擇<注:[*]<X><*>為編譯入內核,<M>為編譯成可加載模塊>。常規(guī)設置:Generalsetup->[*]Promptfordevelopmentand/orincompletecode/drivers//顯示在開發(fā)中或尚未完成的代碼或驅動,因為本實驗系統(tǒng)需要手動編寫驅動[*]Supportforpagingofanonymousmemory<swap>//使用交換分區(qū)或交換文件來作為虛擬內存<即交換分區(qū)>[*]SystemVIPC//SystemV進程間通信<IPC>支持,許多程序需要這個功能[*]POSIXMessageQueues//POSIX消息隊列,是POSIXIPC中的一部分,可以有效地提高系統(tǒng)實時性[*]BSDProcessAccounting//將進程的統(tǒng)計信息寫入文件的用戶級系統(tǒng)調用,主要包括進程的創(chuàng)建時間/創(chuàng)建者/內存占用等信息[*]Exporttask/processstatisticsthroughnetlink//通過netlink接口向用戶空間導出任務/進程的統(tǒng)計信息[*]Auditingsupport//審計支持[*]Enablesystem-callauditingsupport//支持對系統(tǒng)調用的審計支持[*]Kernel.configsupport//把內核的配置信息編譯進內核,移植完成后還可以通過腳本來提取這些信息此腳本文件為scripts/extract-ikconfig[*]Enableaccessto.configthrough/proc/config.gz//允許內核在下位機上運行后通過/Proc/config.gz訪問內核的配置信息[*]Kernellogbuffersize<16>64KB,17>128KB>//用于緩存內核日志的空間大小,因為下位機CPU模塊SCM/LX3160帶有256MB的RAM,本實驗系統(tǒng)選擇稍大一些日志緩存[*]Enableper-taskdelayaccounting//在統(tǒng)計資源中包含進程等候資源,如CPU、1/0同步、內存交換等所用時間[*]Networknamespace//網(wǎng)絡名字空間支持,本實驗系統(tǒng)中要用到網(wǎng)絡通信因而需要此支持[*]InitialRAMfilesystemandRAMdisk<initramfs/initrd>support//支持初始化RAM文件系統(tǒng),本實驗系統(tǒng)選擇此項的目地在于保證內核啟動的情況下測試根文件系統(tǒng)構造的是否正確[*]Optimizeforsize//編譯時優(yōu)化內核尺寸,此項有利于縮小最終的內核映像的體積[*]Profilingsupport//內核對配置文件支持可加載模塊支持:[*]Enableloadablemodulesupport->//允許可加載模塊支持,選擇此項后模塊通過"makemodule_install"將模塊安裝至/lib/module/下[*]Moduleunloading//允許已經(jīng)加載的模塊再被卸載,后續(xù)的數(shù)據(jù)采集驅動在測試過程中需要多次加載卸載,故此項為必需項處理器類型和特性:Processortypeandfeatures一>[*]HighResolutionTimerSuPPort//高時鐘分辨率支持[*]Supportsparseirqnumbering//對稀疏中斷號的支持,本實驗系統(tǒng)要求全面驗證Linux的實時性,故而有關內核中斷的選項都需慎重考慮[*]Supportforextended<non-PC>x86platforms//對擴展x86平臺的支持,本實驗系統(tǒng)的下位機系統(tǒng)為基于PC/104總線規(guī)范的x86系統(tǒng),故此項為必選項Processorfamily->//處理器系列,子菜單的選擇根據(jù)下位機CPU模塊的SCM/LX3160,此項選擇之后,后面的"Genericx86support"就不必選,會節(jié)省接近1M的空間<X>GeodeGX/LX//SCM/LX3160的CPU為"AMDGeodeLX800PreemptionModel->//配置可搶占內核的模式<X>PreemptibleKernel<Low-LatencyDesktop>//此項適合運行實時程序的主動內核搶占[*]RerouteforbrokenbootIRQs//為錯誤的中斷啟動重新定位[*]MachineCheckException//檢測硬件異常[*]AMDMCEfeatures//本實驗系統(tǒng)中SCM/LX3160的CPU是AMD系列,故此項必選[*]Allocate3rd-levelpatetablesfromhighmem//支持對高速存儲器的3級頁面定位機制,此項有利于提高系統(tǒng)讀寫速度總線選項:Busoptions<PCIetc.>->//此部分的選擇依據(jù)圖3.6輸出的硬件配置單,以下選項就不再詳述[*]PCIsupport[*]ISAsupport[*]GenericPCI/ISAbridge[*]GnodeMulti-FuntionGeneralPurposeTimer<MFGPT>events可執(zhí)行文件格式/仿真:Executablefileformats/Emulations->[*]KernelsupportforELFbinaries//ELF是開放平臺下最常用的二進制文件格式,支持動態(tài)連接,支持不同的硬件平臺網(wǎng)絡支持:[*]Networkingsupport->[*]Packetsocket//socket可以讓應用程序,直接與網(wǎng)絡設備通訊,而不通過內核中的其它中介協(xié)議。本實驗系統(tǒng)的應用程序部分用到Socket編程,此項必選[*]TCP/IPnetworking//對TCP/IP的支持,必選[*]IP:DHCPsupport//對DHCP協(xié)議的支持,本實驗系統(tǒng)在調試過程中需要將下位機通過網(wǎng)線直接連接到局域網(wǎng)路由器,需要對此協(xié)議的支持[*]IP:kernellevelautoconfiguration//內核級IP自動配配置設備驅動:DevicesDrivers->[*]MemoryTechnologyDevices<MTD>//特殊存儲設備的支持<*>ATA/ATAPI/MFM/RLLsupport->//對IDE設備的支持[*]GenericATA/ATAPIdisksupport//通用ATA/ATAPI支持<*>AMDCS5536chipsetsupport//根據(jù)圖3.6的硬件配置單,Hostbridge、IDEinterface、Multimediaaudio、controller、USBController都用到AMDCS5536芯片,故此項必選[*]Multipledevicesdriversupport<RAIDandLVM>->//多設備支持<*>Devicemappersupport//設備映射的支持[*]Networkdevicesupport->//對網(wǎng)絡設備的支持<*>PHYdevicesupportandinfrastructure//對于"軟網(wǎng)卡"和網(wǎng)絡基礎結構的支持[*]Ethernet<10or100Mbit>->//對于10/100M以太網(wǎng)設備的支持[*]EISA,VLB,PCIandonboardcontrollers//對于板載的EISA,VLB,PCI管理器的支持<*>Intel<R>PRO/100+support//根據(jù)圖3.6輸出硬件配置單,SC樹LX3160的網(wǎng)絡控制器為IntelCorporation8255xER/82551IT,隸屬于該選項Characterdevices->//字符設備選項,因DIAMOND-MM-32-AT為字符設備,此部分甚為重要[*]Virtualterminal//虛擬終端支持,嵌入式系統(tǒng)需要虛擬終端,故此項必選[*]Supportforbindingandunbindingconsoledrivers//某些系統(tǒng)上可以使用多個控制臺驅動程序HardwareRandomNumberGeneratorCoreSupport//硬件隨機數(shù)發(fā)生器的核心支持,本實驗系統(tǒng)的調試過程需要此功能[*]WatchdogTimerSupport//對看門狗定時器的支持[*]X86PlatformSpecificDeviceDrivers//對X86平臺特殊設備的驅動支持,本實驗系統(tǒng)基于X86平臺,故此項必選文件系統(tǒng):Filesystems-><*>Secondextendedfssupport//對Ext2文件系統(tǒng)的支持,Ext2文件系統(tǒng)是Linux的標準文件系統(tǒng)<*>Ext3journallingfilesystemsupport//對Ext3文件系統(tǒng)的支持,Ext3文件系統(tǒng)是Linux日志模式的文件系統(tǒng),數(shù)據(jù)完整性好,對于多進程并發(fā)的讀寫速度快[*]Kernelautomounterversion4support<alsosupportsv3>//內核自動加載遠程文件系統(tǒng)版本4支持[*]NetworkFileSystems->//網(wǎng)絡文件系統(tǒng)<NFS>,本實驗系統(tǒng)在實驗過程中上位機和下位機間的數(shù)據(jù)傳送通過NFS來實現(xiàn),此項非常關鍵<*>NFSclientsupport//NFS客戶端支持,本實驗系統(tǒng)中上位機下位機通信時下位機作為客戶端來掛載上位機的網(wǎng)絡共享文件夾[*]RootfilesystemonNFS//支持NFS上的根文件系統(tǒng)最后,選擇"SaveanAlternativeConfigurationFile"保存該次配置文件。4、編譯內核和模塊配置內核選項完成后,接下來就是真正的內核編譯,生成最終的壓縮內核映像文件。在終端運行以下命令:#makedep //建立編譯時所需的從屬文件#makebzImage //利

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論