嵌入式Linux應(yīng)用開發(fā)復習資料_第1頁
嵌入式Linux應(yīng)用開發(fā)復習資料_第2頁
嵌入式Linux應(yīng)用開發(fā)復習資料_第3頁
嵌入式Linux應(yīng)用開發(fā)復習資料_第4頁
嵌入式Linux應(yīng)用開發(fā)復習資料_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費閱讀

付費下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第一章嵌入式系統(tǒng)概述l 嵌入式系統(tǒng)設(shè)計與應(yīng)用開發(fā)l 了解嵌入式系統(tǒng)的基本組成l 了解嵌入式微處理器及ARM微處理器系列l(wèi) 了解 嵌入式操作系統(tǒng)l 掌握嵌入式系統(tǒng)設(shè)計的過程及方法l 1、嵌入式系統(tǒng)簡介l 嵌入式系統(tǒng)的定義l 嵌入式系統(tǒng)體系結(jié)構(gòu)l 應(yīng)用領(lǐng)域和發(fā)展方向l 嵌入式系統(tǒng)定義l 嵌入式系統(tǒng)是以應(yīng)用為中心,以計算機技術(shù)為基礎(chǔ),采用可剪裁軟硬件,適用于對功能、可靠性、成本、體積、功耗等有嚴格要求的專用計算機系統(tǒng)。l 嵌入式計算機系統(tǒng)與通用計算機系統(tǒng)最本質(zhì)的區(qū)別在于軟硬件可裁剪、專用計算機系統(tǒng)。嵌入式系統(tǒng)是將一個計算機系統(tǒng)“嵌入”對象系統(tǒng)。這個對象可能是龐大的機器,也可能是小巧的手持設(shè)備。l 嵌

2、入式系統(tǒng)的核心是嵌入式微處理器,該處理器都是RISC(Reduce Instruction Set Computing,精簡指令集計算機)的處理器內(nèi)核。l 嵌入式系統(tǒng)體系結(jié)構(gòu)l 應(yīng)用領(lǐng)域和發(fā)展方向l 信息電器l 移動計算設(shè)備l 網(wǎng)絡(luò)設(shè)備l 工控、仿真、醫(yī)療儀器等l 2、嵌入式微處理器l 嵌入式處理器簡介l ARM微處理器l ARM微處理器系列l(wèi) ARM 處理器的選型l S3C2410 微處理器介紹l 嵌入式處理器簡介l 嵌入式微處理器(Embedded Microprocessor Unit,EMPU)l 嵌入式微控制器(Microcontroller Unit,MCU)l 嵌入式DSP處理器

3、(Embedded Digital Signal Processor,EDSP)l 嵌入式片上系統(tǒng)(System On Chip)l ARM微處理器l ARM是(Advanced RISC Machines ,高級精簡指令系統(tǒng)處理器)的縮寫,它既是一種微處理器知識產(chǎn)權(quán)(IP)核,也是一個公司的名稱。 1991年公司成立于英國劍橋,其主要業(yè)務(wù)是設(shè)計16位和32位的嵌入式微處理器。l ARM本身并不生產(chǎn)和銷售芯片,而是采用技術(shù)授權(quán)的方式,由合作公司生產(chǎn)各具特色的芯片。世界各大半導體生產(chǎn)商從ARM公司購買其設(shè)計的ARM微處理器核,根據(jù)各自不同的應(yīng)用領(lǐng)域,加入適當?shù)耐鈬娐?,從而形成自己的ARM微處理

4、器芯片進入市場。l ARM微處理器的特點l 體積小、低功耗、低成本、高性能l 支持Thumb(16位)/ARM(32位)雙指令集,能很好的兼容8位/16位器件l 大量使用寄存器,指令執(zhí)行速度快l 大多數(shù)數(shù)據(jù)操作都在寄存器中完成l 尋址方式靈活簡單,執(zhí)行效率高l 采用固定長度的指令格式l ARM微處理器系列l(wèi) ARM7 系列:一般包括ARM7TDMI、ARM7TDMI-S、ARM720T、ARM7EJ幾種內(nèi)核.ARM7 TDMI是目前使用最廣泛的32 位嵌入式RISC處理器之一,主要應(yīng)用工業(yè)控制、Internet 設(shè)備、網(wǎng)絡(luò)和調(diào)制解調(diào)器設(shè)備、移動電話等多種多媒體和嵌入式應(yīng)用。TDMI的基本含義為

5、:Ø T: 支持 16 為壓縮指令集Thumb;Ø D: 支持片上Debug;Ø M:內(nèi)嵌硬件乘法器(Multiplier)Ø I: 嵌入式 ICE,支持片上斷點和調(diào)試點l ARM微處理器系列l(wèi) ARM9 系列:包含ARM920T、ARM922T 和ARM940T 三種類型,主要應(yīng)用于無線設(shè)備、儀器儀表、安全系統(tǒng)、機頂盒、高端打印機、數(shù)字照相機和數(shù)字攝像機等。其中S3C2410就是ARM9 系列的ARM920T 類型。ARM9具有以下特點:Ø 5 級流水線,指令執(zhí)行效率更高。Ø 提供 1.1MIPS/MHz 的哈佛結(jié)構(gòu)。Ø

6、支持 32 位元ARM指令集和16位元Thumb 指令集。Ø 支持 32 位元的高速AMBA匯流排界面。Ø 全性能的MMU,支持Windows CE、Linux、Palm OS等多種主流嵌入式操作系統(tǒng)。Ø 支持數(shù)據(jù)Cache和指令Cache,具有更高的指令和數(shù)據(jù)處理能力。l ARM9E 系列:包含ARM926EJ-S、ARM946E-S和ARM966E-S三種類型。主要應(yīng)用于下一代無線設(shè)備、數(shù)字消費品、成像設(shè)備、工業(yè)控制、存儲設(shè)備和網(wǎng)絡(luò)設(shè)備等領(lǐng)域。l ARM微處理器系列l(wèi) ARM10E 系列:包含ARM1020E、ARM1022E 和ARM1026EJ-S 三種類

