vxworks及tornado_哈爾濱工業(yè)大學_第1頁
vxworks及tornado_哈爾濱工業(yè)大學_第2頁
vxworks及tornado_哈爾濱工業(yè)大學_第3頁
vxworks及tornado_哈爾濱工業(yè)大學_第4頁
vxworks及tornado_哈爾濱工業(yè)大學_第5頁
已閱讀5頁,還剩172頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、嵌入式操作系統(tǒng)第2章 VxWorks及其集成開發(fā)及其集成開發(fā) 環(huán)境Tornado嵌入式操作系統(tǒng)主要內(nèi)容1、VxWorks操作系統(tǒng)操作系統(tǒng)2、VxWorks映像及其啟動過程映像及其啟動過程3、Tornado集成開發(fā)環(huán)境集成開發(fā)環(huán)境嵌入式操作系統(tǒng) 重點掌握 映像的類型及啟動順序 生成映像相關的代碼 Tornado集成開發(fā)環(huán)境搭建集成開發(fā)環(huán)境搭建 創(chuàng)建映像 動態(tài)加載、運行、調(diào)試應用程序嵌入式操作系統(tǒng)1、VxWorks操作系統(tǒng)操作系統(tǒng)VxWorks操作系統(tǒng)的體系結(jié)構(gòu)操作系統(tǒng)的體系結(jié)構(gòu)VxWorks主機與目標機主機與目標機VxWorks模塊庫模塊庫VxWorks與與BSP嵌入式操作系統(tǒng)1.1 VxWor

2、ks體系結(jié)構(gòu)體系結(jié)構(gòu)VxWorks的網(wǎng)絡設施VxWorks的網(wǎng)絡設施包括:遠程文件訪問,包括基于client/Server的 嵌入式操作系統(tǒng)NFS機制以及使用RSH、FTP或TFTP的非NFS機制遠程的登錄和telnet以及bootp和ARP代理遠程過程調(diào)用RPC(Remote Procedure Call與BSD套接字兼容的編程接口TCP/IP協(xié)議??蛇x的簡單網(wǎng)絡管理協(xié)議SNMP(Simple Network Management Protocol無論是松耦合的串行線路、標準的以太網(wǎng)連接還是緊耦合的利用共享內(nèi)存的背板總線,所有的VxWorks網(wǎng)絡機制都遵循標準的Internet協(xié)議嵌入式操作

3、系統(tǒng)其他組件 虛擬內(nèi)存(VxVMI)與共享內(nèi)存(VxMP) VxVMI為帶有為帶有MMU的目標板提供了虛擬內(nèi)存的目標板提供了虛擬內(nèi)存 機制 VxMP提供了共享信號量、消息隊列和在不同提供了共享信號量、消息隊列和在不同 處理器之間的共享內(nèi)存區(qū)域 加載調(diào)試等開發(fā)工具組件 提供運行在目標機上的動態(tài)加載器Loader、目 標機調(diào)試代理WDB Agent、Target Shell等等嵌入式操作系統(tǒng)1.2 VxWorks的主機與目標機的主機與目標機 VxWorks的開發(fā)使用基于主機的開發(fā)使用基于主機/目標機結(jié)構(gòu)的交目標機結(jié)構(gòu)的交 叉開發(fā)環(huán)境 主機:運行Tornado集成開發(fā)環(huán)境,為目標 機生成VxWork

4、s和應用程序 目標機:運行VxWorks和應用程序的嵌入式 系統(tǒng) 主機與目標機之間通過以太網(wǎng)或串口相連, 其通信由Target server/Agent方式進行方式進行嵌入式操作系統(tǒng)默認方式下,target server與target agent通過網(wǎng)絡通信,但用戶也可以改變通信方式嵌入式操作系統(tǒng) 目標代理( Target Agent ) 遵循WDB(Wind Debug)協(xié)議,允許目標機)協(xié)議,允許目標機 與主機上的Tornado開發(fā)工具相連 在目標代理的默認設置中,目標代理是以 VxWorks的一個任務的一個任務tWdbTask的形式運行的的形式運行的 TargetServer向目標代理發(fā)

5、送調(diào)試請求(斷點向目標代理發(fā)送調(diào)試請求(斷點 設置、任務控制等等),調(diào)試請求可以決定目標 代理對系統(tǒng)中其他任務的控制和處理嵌入式操作系統(tǒng)1.3 VxWorks模塊庫模塊庫 VxWorks子程序都組織成庫,每個庫都有一個或子程序都組織成庫,每個庫都有一個或 多個頭文件,如:庫函數(shù)taskLibsemLib 函數(shù)taskSpawnsemTake頭文件taskLib.hsemLib.h嵌入式操作系統(tǒng)嵌入式操作系統(tǒng)1.4 VxWorks與與BSP BSP由代碼、文檔和規(guī)范組成,用作由代碼、文檔和規(guī)范組成,用作VxWorks程程 序和特定硬件之間的接口 BSP代碼用于完成系統(tǒng)初始化,設備驅(qū)動和其他代碼用

6、于完成系統(tǒng)初始化,設備驅(qū)動和其他 一些硬件相關的操作 VxWorks提供定制硬件的板級支持包提供定制硬件的板級支持包BSP,實現(xiàn),實現(xiàn) 硬件抽象層 VxWorks自帶的自帶的BSP代碼是針對硬件廠商的代碼是針對硬件廠商的Demo 板定制的,用戶可以根據(jù)自己的單板對Demo板代 碼進行修改嵌入式操作系統(tǒng)2、VxWorks映像及其啟動過程映像及其啟動過程 VxWorks映像類型映像類型 映像相關的文件 VxWorks的啟動過程的啟動過程嵌入式操作系統(tǒng)映像格式 ELF格式(格式(Executable and Linking Format)Executable file嵌入式操作系統(tǒng)2.1 VxWor

7、ks映像分類映像分類 Bootrom型型常稱常稱bootrom或或boot 是一個最小化、專用的VxWorks引導映像,實現(xiàn)最少 的系統(tǒng)初始化 主要用于啟動裝載VxWorks映像,其功能類似于PC機 的BIOS 運行時也建立起多任務環(huán)境 通常存放在ROM或Flash中 Vxworks型型常稱常稱Vxworks映像映像 是系統(tǒng)最終要運行的映像 在運行時至少有一部分需要在RAM中運行嵌入式操作系統(tǒng) 這兩大類型的映像都由BSP、VxWorks和 Application 3個部分組成,可以在其開發(fā)工具個部分組成,可以在其開發(fā)工具 Tornado上通過建立一個上通過建立一個bootable image獲

8、得獲得ApplicationVxWorksWind內(nèi)核WDB AgentShellFile SystemBSP嵌入式操作系統(tǒng) BSP(Board Support Pakage,板級支持包):它,板級支持包):它 由初始化和基本驅(qū)動程序兩部分組成 初始化是指從系統(tǒng)上電復位開始直到Wind內(nèi)核和 UsrRoot根任務啟動的這段時間,系統(tǒng)的執(zhí)行過程根任務啟動的這段時間,系統(tǒng)的執(zhí)行過程 初始化過程包括:CPU Init、Board Init、System Init。 CPU Init:初始化:初始化CPU的內(nèi)部寄存器的內(nèi)部寄存器 Board Init:初始化:初始化I/O的寄存器的寄存器 System

9、 Init:為系統(tǒng)的運行準備數(shù)據(jù)結(jié)構(gòu),進行數(shù)據(jù)初:為系統(tǒng)的運行準備數(shù)據(jù)結(jié)構(gòu),進行數(shù)據(jù)初 始化嵌入式操作系統(tǒng) 基本驅(qū)動程序完成對最小I/O設備的讀寫訪問等驅(qū) 動操作 VxWorks:包括定制的:包括定制的VxWorks內(nèi)核和各種外掛內(nèi)核和各種外掛 功能模塊 Application:為用戶編寫的應用程序:為用戶編寫的應用程序 BSP代碼位于代碼位于targetconfig下硬件相關子目錄下硬件相關子目錄嵌入式操作系統(tǒng)VxWorks映像映像 當構(gòu)造VxWorks映像時,可以根據(jù)需要構(gòu)造不同 類型的映像,系統(tǒng)把這些映像分成三種類型: ROM駐留(駐留(ROM-Resident image)的映像)的映

10、像 具備自啟動功能 基于ROM的映像(ROM-based image) 可加載的映像(loadable image)嵌入式操作系統(tǒng)ROM駐留(駐留(ROM-Resident)的映像)的映像 它在啟動時把數(shù)據(jù)段拷貝到目標機RAM中 這種類型的映像在啟動階段比較快,但它在目標 機上執(zhí)行的速度比其他類型的映像要慢 升級不方便,適合內(nèi)存資源有限的場合嵌入式操作系統(tǒng) 執(zhí)行順序:嵌入式操作系統(tǒng)基于ROM的映像(ROM-based image) 不具備自啟動功能,它的執(zhí)行需要通過bootrom 把它從ROM或Flash中裝載到目標機RAM中,然 后才開始執(zhí)行 這種類型的映像通常在啟動階段比較慢,但在目 標機

11、上執(zhí)行的速度要快 方便升級 產(chǎn)品發(fā)布時,常使用這種映像 執(zhí)行順序:嵌入式操作系統(tǒng)嵌入式操作系統(tǒng)可加載的映像(loadable image) 不具備自啟動功能,它的執(zhí)行需要通過bootrom 把它裝載到目標機RAM中,然后才開始執(zhí)行 調(diào)試時,一般使用這種映像 加載時需要相關協(xié)議支持:串口、網(wǎng)口及其他協(xié) 議 執(zhí)行順序:嵌入式操作系統(tǒng)嵌入式操作系統(tǒng)典型的VxWorks映像 按照VxWorks構(gòu)造規(guī)則可以創(chuàng)建以下多種典型的 VxWorks映像映像 VxWorksloadable image,由,由bootrom加載,在加載,在RAM 中運行,使用宿主機上的WindSh工具和符號表 VxWorks.st

12、loadable image,加載方式同上,但它內(nèi),加載方式同上,但它內(nèi) 置符號表 VxWorks_romrom-based image,寫入,寫入rom,自啟,自啟 動,在RAM中運行 VxWorks.st_romcompressed rom-based image,加,加 載方式同上嵌入式操作系統(tǒng) VxWorks.res.romrom-resident image,代碼在,代碼在ROM 中運行 VxWorks.res_rom_nosymrom-resident image,代碼,代碼 在ROM中運行,不包含符號表以上幾種均為VxWorks 映像 bootrom基于基于rom壓縮型的引導映像

13、壓縮型的引導映像 bootrom_uncmp基于基于rom非壓縮型的引導對象非壓縮型的引導對象 bootrom_resrom駐留型引導映像駐留型引導映像以上3種均為bootrom嵌入式操作系統(tǒng)2.2 映像相關的文件 映像相關文件主要包含在四個目錄下(BSP相關 文件): Tornadotargetconfigall:所有:所有BSP的公共部分的公共部分 Tornadotargetconfigcompsvxworks:內(nèi)核基本模塊描內(nèi)核基本模塊描 述文件(*.cdf) Tornadotargetconfigcompssrc:模塊配置文件(被模塊配置文件(被 usrConfig.c使用)使用) T

14、ornadotargetconfigbspname:與目標板相關的部分:與目標板相關的部分嵌入式操作系統(tǒng) configall目錄下主要有如下幾個文件目錄下主要有如下幾個文件 bootConfig.c :是所有是所有Bootrom的主要初始化與的主要初始化與 控制文件 BootConfig.c是是usrConfig.c的一個子集,所以的一個子集,所以 Bootrom只能提供完整只能提供完整VxWorks Image中的部分功中的部分功 能 Boot Image不使用不使用MMU庫(庫(SPARC除外)。在集除外)。在集 成環(huán)境下修改工程相關的配置信息不會影響 Bootrom,只有直接修改只有直接

15、修改config.h、configAll.h、 bootConfig.c和和bootInit.c文件才會影響到文件才會影響到Bootrom嵌入式操作系統(tǒng) bootInit.c:定義了:定義了romStart()函數(shù),用于函數(shù),用于 Bootrom的第二階段初始化。首先把的第二階段初始化。首先把text和和data 段從ROM拷到RAM中,然后初始化部分RAM, 進行解壓 usrConfig.c:包含:包含VxWorks Image的主要初始的主要初始 化代碼,非常完整。使用命令行編譯時才會用 到此文件 configAll.h:設置了所有:設置了所有VxWorks映像的默認映像的默認 配置,包括

16、內(nèi)核配置、組件配置、參數(shù)配置、 Agent配置等等配置等等嵌入式操作系統(tǒng) configbspname:在該目錄下主要有如下幾個文:在該目錄下主要有如下幾個文 件 makefile: 用于命令行下編譯,其中定義了一些 宏,如:CPU,TOOL,TARGET_DIR,VENDOR,BOARD,ROM_TEXT_ADRS,ROM_BASE_ADRS,ROM_SIZE,RAM_LOW_ADRS,RAM_HIGH_ADRS; config.h:包含所有的頭文件和與目標板相關的:包含所有的頭文件和與目標板相關的 特殊定義,如:BSP版本號和修訂版本號、默 認引導參數(shù)、對Cache和MMU的配置、RAM和

17、ROM的定位以及大小配置、外部總線地址映 射,網(wǎng)絡設備和中斷向量嵌入式操作系統(tǒng) romInit.s:該文件包含該文件包含Bootrom和和Rom-based VxWorks Image的初始化入口匯編代碼,即實的初始化入口匯編代碼,即實 現(xiàn)了romInit()。目標板一上電就開始執(zhí)行 romInit(),主要完成三部分工作:,主要完成三部分工作: 屏蔽中斷,初始化CPU 配置內(nèi)存系統(tǒng),通常包括關閉cache,初始化內(nèi)存控制 器 初始化堆棧指針和其它寄存器以執(zhí)行C語言,然后 調(diào)用romStart()Note:romInit()函數(shù)必須設計成與內(nèi)存地址無關的函數(shù)必須設計成與內(nèi)存地址無關的代碼(PI

18、C),romInit.s只執(zhí)行一些必要的初始化,只執(zhí)行一些必要的初始化,其余的初始化工作可放到sysHwInit()中實現(xiàn)嵌入式操作系統(tǒng) sysALib.s:包含目標板或系統(tǒng)相關的匯編語言:包含目標板或系統(tǒng)相關的匯編語言 函數(shù),即實現(xiàn)了_sysInit()。這是Bootrom起來 以后執(zhí)行的第一段代碼,sysALib.s類似于 romInit.s完成的工作,但它不必設計成完成的工作,但它不必設計成PIC,且且 可調(diào)用其它庫中的函數(shù)嵌入式操作系統(tǒng) sysLib.c:包含目標板或系統(tǒng)相關的:包含目標板或系統(tǒng)相關的C語言函數(shù)語言函數(shù), 該文件提供板級接口,通過該接口,VxWorks 和應用程序的實現(xiàn)

19、與目標系統(tǒng)無關,sysLib.c包 含srcdrv目錄下的驅(qū)動程序子文件,驅(qū)動程序 的安裝和初始化在子文件中完成。它中一般應 實現(xiàn)以下幾類函數(shù): 系統(tǒng)時鐘相關函: sysClkConnect(),sysClkDisable(),sysClkEnable(),sysClkInt(),sysClkRateGet(),sysClkRateSet()嵌入式操作系統(tǒng) 系統(tǒng)硬件初始化函數(shù):sysHwInit(),sysHwInit2() ; 內(nèi)存相關函數(shù):sysMemTop() 串口相關函數(shù):sysSerialHwInit(), sysSerialHwInit2(),sysSerialChanGet()

20、雜項函數(shù):sysBspRev(),sysModel(),sysToMonitor() 其他可選函數(shù):如:輔助時鐘中斷相關函數(shù),總線 相關函數(shù) sysSerial.c:串口驅(qū)動程序的安裝和初始化:串口驅(qū)動程序的安裝和初始化 sysNet.c:網(wǎng)絡接口設備的安裝和初始化:網(wǎng)絡接口設備的安裝和初始化嵌入式操作系統(tǒng) bspname.h:包含與板子相關的宏定義。若要:包含與板子相關的宏定義。若要 把srcdrv下的某驅(qū)動程序移植到目標板上,必 須在bspname.h文件開始包含目錄targethdrv 下該驅(qū)動程序相對應的頭文件 bspname.h應該定義:中斷向量或中斷號;應該定義:中斷向量或中斷號;

21、I/O 設備地址;設備寄存器位的含義定義;系統(tǒng)時 鐘和輔助時鐘最大和最小時鐘速率嵌入式操作系統(tǒng)2.3 VxWorks的啟動過程的啟動過程 以可加載型映像為例,給出VxWorks操作系統(tǒng)的 啟動過程 BSP啟動過程可以分成兩部分:啟動過程可以分成兩部分: bootrom啟動過程(又簡稱啟動過程(又簡稱boot啟動過程)啟動過程) VxWorks映像啟動過程映像啟動過程(又簡稱映像啟動過程又簡稱映像啟動過程) 兩者在使用BSP文件上的區(qū)別在于:在啟動順序 中所調(diào)用的文件不同。如:romInit.s/sysAlib.s、 bootConfig.c/usrConfig.c等等嵌入式操作系統(tǒng)bootro

22、m啟動過程啟動過程Power up/resetromInitromStartusrInitusrRootbootCmdLoopbootLoadtargetconfigbspnameromInit.stargetconfigallbootInit.ctargetconfigallbootConfig.cVxWorks嵌入式操作系統(tǒng)romInit() 引導映像首先執(zhí)行的函數(shù)。路徑: targetconfigbspnameromInit.s 屏蔽處理器中斷 保存啟動類型(冷/熱啟動) 硬件相關的初始化 初始化處理器 初始化堆棧指針 初始化SDRAM控制器(時鐘頻率、等待狀態(tài)、刷新頻 率等) 如果需要

23、屏蔽二級高速緩存 初始化內(nèi)存 調(diào)用romStart()嵌入式操作系統(tǒng)romStart() 引導映像第一個執(zhí)行的C函數(shù)。路 徑:./all/bootInit.c 將數(shù)據(jù)段從ROM拷貝到RAM 將代碼段從ROM拷貝到RAM 清理沒有使用的那部分內(nèi)存(冷啟動時) 執(zhí)行解壓操作(如果需要) 調(diào)用預內(nèi)核的通用初始化程序(usrInit())嵌入式操作系統(tǒng) 在開發(fā)過程中往往需要修改,尤其是一些宏定義, 如: LOCAL_MEM_LOCAL_ADRS目標板本地目標板本地RAM起始地起始地 址 LOCAL_MEM_SIZE本地本地RAM大小大小 USER_RESERVED_MEM從從RAM頂端其用戶保留字節(jié)頂

24、端其用戶保留字節(jié) 數(shù) RAM_HIGH_ADRS拷貝引導映像的入口地址拷貝引導映像的入口地址 RAM_LOW_ADRS拷貝拷貝VxWorks映像的入口地址映像的入口地址 ROM_TEXT_ADRS引導引導ROM的入口地址的入口地址 ROM_SIZEROM空間大小空間大小 ROM_BASE_ADRSROM基地址基地址 RESERVED從從RAM底部其用戶保留字節(jié)數(shù)底部其用戶保留字節(jié)數(shù) STACK_SAVE為為RomStart()準備的最大堆棧大小準備的最大堆棧大小嵌入式操作系統(tǒng)SYS_MEM_BOTTOM系統(tǒng)存儲區(qū)底部地址系統(tǒng)存儲區(qū)底部地址SYS_MEM_TOP系統(tǒng)存儲區(qū)頂部地址系統(tǒng)存儲區(qū)頂部地

25、址binArrayStart壓縮型二進制映像的起始地址壓縮型二進制映像的起始地址binArrayEnd壓縮型二進制映像的結(jié)束地址壓縮型二進制映像的結(jié)束地址 romStart()運行完后,運行完后,RAM的布局:的布局:嵌入式操作系統(tǒng)嵌入式操作系統(tǒng)usrInit()路徑: ./all/bootConfig.c對BSS段賦零把BootType值賦給sysStartType調(diào)用excVecInit(),初始化所有系統(tǒng)和缺省中斷向量調(diào)用sysHwInit(),初始化與目標板相關的硬件調(diào)用usrKernelInit(),配置VxWorks內(nèi)核調(diào)用kernelInit(),初始化并啟動內(nèi)核調(diào)用usrRoo

26、t()嵌入式操作系統(tǒng)usrRoot() 路徑: ./all/bootConfig.c 初始化內(nèi)存池 調(diào)用sysClkConnect(), sysClkRateSet(), sysClkEnable()初始化系統(tǒng)時鐘初始化系統(tǒng)時鐘 初始化I/O、文件系統(tǒng) 安裝控制臺 配置、初始化WDB 初始化網(wǎng)絡接口(MUX) 啟動bootCmdLoop任務任務嵌入式操作系統(tǒng)bootCmdLoop() 初始化bootline 調(diào)用autoboot,并啟動延遲機制 設置命令行,判斷輸入命令(boot提供的命令)?,- print this list,- boot (load and go),p,- print b

27、oot params,c,- change boot params,l,- load boot file,g adrs,- go to adrs,d adrs,n,- display memory,m adrs,- modify memory,f adrs, nbytes, value, - fill memory,t adrs, adrs, nbytes, - copy memory,e,- print fatal exception,v,- print boot logo with version,嵌入式操作系統(tǒng) 調(diào)用bootLoad()下載VxWorks映像 之后控制臺(或超級終端)會有

28、以下打?。呵度胧讲僮飨到y(tǒng)此時按任意鍵可停止自動啟動,打印啟動行參數(shù):嵌入式操作系統(tǒng) 如果鍵入,則boot啟動繼續(xù),按默認下載方式 下載映像(一般情況下默認網(wǎng)口):嵌入式操作系統(tǒng)bootLoad() 讀取boot參數(shù)(bootline) 根據(jù)下載接口設置,調(diào)用相應函數(shù)下載VxWorks 映像。提供以下幾種下載方式: 網(wǎng)口 SCSI接口接口 軟盤 硬盤接口(ATA、IDE、PCMCIA、TFFS) 嵌入式操作系統(tǒng) 下載映像時控制臺會有如下顯示:Loading. 881680Starting at 0 x10000嵌入式操作系統(tǒng)VxWorks image啟動過程啟動過程sysInit()usrIni

29、t()sysHwInit()usrKernelInit()KernelInit()UsrRoot()usrAppInit()targetconfigbspnamesysAlib.stargetprojProject1prjConfig.ctargetconfigbspnamesyslib.ctargetconfigcompssrcusrKernel.ctargethkernelLib.htargetprojProject1prjConfig.ctargetprojbspnameusrAppInit.c嵌入式操作系統(tǒng)sysInit()路徑: targetconfigbspnamesysAlib.

30、s用缺省值初始化系統(tǒng)中斷表用缺省值初始化系統(tǒng)異常表初始化堆棧初始化處理器關中斷激活usrInit()嵌入式操作系統(tǒng)usrInit()路徑: targetprojProject1prjConfig.c對bss賦零把bootType值賦給sysStartType調(diào)用excVecInit(),初始化所有系統(tǒng)和缺省中斷向量調(diào)用sysHwInit(),初始化與目標板相關硬件調(diào)用usrKernelInit(),配置VxWorks內(nèi)核調(diào)用kernelInit(),初始化并啟動內(nèi)核嵌入式操作系統(tǒng)sysHwInit() 路徑: targetconfigbspnamesysLib.c 初始化內(nèi)存映射(MMU) 初

31、始化PCI庫 初始化可編程中斷控制器(可選) 初始化PCI設備 初始化串口設備 初始化網(wǎng)口 初始化電源管理模塊(可選)嵌入式操作系統(tǒng)usrKernelInit() 路徑:targetconfigcompssrcusrKernel.c 配置內(nèi)核數(shù)據(jù)結(jié)構(gòu) 按照系統(tǒng)配置,添加相關組件嵌入式操作系統(tǒng)KernelInit() 路徑:targethkernelLib.h初始化并啟動內(nèi)核創(chuàng)建系統(tǒng)內(nèi)存分區(qū)激活intLockLevelSet()從內(nèi)存池頂部創(chuàng)建根堆棧和TCB調(diào)用taskInit(),taskActivate()調(diào)用usrRoot()嵌入式操作系統(tǒng)UsrRoot()路徑:usrConfig.c初始

32、化I/O系統(tǒng),安裝設備驅(qū)動程序,創(chuàng)建設備(在configAll.h和config.h中指定)等調(diào)用sysClkConnect()、sysClkRateSet()、iosInit()安裝系統(tǒng)時鐘驅(qū)動程序調(diào)用ttyDrv(),安裝控制臺驅(qū)動程序調(diào)用excInit()、logInit()、sigInit()初始化異常管理調(diào)用pipeDrv()初始化管道驅(qū)動程序調(diào)用stdioInit()初始化標準的I/O庫調(diào)用wdbConfig()配置并初始化目標代理機如果系統(tǒng)配置了target shell,則啟動它,則啟動它啟動用戶應用程序usrAppInit()嵌入式操作系統(tǒng) 映像下載成功后,控制臺會有映像、BS

33、P的版本 信息打?。呵度胧讲僮飨到y(tǒng)VxWorks image啟動后的內(nèi)存(啟動后的內(nèi)存(RAM)分布)分布用來在目標板上為Tornado所用,主要用于動態(tài)下載目標模塊,傳送參數(shù)存放中斷向量表、BootLine,系統(tǒng)引導配置,異常信息OS未啟動前,所使用的堆棧區(qū)存放存放操作系統(tǒng)映像,vxsorks的text段,data段,BSS段用于動態(tài)內(nèi)存的分配,任務的堆棧,控制塊,VxWorks運行時需要的內(nèi)存。保留給用戶管理的內(nèi)存嵌入式操作系統(tǒng)Bootrom與與VxWorks映像啟動過程比較映像啟動過程比較 Bootrom 和VxWorks 都對硬件進行了初始化,但 兩次硬件初始化的是不同的。 BootR

34、om映像主要作用是通過網(wǎng)口或串口下載映像主要作用是通過網(wǎng)口或串口下載 VxWorks系統(tǒng),所以它只是初始化很少的硬件系統(tǒng)如系統(tǒng),所以它只是初始化很少的硬件系統(tǒng)如 串口、網(wǎng)口等來滿足下載VxWorks的需要,一旦 VxWorks下載完畢。這些初始化過的硬件的作用也就下載完畢。這些初始化過的硬件的作用也就 完成了 VxWorks啟動后會從新對幾乎所有的硬件設備進行完啟動后會從新對幾乎所有的硬件設備進行完 全的初始化來滿足VxWorks操作系統(tǒng)運行的需要嵌入式操作系統(tǒng)嵌入式操作系統(tǒng)映像的開發(fā)過程 盡量獲得一個與目標硬件環(huán)境相近的參考板級支 持包和相關代碼模板 開發(fā)環(huán)境準備 編寫引導代碼的初始化代碼

35、提供一個輪詢訪問串口的驅(qū)動程序,以便調(diào)試 提供一個網(wǎng)口驅(qū)動程序,以便下載映像 一旦啟動VxWorks內(nèi)核,則需要 連接系統(tǒng)中斷 啟動系統(tǒng)時鐘 根據(jù)目標板硬件環(huán)境,完成板級支持包內(nèi)的驅(qū)動 程序和設備初始化 板級支持包的測試和文檔編寫嵌入式操作系統(tǒng)3、Tornado集成開發(fā)環(huán)境集成開發(fā)環(huán)境Tornado集成開發(fā)環(huán)境介紹集成開發(fā)環(huán)境介紹安裝Tornado2.2用Tornado創(chuàng)建一個bootable image用Tornado創(chuàng)建一個downloadableapplication module嵌入式操作系統(tǒng)3.1 Tornado集成開發(fā)環(huán)境集成開發(fā)環(huán)境 Tornado集成開發(fā)環(huán)境集成開發(fā)環(huán)境 是實現(xiàn)

36、嵌入式實時應用程序的完整的軟件開 發(fā)平臺 是交叉開發(fā)環(huán)境運行在主機上的部分 是開發(fā)和調(diào)試VxWorks系統(tǒng)不可缺少的系統(tǒng) 組成部分 Tornado是一個窗口環(huán)境,是一個窗口環(huán)境, 集成了編輯器、編譯器、調(diào)試器于一體嵌入式操作系統(tǒng)Tornado開發(fā)系統(tǒng)的組成開發(fā)系統(tǒng)的組成 主機工具與VxWorks系統(tǒng)之間 的通信由TargetTornado開發(fā)系統(tǒng)包含三個高度集成的部分: server/Agent共 同完成VxWorks:運行在目標機上的高性能、可剪裁的實時操作系統(tǒng)Tornado開發(fā)環(huán)境:運行在宿主機上,包括一組交叉開發(fā)工具和實用程序,可對目標機上的應用進行跟蹤和調(diào)試連接宿主機和目標機的多種通信

37、方式以太網(wǎng)、串口線等等嵌入式操作系統(tǒng) 命令執(zhí)行工具WindShTornado IDE的主要組成工具的主要組成工具 C語言命令shell 這是Tornado所獨有的功能強大的命令行 解釋器 可以直接解釋C語言表達式、調(diào)用目 VxSim對軟件開發(fā)者的意義: 標機上的函數(shù)、訪問系統(tǒng)符號表中 在嵌入式系統(tǒng)開發(fā)中軟件的開發(fā)通常受到硬件開發(fā) 登記的變量 進度的制約 集成的源代碼編輯器 還可以直接執(zhí)行語言 由于軟件開發(fā)必須滯后于硬件開發(fā),影響了產(chǎn)品調(diào)試器,包括命令行和圖形接口 可以實現(xiàn)所有的調(diào)試功能,包括 工具CrossWind/WDB就是圖形化的增強型交叉調(diào)試器研發(fā)進度 下載/刪除軟件模塊 VxSim在一

38、定程度上解決了這個問題:使得用戶可以遠程源代碼集成調(diào)試器C/C+編譯環(huán)境工程配置工具Project Facility/Configuration 創(chuàng)建并發(fā)起一個任務、刪除任務目標機系統(tǒng)狀態(tài)瀏覽器browser 在工程開發(fā)初期,在硬件環(huán)境尚不具備的情況下,可支持任務級和系統(tǒng)級調(diào)試VxWorks提供交叉編譯器、iostreams類庫和 可以對VxWorks操作系統(tǒng)及其組件進行自動地配置這是Tornado shell的一個圖形化組件 創(chuàng)建/刪除端點 以利用Tornado進行與硬件無關模塊的設計 支持混合源代碼和匯編代碼顯示一系列的工具來支持C語言和C+語言 Makefile自動生成維護提供目標系統(tǒng)的

39、全面狀態(tài)總結(jié),也允許開發(fā)者監(jiān)視獨立 運行/單步/繼續(xù)執(zhí)行程序 WindView, 支持多目標機同時調(diào)試 Diab C/C+ Compiler:唯一獲得Motorola軟件工程維護的目標系統(tǒng)對象:任務、信號燈、消息隊列、內(nèi)存分區(qū) 查看/修改內(nèi)存、寄存器、變量 集成的軟件邏輯分析儀(診斷分析工具) 白金大獎的嵌入式編譯器自動的依賴性分析、定時器、模塊、堆棧等 查看任務列表、內(nèi)存使用情況、可以向開發(fā)者提供目標機硬件上實際運行的應用程序的詳細情況 GNU C/C+ Compiler:應用最廣泛的編譯器 CPU利用率 代碼容量計算開發(fā)者可以選擇周期性或條件性的更新狀態(tài)值 集成的VxWorks目標仿真器V

40、xSim自動剪裁 可以與VxSim一起使用查看特定的對象(任務、信號量、提供對C+全面的支持 提供與真實目標機一致的調(diào)試和仿真運行環(huán)境 消息隊列、內(nèi)存分區(qū)、類) 大大縮短了開發(fā)周期 允許開發(fā)者可以在沒有BSP、操作系統(tǒng)配置以及目標機 復位目標機等 硬件的情況下進行開發(fā)嵌入式操作系統(tǒng)其他核心工具 多語言瀏覽器WindNavigator 提供源代碼瀏覽 圖形化顯示函數(shù)調(diào)用關系 快速代碼定位嵌入式操作系統(tǒng) 圖形化核心配置工具WindConfig 使用圖形向?qū)Х绞街悄芑淖詣优渲肰xWorks 內(nèi)核及其組件參數(shù) 增量加載器 可以動態(tài)的加載新增模塊并在目標機與內(nèi)核實 現(xiàn)動態(tài)鏈接運行,不必重新下載內(nèi)核及未

41、改動 的模塊嵌入式操作系統(tǒng)Tornado IDE的工作方式的工作方式 Tornado IDE不受目標機資源的約束不受目標機資源的約束 上述工具運行在主機上,依賴存放在主機上的目 標機系統(tǒng)的符號表 它們與目標機通過target server/agent交互交互 支持動態(tài)鏈接與加載 開發(fā)者可以分批將目標模塊加載到目標系統(tǒng)上 不必在主機上將應用程序與內(nèi)核鏈接起來,然后整個 的下載到目標系統(tǒng)上去 可以大大縮短編輯-測試-調(diào)試周期嵌入式操作系統(tǒng)3.2 Tornado2.2安裝安裝 安裝文件: 41/software/Engineering.Gener al/EDA/_

42、Others/WINDRIVER.TORNADO/WIN DRIVER.TORNADO.V2.2.FOR.PENTIUM/或?qū)W或?qū)W 院ftp 安裝步驟除下面外,都按默認選擇: tornado registry選擇手動配置選擇手動配置 license選擇固定選擇固定phone或或fax項項嵌入式操作系統(tǒng) License除兩個除兩個key外(外( CD1: cAQ8i-qP2I&-g$vT6-3&gjw-bEk9g CD2: A7KbB-Rd37p-hNFBE-kzgaT-b9gpC ), 還需: 創(chuàng)建c:/flexm文件夾,將安裝文件crack中的 license.dat拷貝到上

43、述文件夾拷貝到上述文件夾 添加環(huán)境變量: LM_LICENSE_FILE = c:flexlmlicense.dat 如果在使用vxsim仿真時,不能成功加載VxSim, 則需要安裝xp的補?。篕B924867嵌入式操作系統(tǒng)安裝后的目錄結(jié)構(gòu)嵌入式操作系統(tǒng)VxWroks相關的文件目錄相關的文件目錄嵌入式操作系統(tǒng)VxWorks工程管理工程管理 Tornado能夠創(chuàng)建兩種工程類型:能夠創(chuàng)建兩種工程類型:bootable和和 downloadable Bootable類型可用來生成類型可用來生成bootrom和和VxWorks映映 像,生成的VxWorks映像,它包含的操作系統(tǒng)組 件,經(jīng)過完全連接,可

44、以獨立運行 Downloadable類型用于生成應用程序模塊目標映類型用于生成應用程序模塊目標映 像,只是部分連接,存在未解析的外部符號引 用,不能獨立運行,但它支持動態(tài)加載和連接, 為VxWorks所特有,能進行應用代碼的快速開發(fā) 和調(diào)試嵌入式操作系統(tǒng)嵌入式操作系統(tǒng)3.3 創(chuàng)建一個bootable image 通過創(chuàng)建Bootable Image,可以生成運行在目標,可以生成運行在目標 機上的各種bootrom和VxWorks映像 這里以loadable image(bootrom+VxWorks)啟)啟 動方式為例,構(gòu)造一個完整的開發(fā)環(huán)境軟盤引導目標機網(wǎng)絡連接下載映像網(wǎng)絡連接下載模塊網(wǎng)絡連