7、型。主要應(yīng)用于下一代無線設(shè)備、數(shù)字消費品、成像設(shè)備、工業(yè)控制、通信和信息系統(tǒng)等領(lǐng)域。l SecurCore系列:包含SecurCore SC100、SecurCore SC110、SecurCore SC200和SecurCore SC210四種類型,主要應(yīng)用于一些對安全性要求較高的應(yīng)用產(chǎn)品及應(yīng)用系統(tǒng),如電子商務(wù)、電子政務(wù)、電子銀行業(yè)務(wù)、網(wǎng)絡(luò)和認證系統(tǒng)等領(lǐng)域。l Intel 的Xscale:Xscale 處理器是基于ARMv5TE 架構(gòu)的解決方案,是一款全性能、高成本效益比、低功耗的處理器。它支持16 位的Thumb 指令和DSP指令集,已使用在許多移動電話、個人數(shù)字助理和網(wǎng)絡(luò)產(chǎn)品等場合。l

8、ARM微處理器系列l(wèi) Intel的StrongARM:StrongARM SA-1100處理器是采用ARM架構(gòu)高度整合的32 位元RISC 微處理器。它融合了Intel 公司的設(shè)計和處理技術(shù)以及ARM 架構(gòu)的電源效率,采用在軟件上相容ARMv4 架構(gòu)、同時采用具有Intel 技術(shù)優(yōu)點的架構(gòu)。Intel StrongARM 處理器是便攜型通訊產(chǎn)品和消費類電子產(chǎn)品的理想選擇,已成功應(yīng)用于多家公司的掌上電腦系列。 其中,ARM7、ARM9、ARM9E 和ARM10為4 個通用處理器系列,每一個系列提供一套相對獨特的性能來滿足不同應(yīng)用領(lǐng)域的需求。SecurCore 系列專門為安全要求較高的應(yīng)用而設(shè)計。

9、Intel的Xscale和StrongARM也是應(yīng)用非常廣泛的嵌入式處理器系列。l ARM 微處理器的選型1). ARM微處理器內(nèi)核的選擇 如果使用Windows CE 或標準Linux 等操作系統(tǒng),就需要選擇ARM720T以上帶有MMU功能的ARM晶片。 ARM720T、ARM920T、ARM922T、ARM946T、Strong-ARM 都帶有MMU功能。而ARM7TDMI 則沒有MMU,不支持Windows CE 和標準Linux,但目前有uCLinux 等不需要MMU支持的操作系統(tǒng)可執(zhí)行ARM7TDMI硬件平臺。2). 系統(tǒng)的工作頻率 系統(tǒng)的工作頻率在很大程度上決定了ARM微處理器的處

10、理能力。ARM7 系列微處理器的典型處理速度為0.9MIPS/MHz,常見的ARM7 晶片系統(tǒng)主時鐘為20MHz-133MHz。ARM9 系列微處理器的典型處理速度為1.1MIPS/MHz,常見的ARM9的系統(tǒng)主時鐘為100MHz-233MHz,ARM10最高可以達到700MHz。3). 晶片內(nèi)部存儲體的容量 大多數(shù)的ARM微處理器晶片內(nèi)部存儲體的容量都不太大。 如 ATMEL的AT91F40162 就具有最高2MB的晶片內(nèi)部存儲空間。4). 晶片內(nèi)部周圍電路選擇 如 USB 接口、IIS 接口、IIC 接口、LCD 控制器、鍵盤接口、RTC、ADC 和DAC、DSP 等,設(shè)計者應(yīng)該分析系統(tǒng)的

11、需求,盡可能采用晶片內(nèi)部周圍電路完成所需的功能,這樣既可以簡化系統(tǒng)的設(shè)計,同時提高系統(tǒng)的可靠性。l S3C2410 微處理器介紹3. S3C2410 微處理器介紹 S3C2410 是三星電子開發(fā)的一種32 位RISC 微處理器,它是基于ARM920T 內(nèi)核開發(fā)的。S3C2410是面向低價格、低功耗和高性能的手持設(shè)備和小型設(shè)備而設(shè)計。S3C2410的具體特點:系統(tǒng)管理Ø 支持小端/大端方式Ø 地址空間:128M字節(jié)每一個Bank(總共1G 字節(jié))Ø 每個BANK 可編程為8/16/32 位數(shù)據(jù)總線Ø BANK0到BANK6采用固定起始地址和大小Ø

12、 BANK7具有可編程的BANK 起始地址和大小Ø 共8個存儲器BANKØ 前6個存儲器BANK 用于ROM、SRAM和其他Ø 另外兩個存儲器BANK 用于ROM、SRAM 和同步DRAMØ 支持等待信號用以延長總線周期Ø 支持掉電時的SDRAM 自刷新模式Ø 支持不同類型的ROM引導(NOR/NAND Flash、EEPROM和其他)。S3C2410的SoC芯片集成單元Ø 內(nèi)部 1.8V,存儲器3.3V,外部I/O3.3V,16KB數(shù)據(jù)CACHE,16KB指令CACHE,MMUØ 內(nèi)置外部存儲器控制器(SDRAM

13、 控制和芯片選擇邏輯)Ø LCD 控制器,一個LCD 專用DMAØ 4 個帶外部請求線的DMAØ 3 個通用異步串行端口(IrDA1.0, 16-Byte Tx FIFO, and 16-Byte Rx FIFO),2 通道SPIØ 一個多主 I2C總線,一個I2S總線控制器Ø SD 主接口版本1.0 和多媒體卡協(xié)議版本2.11兼容Ø 兩個USB HOST,一個USB DEVICE(VER1.1)Ø 4 個PWM定時器和一個內(nèi)部定時器Ø 看門狗定時器Ø 117 個通用I/OØ 24 個外部中斷&

14、#216; 電源控制模式:標準、慢速、休眠、掉電Ø 8 通道10 位ADC和觸摸屏接口Ø 帶日歷功能的實時時鐘Ø 芯片內(nèi)置PLLØ 設(shè)計用于手持設(shè)備和通用嵌入式系統(tǒng)Ø 16/32 位RISC體系結(jié)構(gòu),使用ARM920T CPU核的強大指令集Ø 帶 MMU的先進的體系結(jié)構(gòu)支持WinCE、EPOC32、LinuxØ 指令緩存(CACHE)、數(shù)據(jù)緩存、寫緩沖和物理地址TAG RAM,減小了對主存儲器帶寬和性能的影響Ø ARM920T CPU 核支持ARM 調(diào)試的體系結(jié)構(gòu)Ø 內(nèi)部先進的位控制器總線(AMBA)(A