45、接調(diào)試串口控制臺嵌入式操作系統(tǒng) 我們利用VMware軟件模擬真實的目標機,來搭 建一個VxWorks操作系統(tǒng)的交叉開發(fā)環(huán)境 宿主機:PC機 目標機:VMware虛擬機 操作步驟: (一)利用VMware軟件創(chuàng)建一個虛擬目標機 (二)在PC機上構(gòu)造虛擬目標機的loadable image映像映像 (三)修改Tornado相關設置,連接宿主機和目標機, 建立調(diào)試通道 通常情況下,在開發(fā)階段,如果沒有合適的開發(fā) 板,建議使用Tornado自帶的VxSim進行仿真嵌入式操作系統(tǒng)(一)利用VMware軟件創(chuàng)建一個虛擬目標機 下載并安裝VMware軟件 使用VMware向?qū)?chuàng)建一個虛擬機嵌入式操作系統(tǒng) 設

46、置虛擬機軟盤屬性嵌入式操作系統(tǒng) 設置虛擬機網(wǎng)卡屬性嵌入式操作系統(tǒng) 修改VMnet1的IP地址為主機IP地址主機IP地址與bootline一致嵌入式操作系統(tǒng) 如果PC機上沒有軟驅(qū),下載并安裝ramdiskNT,創(chuàng) 建一個虛擬軟驅(qū)A:嵌入式操作系統(tǒng)(二)在PC機上創(chuàng)建虛擬目標機的bootrom 和VxWorks映像 確定網(wǎng)卡類型,選擇合適網(wǎng)卡驅(qū)動程序 因為VMware虛擬機上的網(wǎng)卡類型默認為AMD PCNET Family PCI Ethernet Adapter ,而 Tornado自帶的自帶的ln97x驅(qū)動不適合虛擬機上的網(wǎng)驅(qū)動不適合虛擬機上的網(wǎng) 卡,需要找到合適的驅(qū)動程序 將ftp上的pcP

47、entium文件夾替換Tornado安裝目錄 C:Tornado2.2targetconfig下的下的pcPentium,替,替 換pcPentium文件夾的主要目的就是替換ln97x驅(qū) 動程序嵌入式操作系統(tǒng) 打開Tornado工具,創(chuàng)建一個bootable image嵌入式操作系統(tǒng)嵌入式操作系統(tǒng)嵌入式操作系統(tǒng) 修改配置文件targetconfigpcPentiumconfig.h config.h定義:定義: 引導行,引導行定義了引導設備、引導路徑、 操作系統(tǒng)文件名、主機/目標機IP地址、子網(wǎng)掩 碼、FTP用戶名和口令等參數(shù) 目標機操作系統(tǒng)包含的主要成分,例如軟驅(qū)、 IDE硬盤、硬盤、SCS

48、I設備、網(wǎng)絡等設備驅(qū)動設備、網(wǎng)絡等設備驅(qū)動 文件系統(tǒng)(DOSFS、TFFS、CDROMFS等) 調(diào)試方式 內(nèi)存地址 以及有關參數(shù)嵌入式操作系統(tǒng) 修改配置文件config.h中的啟動網(wǎng)卡設置,確定目 標機使用的網(wǎng)卡類型號:嵌入式操作系統(tǒng) 修改config.h中的default_boot_line嵌入式操作系統(tǒng) 修改為: lnPci(0,0)host:vxworks h= e=8 u=target pw=target 解釋如下: 啟動設備名lnPci(0,0),意思是目標機第0 個處理器的第0塊lnPci網(wǎng)卡。 啟動設備名會因驅(qū)動程序的不同而不同