15、MBA2.0,AHB/APB)3.嵌入式操作系統(tǒng)l 嵌入式操作系統(tǒng)簡介l 各類嵌入式操作系統(tǒng)簡介l 嵌入式Linux簡介l 內(nèi)存管理l 進程管理l 文件系統(tǒng)l 嵌入式操作系統(tǒng)簡介l 操作系統(tǒng)可以有效管理越來越復雜的系統(tǒng)資源。l 操作系統(tǒng)可以把硬件虛擬化,使得開發(fā)人員從繁忙的驅(qū)動程序移植和維護中解脫出來。l 操作系統(tǒng)可以提供庫函數(shù)、驅(qū)動程序、工具集以及應(yīng)用程序。l 各類嵌入式操作系統(tǒng)(1)l 嵌入式Linuxl Windows CEl Symbianl Androidl 各類嵌入式操作系統(tǒng)(2)l uC/OS-IIl VxWorksl 其他嵌入式操作系統(tǒng) QNX Palm OS OS-9 Lyn

16、xOSl 嵌入式Linux簡介l uCLinuxl RT-Linuxl 紅旗嵌入式Linuxl uCLinux是Lineo公司的產(chǎn)品,是開放源碼的嵌入式Linux的典范之作。l 編譯后目標文件可控制在幾百KB數(shù)量級,并已經(jīng)被成功地移植到很多平臺上。l uCLinux是專門針對沒有MMU的處理器而設(shè)計的,即uCLinux無法使用處理器的虛擬內(nèi)存管理技術(shù)。l uCLinux采用實存儲器管理策略,通過地址總線對物理內(nèi)存進行直接訪問。l RT-Linux是美國新墨西哥州大學計算機科學系VictorYodaiken和Micae Brannanov開發(fā)的嵌入式Linux操作系統(tǒng)。l RT-Linux開發(fā)者

17、并沒有針對實時操作系統(tǒng)的特性而重寫Linux的內(nèi)核,而是通過在Linux內(nèi)核與硬件中斷之間增加一個精巧的可搶先的實時內(nèi)核,把標準的Linux內(nèi)核作為實時內(nèi)核的一個進程與用戶進程一起調(diào)度。l 紅旗嵌入式Linux是由北京中科紅旗軟件技術(shù)有限公司的產(chǎn)品。 精簡內(nèi)核,適用于多種常見的嵌入式CPU 提供完善的嵌入式GUI和嵌入式X-Windows 提供嵌入式瀏覽器、郵件程序和多媒體播放程序 提供完善的開發(fā)工具和平臺l 內(nèi)存管理l 內(nèi)存管理和MMUl 標準Linux的內(nèi)存管理l uCLinux的內(nèi)存管理l 內(nèi)存管理和MMUl 存儲管理包含了地址映射、內(nèi)存空間的分配,有時候還包括地址訪問的限制(即保護機制

18、);如果將I/O也放在內(nèi)存地址空間中,則還要包括I/O地址的映射;另外,像代碼段、數(shù)據(jù)段、堆棧段空間的分配等等都屬于內(nèi)存管理。l MMU,即內(nèi)存管理單元,其主要作用是兩個方面:一是地址映射;二是對地址訪問的保護和限制。l 標準Linux的內(nèi)存管理l 標準Linux使用虛擬存儲器技術(shù),提供比計算機系統(tǒng)中實際使用的物理內(nèi)存大得多的內(nèi)存空間。 運行比內(nèi)存還要大的程序 先加載部分程序運行,縮短了程序啟動的時間 可以使多個程序同時駐留在內(nèi)存中提高CPU的利用率 可以運行重定位程序 寫機器無關(guān)的代碼 減輕程序員分配和管理內(nèi)存資源的負擔 可以進行內(nèi)存共享 提供內(nèi)存保護l uCLinux的內(nèi)存管理l uCLi

19、nux雖然不能使用處理器的虛擬內(nèi)存管理技術(shù),它仍然采用存儲器的分頁管理-實存儲器管理(Real Memory Management)l 開發(fā)人員參與系統(tǒng)的內(nèi)存管理 編譯內(nèi)核時,開發(fā)人員必須告訴系統(tǒng)這塊開發(fā)板到底擁有多少的內(nèi)存 開發(fā)應(yīng)用程序時必須考慮內(nèi)存的分配情況并關(guān)注應(yīng)用程序需要運行空間的大小l 內(nèi)存映射:Linux與 uCLinuxl 進程管理l 進程和進程管理l RT-Linux的進程管理l 標準Linux的進程管理l uCLinux的進程管理l 進程和進程管理l 進程是一個運行程序并為其提供執(zhí)行環(huán)境的實體,它包括一個地址空間和至少一個控制點,進程在這個地址空間上執(zhí)行單一指令序列。l 進程

20、調(diào)度主要是協(xié)調(diào)進程對計算機系統(tǒng)內(nèi)資源(如內(nèi)存、I/O設(shè)備、CPU)的爭奪使用 搶占式調(diào)度 非搶占式調(diào)度l RT-Linux的進程管理l RT-Linux有兩種中斷:硬中斷和軟中斷l(xiāng) 標準Linux的進程管理l Linux進程 進程是由進程標識符(PID)表示的 Linux系統(tǒng)提供系統(tǒng)調(diào)用拷貝現(xiàn)行進程的內(nèi)容,以產(chǎn)生新的進程 Linux進程還可以通過exec系統(tǒng)調(diào)用產(chǎn)生l Linux進程的調(diào)度 分時調(diào)度策略(SCHED_OTHER) 先到先服務(wù)的實時調(diào)度策略(SCHED_FIFO) 時間片輪轉(zhuǎn)的實時調(diào)度策略(SCHED_RR)l uCLinux的進程管理l uCLinux的進程調(diào)度沿用了Linux