49、嵌入式操作系統(tǒng) 常用設備:fdideataslenefeiINCLUDE_FDINCLUDE_IDEINCLUDE_ATAINCLUDE_SCSIINCLUDE_ENEINCLUDE_FEI軟驅(qū)IDE硬盤ATA硬盤SCSI硬盤Eagle/NE2000兼容網(wǎng)卡兼容網(wǎng)卡Intel 82557/8/9 PCI interfaceelPci INCLUDE_EL_3C90X_END3Com905系列系列 3Com EtherLink III interfaceelt INCLUDE_ELT_3C509_ENDlnPciINCLUDE_LN_97X_END AMD 79C97x PCI interfac

50、e嵌入式操作系統(tǒng) 主機標志名,可以任意填寫,不影響啟動過 程host 主機端映像存放路徑和名稱VxWorks 主機IP地址h= 目標機IP地址e=8嵌入式操作系統(tǒng) 添加控制臺 修改為嵌入式操作系統(tǒng) 生成bootrom,選擇菜單Build-Build Boot Rom嵌入式操作系統(tǒng) 彈出的窗口 BSP選擇選擇pcPentium,Image選擇選擇bootrom和和gnu 點擊OK,會彈出Build Output窗口顯示編譯過窗口顯示編譯過 程 等待編譯成功,生成的bootrom存放在 C:Tornado2.2targetconfigpcPent

51、ium下下嵌入式操作系統(tǒng) 生成VxWorks映像。VxWroks有很多組件需要 配置:黑色為VxWorks當前所包含的組件嵌入式操作系統(tǒng) 打開development tool components為了能夠使用shell,選擇target shell components嵌入式操作系統(tǒng)為了能夠使用telnet服務,選擇網(wǎng)絡組件中的telnet server嵌入式操作系統(tǒng) 選擇菜單build rebuild all 等待編譯結(jié)束 編譯出來的VxWorks映像在工程目錄下的 default目錄下,其名稱:目錄下,其名稱:VxWorks嵌入式操作系統(tǒng) 制作啟動軟盤 在windows的cmd命令窗口下,

52、進入 C:Tornado2.2hostx86-win32bin目錄:目錄: 把前面生成的bootrom拷貝至此目錄 命令:format a: 用于格式化軟盤,第一次使用時需要 mkboot a: bootrom 制作啟動盤嵌入式操作系統(tǒng)(三)修改Tornado相關設置,連接宿主機和 目標機,建立調(diào)試通道 設置FTP服務器 可以使用常用的FTP服務器 例如Serv_U 也可以使用Tornado自帶的FTP Server 使用FTP服務器的關鍵在于提供正確的用戶名、 密碼和映像所在路徑嵌入式操作系統(tǒng) 啟動Tornado組件FTP Server 在WFTPD窗口中選擇菜單Security中的 Use