21、的傳統(tǒng)l 進程切換:由于沒有MMU,系統(tǒng)雖然支持fork系統(tǒng)調(diào)用,但其實質(zhì)上是vforkl 啟動新的應(yīng)用程序時系統(tǒng)必須為應(yīng)用程序分配存儲空間l 文件系統(tǒng)l 文件系統(tǒng)定義l Linux文件系統(tǒng)l 嵌入式Linux文件系統(tǒng)l 文件系統(tǒng)定義l 文件系統(tǒng)定義:包含在磁盤驅(qū)動器或者磁盤分區(qū)的目錄結(jié)構(gòu),整個磁盤空間可以給一個或者多個文件系統(tǒng)使用。l 在對某個文件系統(tǒng)做在某一個掛載點的掛載(Mount)操作后,就可以使用該文件系統(tǒng)了。l Linux文件系統(tǒng)l Linux支持許多種文件系統(tǒng)。l ext2是Linux事實上的標準文件系統(tǒng)l ext3是一種日志式文件系統(tǒng),是對ext2系統(tǒng)的擴展,它兼容ext2l

22、嵌入式Linux文件系統(tǒng)l 基于Flash的文件系統(tǒng) JFFS2文件系統(tǒng) YAFFS2文件系統(tǒng) Cramfs文件系統(tǒng) Romfs 其他文件系統(tǒng)l 基于RAM的文件系統(tǒng) RamDisk Ramfs/Tmpfsl 網(wǎng)絡(luò)文件系統(tǒng)NFS(Network File System)l 4、嵌入式系統(tǒng)設(shè)計l 嵌入式系統(tǒng)設(shè)計過程l 硬件設(shè)計平臺的選擇l 軟件設(shè)計平臺的選擇l 嵌入式應(yīng)用軟件開發(fā)l 測試和優(yōu)化l 嵌入式系統(tǒng)設(shè)計過程l 硬件設(shè)計平臺的選擇l 處理器選擇 處理性能 技術(shù)指標 功耗 軟件支持工具l 硬件選擇的其它因素 生產(chǎn)規(guī)模 市場目標 軟件對硬件的依賴性 Linux的支持性l 軟件設(shè)計平臺的選擇l

23、操作系統(tǒng)的選擇 提供的開發(fā)工具 向硬件接口移植的難度 是否提供硬件的驅(qū)動程序l 開發(fā)語言的選擇 通用性 可移植性程度 執(zhí)行效率l 開發(fā)環(huán)境 系統(tǒng)調(diào)試器的功能 支持庫函數(shù)l 軟件設(shè)計流程l 嵌入式應(yīng)用軟件開發(fā)l 交叉開發(fā)l 遠程調(diào)試l 測試和優(yōu)化l 嵌入式系統(tǒng)的硬件測試l 嵌入式軟件測試l 性能測試和健壯性測試l 補充:嵌入式Linux開發(fā)介紹在1999 年,Linux 開始根植于嵌入式系統(tǒng)開發(fā),同年9 月在嵌入式系統(tǒng)會議(Embedded System Conference,ESC)上許多公司宣布支持嵌入式Linux。在2000年,Samsung公司推出一款名為Yopy的PDA,其應(yīng)用嵌入式L

24、inux系統(tǒng)。同年Ericsson公司推出一款名為HS210 的基于Linux 的無繩帶屏電話,它可以通過無線連接上網(wǎng),打電話,收發(fā)E-mail等功能。同年許多公司采用嵌入式Linux 在他們的產(chǎn)品線上。在2001 年,最重要的宣布就是發(fā)布了Linux 內(nèi)核2.4,該版本被后期采用到許多嵌入式Linux 分支中。在2002 年,可以看到許多上市的基于Linux 的產(chǎn)品,并且Linux 已經(jīng)在向數(shù)字娛樂領(lǐng)域發(fā)展。在2003年,Motorola 宣布A760 手機采用Linux作為它的嵌入式操作系統(tǒng)在2004 年,LynuxWorks 發(fā)布基于Linux2.6 內(nèi)核的BlueCat。它作為第一個基

25、于Linux2.6 內(nèi)核的商業(yè)嵌入式Linux。在2005 年,基于Linux2.6 內(nèi)核的嵌入式產(chǎn)品已經(jīng)非常廣泛,尤其是基于ARM內(nèi)核的芯片已經(jīng)廣泛使用Linux 為其操作系統(tǒng)?,F(xiàn)在許多公司已經(jīng)采用嵌入式Linux 作為他們新的設(shè)計方案。目前,AMD,ARM,TI,Motorola,Intel 和IBM 等知名企業(yè)把Linux 作為一個首選的操作系統(tǒng)。Linux開發(fā)環(huán)境l Windows操作系統(tǒng)+Cygwin工具 Cygwin是一個windows平臺下的Linux 模擬環(huán)境。它包括一個DLL(cygwin1.dll),這個dll為POSIX 系統(tǒng)提供接口調(diào)用的模擬層,還有一系列模擬linux

26、平臺的工具。Cygwin的dll可以用于windonws95之后的x86 系列windows 上面。其API竭盡模擬單個Unix 和linux 的規(guī)范。 Cygwin和linux 之間的重要區(qū)別:一是C函數(shù)庫的不同,前者用newlib 而后者用的是glibc。二是shell不同,前者用ash而在大多數(shù)linux 發(fā)行版上用的是bash。 該組合不能開發(fā)QT等GUI,因為它沒有提供X服務(wù)器l Windows 操作系統(tǒng)+ VMware工具+ Linux操作系統(tǒng)l Linux 操作系統(tǒng)+ 自帶的開發(fā)工具 這種組合是最完整和最權(quán)威的Linux 系統(tǒng)開發(fā)方式,Linux 下的許多操作都是基于命令行的,并

27、與Windows系統(tǒng)下的文件共享比較困難。一般常用的Linux系統(tǒng)有:RedHat,紅旗Linux 等。l 補充:嵌入式Linux開發(fā)介紹ARM Linux系統(tǒng)開發(fā)流程一般嵌入式開發(fā)方法,當程序員開始開發(fā)一個基于嵌入式系統(tǒng)應(yīng)用的時候,首先用該嵌入式相關(guān)的開發(fā)工具在宿主機上進行開發(fā),例如通常使用ARM 的ADS 工具編寫程序,使用ARMulator 或者在評估板上來調(diào)試,最后將在宿主機上開發(fā)生成的image文件燒寫到獨立的嵌入式應(yīng)用設(shè)備中去。通?;贏RM系統(tǒng)的Linux開發(fā)步驟如下:a) 開發(fā)目標硬件系統(tǒng):如選擇微處理器,flash及其它外設(shè)等。b) 建立交叉編譯工具:一般的GCC工具都是針對