53、r/right 在其彈出窗口中選擇New User嵌入式操作系統(tǒng) 根據(jù)提示信息輸入: 登錄用戶名和密碼(要與 DEFAULT_BOOT_LINE中指定的一致)中指定的一致) Home Directory 如果這個路徑不是默認的vxWorks鏡像生 成目錄的路徑,則需要拷貝生成的 vxWorks鏡像到該路徑下鏡像到該路徑下 比如從上面的default目錄下拷貝到D盤 D:嵌入式操作系統(tǒng) 啟動虛擬目標機嵌入式操作系統(tǒng)嵌入式操作系統(tǒng)嵌入式操作系統(tǒng)嵌入式操作系統(tǒng)嵌入式操作系統(tǒng) 使用Target Server從主機連接到目標機從主機連接到目標機 在tornado菜單Tools Target Server

54、 Configure 在彈出窗口中 首先給目標服務器命名 在Target Servers Property中,選擇中,選擇Back End, 并在Available Back中選擇中選擇wdbrpc,在,在Target Ip/Address中輸入目標機中輸入目標機IP嵌入式操作系統(tǒng)嵌入式操作系統(tǒng) 在Target Servers Property中,選擇中,選擇Core File and Symbols,選擇,選擇File為為BSP目標文件所在目錄的目標文件所在目錄的 VxWorks Launch嵌入式操作系統(tǒng)嵌入式操作系統(tǒng) 點擊圖形按鈕中下拉框,選擇目標機,即可嵌入式操作系統(tǒng) Launch s