28、X86體系的,為了能夠產(chǎn)生目標板執(zhí)行的代碼必須建立交叉編譯工具。c) 開發(fā) Bootloader:建立啟動系統(tǒng)的主引導程序。d) 移植Linux 內(nèi)核:如基于ARM的Linux 2.6 內(nèi)核移植。e) 開發(fā)一個根文件系統(tǒng):如rootfs 的制作。f) 開發(fā)相關(guān)硬件的驅(qū)動程序:如LCD,Keypad等。g) 開發(fā)上層的應(yīng)用程序:如QT GUI開發(fā)。l 補充: Linux內(nèi)核介紹1.Linux內(nèi)核目錄結(jié)構(gòu)在解壓后的Linux 內(nèi)核(這里以Linux 2.6.10 內(nèi)核為例)根目錄下輸入如下tree命令,將會顯示如下目錄信息,其中tree命令是由tree工具實現(xiàn)的,用來顯示文件目錄信息,內(nèi)核根目錄下

29、的主要目錄和文件的意義介紹如下:l COPYING:該文件主要是對Linux 內(nèi)核代碼的版權(quán)聲名。l CREDITS:該文件是對該版本和之前版本Linux 內(nèi)核所做貢獻的所有成員列表。l Documentation:該目錄存放所有內(nèi)核相關(guān)的技術(shù)文檔,是學習內(nèi)核原理的很好參考資料。l MAINTAINERS:該文件記錄所有維護內(nèi)核人員列表以及講述如何提交一個內(nèi)核的改變。l Makefile:該文件是編譯內(nèi)核的最上層Makefile文件,也是編譯內(nèi)核的入口文件。l README:該文件是編譯內(nèi)核的幫助文件,編譯前一定要閱讀該文件,該文件對于編譯內(nèi)l 核很有幫助。l REPORTING-BUGS:該

30、文件是有關(guān)提交內(nèi)核Bug 的一些要求和建議。l 補充: Linux內(nèi)核介紹l Arch:該目錄包括了所有和體系結(jié)構(gòu)相關(guān)的核心代碼。它下面的每一個子目錄都代表一種Linux 支持的體系結(jié)構(gòu),例如i386 就是Intel CPU及與之相兼容體系結(jié)構(gòu)的子目錄。arm就代表是ARM體系結(jié)構(gòu)相關(guān)的代碼。l Drivers:該目錄包含內(nèi)核中所有硬件相關(guān)的驅(qū)動實現(xiàn)代碼,它又進一步劃分成幾類設(shè)備驅(qū)動,比如char 目錄為字符設(shè)備,block目錄為塊設(shè)備等。l Fs:該目錄存放Linux 支持的文件系統(tǒng)代碼。不同的文件系統(tǒng)有不同的子目錄對應(yīng),如ext3文件系統(tǒng)對應(yīng)的就是ext3 子目錄。l Include:該目

31、錄包括編譯內(nèi)核所需要的大部分頭文件,例如與平臺無關(guān)的頭文件在include/linux 子目錄下。l Init:該目錄包含內(nèi)核的初始化代碼(不是系統(tǒng)的引導代碼)。這是研究內(nèi)核如何工作的好起點。l 補充: Linux內(nèi)核介紹l Ipc:該目錄包含了內(nèi)核進程間的通信代碼。l Kernel:該目錄包含內(nèi)核管理的核心代碼。同時與處理器結(jié)構(gòu)相關(guān)代碼都放在arch/*/kernel目錄下。l Lib:該目錄包含了內(nèi)核的庫代碼,與處理器結(jié)構(gòu)相關(guān)的庫代碼被放在arch/*/lib/目錄下。l Mm:該目錄包含了所有的內(nèi)存管理代碼。與具體硬件體系結(jié)構(gòu)相關(guān)的內(nèi)存管理代碼位于arch/*/mm目錄下。l Net:該

32、目錄里是內(nèi)核的網(wǎng)絡(luò)部分代碼,其每個子目錄對應(yīng)于網(wǎng)絡(luò)的一個方面。l Scripts:該目錄包含用于配置核心的腳本文件。2.如何閱讀Linux內(nèi)核源代碼l 補充: Linux內(nèi)核介紹SourceInsight:它實質(zhì)上是一個支持多種開發(fā)語言(java,c ,c+等等)的編輯器,只不過由于其查找、定位、彩色顯示等功能的強大,而被當成源代碼閱讀工具使用。它和UltraEdit相比較增加了許多功能,比如提供代碼之間調(diào)用關(guān)系的顯示,以及文件之間的關(guān)系查找。l 本章小結(jié) 了解嵌入式系統(tǒng)的基本概念,嵌入式系統(tǒng)的基本組成,ARM處理器的基本知識,嵌入式Linux基本知識,ARM Linux系統(tǒng)開發(fā)的基本流程,以

33、及Linux 內(nèi)核目錄結(jié)構(gòu)和閱讀Linux 內(nèi)核代碼的方法。l 作業(yè)1嵌入式系統(tǒng)的組成部分?2嵌入式ARM Linux系統(tǒng)的一般開發(fā)步驟?3選擇ARM處理器的準則有哪些?第三章嵌入式系統(tǒng)的BootLoaderl 了解BootLoader 的作用l 熟悉常見的嵌入式Linux BootLoaderl 熟悉S3C2410開發(fā)板l 學會基于嵌入式系統(tǒng)的U-Boot移植l 學會自己編寫B(tài)ootLoaderl 一、 BootLoader概述BootLoader是依賴于硬件而實現(xiàn)的,特別是在嵌入式系統(tǒng)中。不同體系結(jié)構(gòu)需求的 BootLoader是不同的;還依賴于具體的嵌入式板級設(shè)備的配置。對于兩塊不同的嵌

34、入式板而言,即使基于相同CPU構(gòu)建,運行在其中一塊電路板上的BootLoader,未必能夠運行在另一塊電路開發(fā)板上。 Bootloader的啟動過程可以是單階段或是多階段。大多數(shù)單階段的 BootLoader應(yīng)用于簡單系統(tǒng),如沒有操作系統(tǒng)的系統(tǒng)。通常多階段的 BootLoader能提供更復雜的功能及更好的可移植性。 從固態(tài)存儲設(shè)備上啟動的BootLoader大多數(shù)是兩階段啟動過程,分stage1和 stage2兩部分。依賴于 CPU 體系結(jié)構(gòu)的代碼,比如設(shè)備初始化代碼等,通常都放在 stage1 中,通常都用匯編語言實現(xiàn)。stage2 通常用 C語言實現(xiàn),可實現(xiàn)更復雜的功能,代碼具有更好的可讀

35、性和可移植性。l Boot Loader的安裝地址l Boot Loader相關(guān)的設(shè)備和基址l 主機和目標機之間一般通過串口建立連接,Boot Loader程序在執(zhí)行時通常會通過串口來進行I/O操作 輸出打印信息到串口 從串口讀取用戶控制字符等l 一、 BootLoader概述大多數(shù) BootLoader都包含兩種不同的操作模式:啟動加載(Boot loading)模式和下載(Down loading)模式,這種區(qū)別僅對于開發(fā)人員才有意義。但從最終用戶的角度看,BootLoader的作用就是用來加載操作系統(tǒng),而并不存在所謂的啟動加載模式與下載工作模式的區(qū)別。l 啟動加載模式:這種模式也稱為自主

36、(Autonomous)模式,即 BootLoader從目標機上的某個固態(tài)存儲設(shè)備上將操作系統(tǒng)加載到 RAM中運行,整個過程并沒有用戶的介入。這種模式是 BootLoader的正常工作模式。因此在嵌入式產(chǎn)品發(fā)布的時候,BootLoader顯然必須工作在這種模式下。l 下載模式:在這種模式下目標機上的 BootLoader將通過串口連接或網(wǎng)絡(luò)連接等通信手段從主機上下載文件,比如:下載應(yīng)用程序、數(shù)據(jù)文件、內(nèi)核映像等。從主機下載的文件通常首先被 BootLoader保存到目標機的 RAM中然后再被 BootLoader寫到目標機上的固態(tài)存儲設(shè)備中。BootLoader的這種模式通常在系統(tǒng)更新時使用。

37、工作于這種模式下的 BootLoader通常都會向它的終端用戶提供一個簡單的命令行接口。比如 U-Boot,Blob,vivi等。 l Boot Loader與主機之間的通信設(shè)備及協(xié)議l 目標機上的Boot Loader通過串口與主機之間進行文件傳輸 xmodem ymodem zmodem 以太網(wǎng)連接和TFTP協(xié)議l 二、常用的嵌入式 Linux BootLoader1、U-Boot 2、VIVI 3、Blob 4、RedBoot5、ARMboot 6、DIY1、U-Boot U-Boot是德國DENX小組的開發(fā)用于多種嵌入式 CPU BootLoader程序,它可以運行在基于 PowerP

38、C,ARM,MIPS等多種嵌入式開發(fā)板上。從 http:/u-ftp:/ftp.denx.de/pub/u-boot/站點都可以下載 U-Boot的源代碼。U-Boot源代碼主要目錄解釋如下: l board:目標板相關(guān)文件,主要包含 SDRAM、FLASH驅(qū)動;l common:獨立于處理器體系結(jié)構(gòu)的通用代碼,如內(nèi)存大小探測與故障檢測; l cpu:與處理器相關(guān)的文件。如 mpc8xx子目錄下含串口、網(wǎng)口、LCD驅(qū)動及中斷初始化等文件;l driver:通用設(shè)備驅(qū)動,如 CFI FLASH驅(qū)動(目前對 INTEL FLASH支持較好); l doc:U-Boot的說明文檔; l exampl

39、es:可在 U-Boot下運行的示例程序;如 hello_world.c,timer.c; l include:U-Boot頭文件;尤其 configs子目錄下與目標板相關(guān)的配置頭文件是移植過程中經(jīng)常要修改的文件; l lib_xxx:處理器體系相關(guān)的文件,如 lib_ppc, lib_arm目錄分別包含與 PowerPC、ARM體系結(jié)構(gòu)相關(guān)的文件; l net:與網(wǎng)絡(luò)功能相關(guān)的文件目錄,如 bootp,nfs,tftp;l post:上電自檢文件目錄。尚有待于進一步完善; l rtc:RTC(Real Time Clock,實時時鐘)驅(qū)動程序; l tools:用于創(chuàng)建 U-Boot S-R

40、ECORD和 BIN鏡像文件的工具。2、 VIVI VIVI是由韓國 MIZI公司開發(fā)的專門用于 ARM產(chǎn)品線的一種 BootLoader。因為 VIVI 目前只支持使用串口和主機通信,所以您必須使用一條串口電纜來連接目標板和主機。VIVI的源代碼下載地址為:.html。VIVI一般有如下作用:vivi.tar.bz2源代碼包解壓后的目錄結(jié)構(gòu)如下所示:其中VIVI主要目錄介紹:l CVS:存放CVS工具相關(guān)的文件l Documentation:存放一些使用VIVI的幫助文檔l arch:存放一些平臺相關(guān)的代碼文件l drivers:存放VIVI相關(guān)的驅(qū)動代碼l include:存放所有VIVI

41、源碼的頭文件l init:存放VIVI初始化代碼l lib:存放VIVI實現(xiàn)的庫函數(shù)文件l scripts:存放VIVI腳本配置文件l test:存放一些測試代碼文件l util:存放一些Nand Flash寫Image相關(guān)的實用文件3、Blob Blob 是Boot Loader Object 的縮寫,是一款功能強大的BootLoader。其源碼在 可以獲取。Blob 最初是由Jan-Derk Bakker 和Erik Mouw兩人為一塊名為LART(Linux Advanced Radio Terminal)的板子寫的,該板使用的處理器是StrongARM SA-1100,現(xiàn)在Blob已經(jīng)

42、被成功地移植到許多基于ARM的CPU上。4、 RedBoot RedBoot是專門為嵌入式系統(tǒng)定制的引導啟動工具,由Redhat開發(fā),它是基于eCos(Embedded Configurable Operating System)的硬件抽象層,同時繼承eCos的高可靠性,簡潔性,可配置性和可移植性等特點。RedBoot 集Bootloader、調(diào)試、Flash燒寫于一體。支持串口、網(wǎng)絡(luò)下載,執(zhí)行嵌入式應(yīng)用程序。既可用在產(chǎn)品的開發(fā)階段(調(diào)試功能),也可用在最終的產(chǎn)品上(Flash更新、網(wǎng)絡(luò)啟動)。RedBoot支持下載和調(diào)試應(yīng)用程序,開發(fā)板可通過BOOTP/DHCP協(xié)議動態(tài)配置IP 地址,支持跨

43、網(wǎng)段訪問。用戶可以通過tftp協(xié)議下載應(yīng)用程序和image?;蛲ㄟ^串口用x-modem/y-modem 下載。Redboot 支持用GDB(the GNU debugger通過串口或者網(wǎng)卡調(diào)試嵌入式程序。對gcc編譯的程序進行源代碼級的調(diào)試。相比jtag 調(diào)試器,可靠、高速、穩(wěn)定。用戶可通過串口或網(wǎng)卡,以命令行的形式管理Flash上的image,下載image 到flash。動態(tài)配置RedBoot 啟動參數(shù)、啟動腳本。上電后Redboot可自動從flash或tftp服務(wù)器上下載應(yīng)用程序執(zhí)行。RedBoot在/redboot 站點可以下載其源碼。5、 AR

44、Mboot ARMboot是一個基于 ARM或 StrongARM 為內(nèi)核 CPU的嵌入式系統(tǒng) BootLoader固件程序。該軟件的主要目標是使新的平臺更容易被移植并且盡可能發(fā)揮其強大性能。它只基于 ARM固件,但是它支持多種類型啟動,比如 flash,網(wǎng)絡(luò)下載通過 bootp,dhcp,tftp等。它也是開源項目,可以從 獲得最新的 ARMboot源碼和詳細資料。它在 ARM處理器方面應(yīng)用非常廣泛。 6、 DIY DIY(Do It Yourself),即自己制作。以上 U-Boot,VIVI,Blob,RedBoot和 ARMboot等成熟工具移植起來簡單快捷,但同時他們都存在著一定的局

45、限性,首先是因為它們是面向大部分硬件的工具,所以說在功能上要滿足大部分硬件的需求,但一般情況下我們只需要特定的開發(fā)板相關(guān)的實現(xiàn)代碼,其他型號開發(fā)板的實現(xiàn)代碼對它來說是沒有用的,所以通常它們的代碼量較大,添加自己的特有功能相對比較困難,因為你必須熟悉該代碼的組織關(guān)系,以及了解它的配置編譯等文件。所以用 DIY的方式自己編寫針對目標板的 BootLoader不但代碼量短小,同時靈活性很大,最重要的是將來好維護。所以在實際嵌入式產(chǎn)品開發(fā)時大都選擇 DIY的方式編寫 BootLoader。 l 三、基于 S3C2410開發(fā)板的 BootLoader實現(xiàn)1、BootLoader的典型結(jié)構(gòu)2、S3C241

46、0開發(fā)板介紹3、U-Boot分析與移植l Boot Loader的典型結(jié)構(gòu)l 階段1 依賴于CPU體系結(jié)構(gòu)的代碼,比如設(shè)備初始化代碼等,通常都用匯編語言來實現(xiàn) 階段2 通常用C語言來實現(xiàn),這樣可以實現(xiàn)一些復雜的功能,而且代碼會具有更好的可讀性和可移植性l Boot Loader的典型結(jié)構(gòu)l Boot Loader 的階段1通常包括以下步驟:1. 硬件設(shè)備初始化。2. 為加載Boot Loader的階段2準備RAM空間。3. 拷貝Boot Loader的階段2到RAM空間中。4. 設(shè)置好堆棧。5. 跳轉(zhuǎn)到階段2的C入口點。 l Boot Loader的典型結(jié)構(gòu)l Boot Loader的階段2通

47、常包括以下步驟:1. 初始化本階段要使用到的硬件設(shè)備。2. 檢測系統(tǒng)內(nèi)存映射(memory map)。3. 將kernel映像和根文件系統(tǒng)映像從Flash讀到RAM空間中。 4. 為內(nèi)核設(shè)置啟動參數(shù)。5. 調(diào)用內(nèi)核。l 基本的硬件初始化1. 屏蔽所有的中斷。中斷屏蔽可以通過寫CPU的中斷屏蔽寄存器或狀態(tài)寄存器(如ARM9的話就是CSPR)來完成。2. 設(shè)置CPU的速度和時鐘頻率。3. RAM初始化。包括正確地設(shè)置系統(tǒng)的內(nèi)存控制器的功能寄存器以及各內(nèi)存庫控制寄存器等。4. 初始化LED。典型地,通過GPIO來驅(qū)動LED,其目的是表明系統(tǒng)的狀態(tài)是OK還是Error。如果板子上沒有LED,那么也可以

48、通過初始化UART向串口打印Boot Loader的Logo字符信息來完成這一點。l 為加載階段2準備RAM空間l 空間大小最好是memory page 大?。ㄍǔJ?KB)的倍數(shù)。一般而言,1M的RAM空間已經(jīng)足夠了l 必須確保所安排的地址范圍的的確確是可讀寫的RAM空間l 拷貝階段2到RAM中l(wèi) 拷貝時要確定兩點:1. 階段2的可執(zhí)行映象在固態(tài)存儲設(shè)備的存放起始地址和終止地址;2. RAM空間的起始地址。l 設(shè)置堆棧指針l 跳轉(zhuǎn)到階段2入口l 在上述一切都就緒后,就可以跳轉(zhuǎn)到Boot Loader的階段2去執(zhí)行了。比如,在ARM系統(tǒng)中,這可以通過修改PC寄存器為合適的地址來實現(xiàn)。l Boo

49、t Loader階段2介紹l 在編譯和鏈接Boot Loader這樣的程序時,不能使用glibc庫中的任何支持函數(shù),需要設(shè)計如何跳入main()函數(shù)l blob解決方案:trampolinel 初始化階段要使用到的硬件設(shè)備l 這通常包括:1. 初始化至少一個串口,以便和終端用戶進行I/O輸出信息;2. 初始化計時器等l 檢測系統(tǒng)的內(nèi)存映射l 內(nèi)存映射的描述 used=1,則說明這段連續(xù)的地址范圍已被實現(xiàn) used=0,則說明這段連續(xù)的地址范圍并未被系統(tǒng)所實現(xiàn)l 檢測系統(tǒng)的內(nèi)存映射l 內(nèi)存映射的檢測 需要一個檢測整個RAM地址空間內(nèi)存映射情況的簡單而有效的算法(書中提及了一種算法)l 加載內(nèi)核映

50、像和根文件系統(tǒng)映像l 規(guī)劃內(nèi)存占用的布局 內(nèi)核映像所占用的內(nèi)存范圍 根文件系統(tǒng)所占用的內(nèi)存范圍 從flash上拷貝 設(shè)置內(nèi)核啟動參數(shù)l 在嵌入式Linux系統(tǒng)中,通常需要由Boot Loader設(shè)置的常見啟動參數(shù)有:ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD等l 調(diào)用內(nèi)核l Boot Loader調(diào)用Linux內(nèi)核的方法是直接跳轉(zhuǎn)到內(nèi)核的第一條指令處,也即直接跳轉(zhuǎn)到MEM_START0x8000地址處l 需要注意以下幾點設(shè)置: CPU寄存器的設(shè)置 CPU模式 Cache和MMU的設(shè)置 關(guān)于串口終端l 串口終端能夠打印出Boo

51、t Loader成功啟動的信息l 向串口終端打印信息也是一個非常重要而又有效的調(diào)試手段l 需要正確的配置串口2、S3C2410開發(fā)板介紹S3C2410開發(fā)板基本配置如下:l CPU 采用三星的 S3C2410 ARM920T,主頻 203MHz。集成有 SDRAM內(nèi)存控制器、NAND Flash控制器、SD卡控制器、USB Host、USB Device控制器、LCD控制器、IIC總線控制器、IIS控制器、SPI接口等多種接口。l 存儲器 64Mbyte的 SDRAM 64Mbyte的 NAND flashl 以太網(wǎng)控制器 10M網(wǎng)口,CS8900Q3,帶聯(lián)接和傳輸指示燈 l 串行接口 系統(tǒng)提

52、供兩個串行收發(fā) DB9母口連接器,上面分別表示 COM0、COM1 l USB Host接口 兩個 USB1.1HOST接口 一個 USB 1.1Device接口 l 存儲接口 一個 SD卡接口 一個十針的 AD接口 一個 IDE接口 l LCD和觸摸屏接口 一個 50芯 LCD接口引出了 LCD控制器和觸摸屏的全部信號 TFT真彩LCD接口提供真彩 LCD的接口,LCD模塊不需要外接 電源等,插入該接口直接可以使用。接口另外還帶觸摸屏的 接口 l 調(diào)試及下載接口 20針 Multi-ICE 標準 JTAG接口,支持 SDT2.51和 ADS1.2調(diào)試l 音頻接口 采用 IIS接口芯片 UDA

53、1341,一路立體聲音頻輸出接口可接耳機或音箱;支持錄音,板子自帶主機體話筒可直接錄音,另有一路話筒輸入接口可接麥克風l 電源接口 5V電源供電,帶電源開關(guān)和指示燈 l 操作系統(tǒng) 支持 Linux 2.4或以上系統(tǒng),支持 WinCE 開發(fā)板上包括 1片 64M ×8位數(shù)據(jù)寬度的 NAND Flash(K9F1208)。和 2片 16M×16位數(shù)據(jù)寬度的 SDRAM,地址范圍為 0x300000000x34000000。S3C2410將系統(tǒng)的存儲空間分為 8組(Bank),每組大小為 128MB,共 1GB。Bank0到 Bank5之間的開始地址是固定的,用于 ROM或 SR

54、AM。Bank6和Bank7用于 ROM,SRAM或 SDRAM,這兩個組是可編程且大小相同。S3C2410具有三種啟動方式,通過 OM1:0管腳進行選擇: OM1:0 = 00時,處理器通過 NAND Flash啟動 OM1:0 = 01時,處理器通過 16位寬的 ROM啟動 OM1:0 = 10時,處理器通過 32位寬的 ROM啟動 l NOR Flash和 NAND Flash是現(xiàn)在市場上兩種主要的非易失閃存技術(shù)。Intel于 1988年首先開發(fā)出 NORflash技術(shù),徹底改變了原先由 EPROM和 EEPROM一統(tǒng)天下的局面。緊接著,1989年,東芝公司發(fā)表了 NAND flash結(jié)

55、構(gòu),強調(diào)降低每比特的成本,更高的性能,并且象磁盤一樣可以通過接口輕松升級。NORFlash的特點是芯片內(nèi)執(zhí)行(XIP, eXecute In Place),這樣應(yīng)用程序可以直接在 flash閃存內(nèi)運行,不必再把代碼讀到系統(tǒng) RAM中。NOR的傳輸效率很高,在 14MB的小容量時具有很高的成本效益,但是很低的寫入和擦除速度大大影響了它的性能。NAND結(jié)構(gòu)能提供極高的單元密度,可以達到高存儲密度,并且寫入和擦除的速度也很快。應(yīng)用 NAND的困難在于 flash的管理和需要特殊的系統(tǒng)接口。通常 NOR的讀速度比 NAND稍快一些,而 NAND的寫入速度比 NOR快很多。所以在設(shè)計中應(yīng)該考慮這些情況。由于 NAND Flash容量大,比 Nor Flash便宜等優(yōu)勢,所以經(jīng)常選擇 NAND Flash啟動。當從 Nor Flash啟動時,要把flash芯片的首地址映射到 0x00000000位置,系統(tǒng)啟動后,啟動程序本身把自己從 flash搬運到 RAM中去。當從NAND Flash啟動時,S3

溫馨提示

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

評論

0/150

提交評論