55、hell嵌入式操作系統(tǒng)演示從網(wǎng)絡方式啟動可能失敗的原因 非正確的網(wǎng)卡驅(qū)動 防火墻設置 IP設置設置 操作系統(tǒng)映像路徑 用戶名和密碼嵌入式操作系統(tǒng)Bootable Application代碼組成代碼組成 當創(chuàng)建可啟動的應用時,在 Workspace窗口的窗口的Files欄欄 中,可以看到:嵌入式操作系統(tǒng) linkSyms.c 動態(tài)生成的配置文件,用來獲得正確的 symbols references prjConfig.c 動態(tài)生成的配置文件 包含VxWorks中當前包含的各個組件的初始 化代碼 romInit.s bootrom的入口代碼的入口代碼嵌入式操作系統(tǒng) romStart.c 將VxWo

56、rks映像裝入RAM sysALib.s 包含系統(tǒng)開始運行的代碼 sysLib.c 包含體系結(jié)構(gòu)相關的一些例程 usrAppInit.c 應用程序的初始化入口嵌入式操作系統(tǒng)3.5 配置VxWorks的組件 打開Workspace中的VxWorks,可以看到當前 VxWorks的配置情況的配置情況 黑色:當前已經(jīng)選用的組件 在配置過程中,如果知道組件的部分信息,可 以根據(jù)該信息查找所屬的組件 例如嵌入式操作系統(tǒng)嵌入式操作系統(tǒng)獲得組件的屬性 雙擊感興趣的組件 例如:嵌入式操作系統(tǒng)增加/刪除一個組件 在感興趣的組件上。使用右鍵 對于當前沒有包含的組件,使用Include 增增 加 對于當前已經(jīng)包含的

57、組建,使用Exclude刪 除 如果組件中還包括其他組件(顯示為+,-),將 會顯示一個選擇框,根據(jù)需要打勾嵌入式操作系統(tǒng) 有的組件目錄中包含若干個不相容的選項,只 能選擇其中一個,例如嵌入式操作系統(tǒng)修改組件的參數(shù) 對于感興趣的組件,有些參數(shù)可以修改,例如嵌入式操作系統(tǒng)估計已有組件的大小 在項目上:右鍵 Properties size嵌入式操作系統(tǒng)作業(yè) 利用VMware搭建一個交叉開發(fā)環(huán)境,并編寫一 個test函數(shù)(test函數(shù)的功能是:打印“This is xxxs homework”),將其添加到),將其添加到VxWorks映像映像 中,在shell下運行,將運行結(jié)果粘貼到作業(yè)中 (粘貼內(nèi)

58、容如下頁所示)。并找到啟動過程中的 顯示信息所在源代碼的位置,順便嘗試一下修改 VxWorks映像加載到內(nèi)存的地址,重新編譯后,映像加載到內(nèi)存的地址,重新編譯后, 觀察修改前后啟動顯示部分哪里有變化?嵌入式操作系統(tǒng)運行信息嵌入式操作系統(tǒng)3.4 創(chuàng)建一個downloadable application module 什么是Downloadable application module 它是可動態(tài)加載的應用程序目標文件 可通過網(wǎng)口或串口加載到目標機上與目標機中已存在 的bootable image動態(tài)鏈接后運行動態(tài)鏈接后運行嵌入式操作系統(tǒng)作為演示,我們創(chuàng)建一個downloable的應用程序模塊,并

59、讓其運行在目標機仿真器上嵌入式操作系統(tǒng)確定project名與路徑嵌入式操作系統(tǒng)選擇工具鏈(toolchain)工具鏈是一套用來建造針對特定目標機 針對目標仿真器,默認的工具鏈名字形式應用的交叉開發(fā)工具 是SIMhostOsgnuTornado提供的工具鏈是基于GNU的預處 對NT主機是SIMNTgnu理、編譯、匯編和鏈接器嵌入式操作系統(tǒng)確認所做的選擇嵌入式操作系統(tǒng)Workspace0和example1的信息窗口嵌入式操作系統(tǒng)嵌入式操作系統(tǒng)添加源文件 第一步:添加源文件到開發(fā)目錄中 第二步:將這個源文件加入到example1中嵌入式操作系統(tǒng)第一步:添加源文件到開發(fā)目錄中從Tornado的安裝目錄

60、下:(安裝目錄)targetsrcdemostart拷貝源文件到開發(fā)目錄中D:VxWorks_examples嵌入式操作系統(tǒng)右鍵嵌入式操作系統(tǒng)加入的源文件 源文件所依賴的外部文件 即將由源文件所產(chǎn)生的目標文件cobble.c產(chǎn)生的目標文件 Tornado自動為example1生成的目標文件, 包含所有目標文件嵌入式操作系統(tǒng)Build project 首先預覽一下默認的build設置編譯器、匯編器、鏈接器選項雙擊 宏Makefile默認規(guī)則嵌入式操作系統(tǒng) 根據(jù)上述默認規(guī)則,Build example1右鍵嵌入式操作系統(tǒng)嵌入式操作系統(tǒng)假如在源文件中有錯誤 例如,在cobble.c中不小心使用了“/” 在build

溫馨提示

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

評論

0/150

提交評論