




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、嵌入式系統(tǒng)課件第1頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三概述 Boot Loader 就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過(guò)這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。通常,Boot Loader 是嚴(yán)重地依賴(lài)于硬件而實(shí)現(xiàn)的,特別是在嵌入式世界。因此,在嵌入式世界里建立一個(gè)通用的 Boot Loader 幾乎是不可能的。盡管如此,我們?nèi)匀豢梢詫?duì) Boot Loader 歸納出一些通用的概念來(lái),以指導(dǎo)用戶(hù)特定的 Boot Loader 設(shè)計(jì)與實(shí)現(xiàn)。 第2頁(yè),共40頁(yè),2
2、022年,5月20日,3點(diǎn)10分,星期三 Boot Loader(啟動(dòng))代碼類(lèi)似于PC的BIOS(基本輸入輸出系統(tǒng)),它從系統(tǒng)上電或復(fù)位接管CPU,所有的CPU通常都是從某個(gè)由CPU制造商預(yù)先安排好的地址上取指令,基于ARM7TDMI Core 的CPU在復(fù)位時(shí)從地址0 x00000000取他的第一條指令。而基于CPU構(gòu)建的嵌入式系統(tǒng)都有某種類(lèi)型的固態(tài)存儲(chǔ)設(shè)備(例如:ROM、EEPROM、或FLASH等)被映射到這個(gè)預(yù)先安排的地址上,因此在系統(tǒng)加電后,CPU將首先執(zhí)行Boot Loader程序。第3頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三Boot Loader的主要任務(wù) 第4頁(yè)
3、,共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三7.2 Boot Loader與嵌入式系統(tǒng)關(guān)系一個(gè)同時(shí)裝有Boot Loader、內(nèi)核啟動(dòng)參數(shù)、內(nèi)核映像和根文件系統(tǒng)映像的固態(tài)存儲(chǔ)設(shè)備的典型空間分配結(jié)構(gòu)圖如下圖所示: 第5頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三7.2.1 Boot Loader的操作模式大多數(shù) Boot Loader 都包含兩種不同的操作模式:?jiǎn)?dòng)加載模式和下載模式,這種區(qū)別僅對(duì)于開(kāi)發(fā)人員才有意義。但從最終用戶(hù)的角度看,Boot Loader 的作用就是用來(lái)加載操作系統(tǒng),而并不存在所謂的啟動(dòng)加載模式與下載工作模式的區(qū)別。 第6頁(yè),共40頁(yè),2022年,5月
4、20日,3點(diǎn)10分,星期三啟動(dòng)加載(Boot loading)模式: 這種模式也稱(chēng)為自主(Autonomous)模式。也即 Boot Loader 從目標(biāo)機(jī)上的某個(gè)固態(tài)存儲(chǔ)設(shè)備上將操作系統(tǒng)加載到 RAM 中運(yùn)行,整個(gè)過(guò)程并沒(méi)有用戶(hù)的介入。這種模式是 Boot Loader 的正常工作模式,因此在嵌入式產(chǎn)品發(fā)布的時(shí)侯,Boot Loader 顯然必須工作在這種模式下。 第7頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三下載(Downloading)模式 在這種模式下,目標(biāo)機(jī)上的 Boot Loader 將通過(guò)串口連接或網(wǎng)絡(luò)連接等通信手段從主機(jī)(Host)下載文件,比如:下載內(nèi)核映像和根
5、文件系統(tǒng)映像等。從主機(jī)下載的文件通常首先被 Boot Loader 保存到目標(biāo)機(jī)的 RAM 中,然后再被 Boot Loader 寫(xiě)到目標(biāo)機(jī)上的FLASH 類(lèi)固態(tài)存儲(chǔ)設(shè)備中。Boot Loader 的這種模式通常在第一次安裝內(nèi)核與根文件系統(tǒng)時(shí)被使用;此外,以后的系統(tǒng)更新也會(huì)使用 Boot Loader 的這種工作模式。工作于這種模式下的 Boot Loader 通常都會(huì)向它的終端用戶(hù)提供一個(gè)簡(jiǎn)單的命令行接口。 第8頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三像 Blob 或 U-Boot 等這樣功能強(qiáng)大的 Boot Loader 通常同時(shí)支持這兩種工作模式,而且允許用戶(hù)在這兩種工作
6、模式之間進(jìn)行切換。比如,Blob 在啟動(dòng)時(shí)處于正常的啟動(dòng)加載模式,但是它會(huì)延時(shí) 10 秒等待終端用戶(hù)按下任意鍵而將 blob 切換到下載模式。如果在 10 秒內(nèi)沒(méi)有用戶(hù)按鍵,則 blob 繼續(xù)啟動(dòng) Linux 內(nèi)核。 第9頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三控制 Boot Loader 的設(shè)備或機(jī)制主機(jī)和目標(biāo)機(jī)之間一般通過(guò)串口建立連接,Boot Loader 軟件在執(zhí)行時(shí)通常會(huì)通過(guò)串口來(lái)進(jìn)行 I/O,比如:輸出打印信息到串口,從串口讀取用戶(hù)控制字符等。 第10頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三BootLoader 與主機(jī)之間進(jìn)行文件傳輸所用的通信設(shè)備及
7、協(xié)議 最常見(jiàn)的情況就是,目標(biāo)機(jī)上的 Boot Loader 通過(guò)串口與主機(jī)之間進(jìn)行文件傳輸,傳輸協(xié)議通常是 xmodemymodemzmodem 協(xié)議中的一種。但是,串口傳輸?shù)乃俣仁怯邢薜?,因此通過(guò)以太網(wǎng)連接并借助 TFTP 協(xié)議來(lái)下載文件是個(gè)更好的選擇。 此外,在論及這個(gè)話(huà)題時(shí),主機(jī)方所用的軟件也要考慮。比如,在通過(guò)以太網(wǎng)連接和 TFTP 協(xié)議來(lái)下載文件時(shí),主機(jī)方必須有一個(gè)軟件用來(lái)的提供 TFTP 服務(wù)。 第11頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三7.3 Boot Loader的主要功能和典型結(jié)構(gòu) 首先我們做一個(gè)假定,那就是:假定內(nèi)核映像與根文件系統(tǒng)映像都被加載到 RAM
8、 中運(yùn)行。之所以提出這樣一個(gè)假設(shè)前提是因?yàn)?,在嵌入式系統(tǒng)中內(nèi)核映像與根文件系統(tǒng)映像也可以直接在 ROM 或 Flash 這樣的固態(tài)存儲(chǔ)設(shè)備中直接運(yùn)行。但這種做法無(wú)疑是以運(yùn)行速度的犧牲為代價(jià)的。 第12頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三 從操作系統(tǒng)的角度看,Boot Loader 的總目標(biāo)就是正確地調(diào)用內(nèi)核來(lái)執(zhí)行。 由于 Boot Loader 的實(shí)現(xiàn)依賴(lài)于 CPU 的體系結(jié)構(gòu),因此大多數(shù) Boot Loader 都分為 stage1 和 stage2 兩大部分。依賴(lài)于 CPU 體系結(jié)構(gòu)的代碼,比如設(shè)備初始化代碼等,通常都放在 stage1 中,而且通常都用匯編語(yǔ)言來(lái)實(shí)現(xiàn),
9、以達(dá)到短小精悍的目的。而 stage2 則通常用C語(yǔ)言來(lái)實(shí)現(xiàn),這樣可以實(shí)現(xiàn)給復(fù)雜的功能,而且代碼會(huì)具有更好的可讀性和可移植性。 第13頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三Boot Loader 的 stage1 通常包括以下步驟(以執(zhí)行的先后順序):硬件設(shè)備初始化。為加載 Boot Loader 的 stage2 準(zhǔn)備 RAM 空間??截?Boot Loader 的 stage2 到 RAM 空間中。設(shè)置好堆棧。跳轉(zhuǎn)到 stage2 的 C 入口點(diǎn)。 第14頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三Boot Loader 的 stage2 通常包括以下步驟(以
10、執(zhí)行的先后順序): 初始化本階段要使用到的硬件設(shè)備。檢測(cè)系統(tǒng)內(nèi)存映射(memory map)。將 kernel 映像和根文件系統(tǒng)映像從 flash 上讀到 RAM 空間中。為內(nèi)核設(shè)置啟動(dòng)參數(shù)。調(diào)用內(nèi)核。 第15頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三7.3.1 Boot Loader的階段一1 基本的硬件初始化 這是 Boot Loader 一開(kāi)始就執(zhí)行的操作,其目的是為 stage2 的執(zhí)行以及隨后的 kernel 的執(zhí)行準(zhǔn)備好一些基本的硬件環(huán)境。它通常包括以下步驟(以執(zhí)行的先后順序): 第16頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三1 屏蔽所有的中斷。為中斷
11、提供服務(wù)通常是 OS 設(shè)備驅(qū)動(dòng)程序的責(zé)任,因此在 Boot Loader 的執(zhí)行全過(guò)程中可以不必響應(yīng)任何中斷。中斷屏蔽可以通過(guò)寫(xiě) CPU 的中斷屏蔽寄存器或狀態(tài)寄存器(比如 ARM 的 CPSR 寄存器)來(lái)完成。 2 設(shè)置 CPU 的速度和時(shí)鐘頻率。 3 RAM 初始化。包括正確地設(shè)置系統(tǒng)的內(nèi)存控制器的功能寄存器以及各內(nèi)存庫(kù)控制寄存器等。 4 初始化 LED。典型地,通過(guò) GPIO 來(lái)驅(qū)動(dòng) LED,其目的是表明系統(tǒng)的狀態(tài)是 OK 還是 Error。如果板子上沒(méi)有 LED,那么也可以通過(guò)初始化 UART 向串口打印 Boot Loader 的 Logo 字符信息來(lái)完成這一點(diǎn)。 5 關(guān)閉 CPU
12、內(nèi)部指令數(shù)據(jù) cache。 第17頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三2 為加載 stage2 準(zhǔn)備 RAM 空間 為了獲得更快的執(zhí)行速度,通常把 stage2 加載到 RAM 空間中來(lái)執(zhí)行,因此必須為加載 Boot Loader 的 stage2 準(zhǔn)備好一段可用的 RAM 空間范圍。 由于 stage2 通常是 C 語(yǔ)言執(zhí)行代碼,因此在考慮空間大小時(shí),除了 stage2 可執(zhí)行映象的大小外,還必須把堆??臻g也考慮進(jìn)來(lái)。此外,空間大小最好是 memory page 大小(通常是 4KB)的倍數(shù)。一般而言,1M 的 RAM 空間已經(jīng)足夠了。具體的地址范圍可以任意安排,比如 b
13、lob 就將它的 stage2 可執(zhí)行映像安排到從系統(tǒng) RAM 起始地址 0 xc0200000 開(kāi)始的 1M 空間內(nèi)執(zhí)行。但是,將 stage2 安排到整個(gè) RAM 空間的最頂 1MB(也即(RamEnd-1MB) - RamEnd)是一種值得推薦的方法。 第18頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三為了后面的敘述方便,這里把所安排的 RAM 空間范圍的大小記為:stage2_size(字節(jié)),把起始地址和終止地址分別記為:stage2_start 和 stage2_end(這兩個(gè)地址均以 4 字節(jié)邊界對(duì)齊)。因此: stage2_endstage2_startstage2
14、_size 第19頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三另外,還必須確保所安排的地址范圍的的確確是可讀寫(xiě)的 RAM 空間,因此,必須對(duì)你所安排的地址范圍進(jìn)行測(cè)試。具體的測(cè)試方法可以采用類(lèi)似于 blob 的方法,也即:以 memory page 為被測(cè)試單位,測(cè)試每個(gè) memory page 開(kāi)始的兩個(gè)字是否是可讀寫(xiě)的。為了后面敘述的方便,我們記這個(gè)檢測(cè)算法為:test_mempage,其具體步驟如下: 第20頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三1 先保存 memory page 一開(kāi)始兩個(gè)字的內(nèi)容。 2 向這兩個(gè)字中寫(xiě)入任意的數(shù)字。比如:向第一個(gè)字寫(xiě)入 0
15、 x55,第 2 個(gè)字寫(xiě)入 0 xaa。 3 立即將這兩個(gè)字的內(nèi)容讀回。顯然,我們讀到的內(nèi)容應(yīng)該分別是 0 x55 和 0 xaa。如果不是,則說(shuō)明這個(gè) memory page 所占據(jù)的地址范圍不是一段有效的 RAM 空間。 4 再向這兩個(gè)字中寫(xiě)入任意的數(shù)字。比如:向第一個(gè)字寫(xiě)入 0 xaa,第 2 個(gè)字中寫(xiě)入 0 x55。 第21頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三3-2 操作系統(tǒng)相關(guān)的概念5 然后,立即將這兩個(gè)字的內(nèi)容立即讀回。顯然,我們讀到的內(nèi)容應(yīng)該分別是 0 xaa 和 0 x55。如果不是,則說(shuō)明這個(gè) memory page 所占據(jù)的地址范圍不是一段有效的 RAM
16、 空間。 6 恢復(fù)這兩個(gè)字的原始內(nèi)容。測(cè)試完畢。為了得到一段干凈的 RAM 空間范圍,我們也可以將所安排的 RAM 空間范圍進(jìn)行清零操作。 第22頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三3、拷貝 stage2 到 RAM 中 拷貝時(shí)要確定兩點(diǎn):(1) stage2 的可執(zhí)行映象在固態(tài)存儲(chǔ)設(shè)備的存放起始地址和終止地址;(2) RAM 空間的起始地址。 第23頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三4 、設(shè)置堆棧指針 sp 堆棧指針的設(shè)置是為了執(zhí)行 C 語(yǔ)言代碼作好準(zhǔn)備。通常我們可以把 sp 的值設(shè)置為(stage2_end-4),也即在所安排的那個(gè) 1MB 的 R
17、AM 空間的最頂端(堆棧向下生長(zhǎng))。 此外,在設(shè)置堆棧指針 sp 之前,也可以關(guān)閉 led 燈,以提示用戶(hù)我們準(zhǔn)備跳轉(zhuǎn)到 stage2。 第24頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三5 、跳轉(zhuǎn)到 stage2 的 C 入口點(diǎn) 在上述一切都就緒后,就可以跳轉(zhuǎn)到 Boot Loader 的 stage2 去執(zhí)行了。比如,在 ARM 系統(tǒng)中,這可以通過(guò)修改 PC 寄存器為合適的地址來(lái)實(shí)現(xiàn)。 第25頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三bootloader 的 stage2 可執(zhí)行映象剛被拷貝到 RAM 空間時(shí)的系統(tǒng)內(nèi)存布局第26頁(yè),共40頁(yè),2022年,5月20日
18、,3點(diǎn)10分,星期三7.3.2 Boot Loader 的 stage2 stage2 的代碼通常用 C 語(yǔ)言來(lái)實(shí)現(xiàn),以便于實(shí)現(xiàn)更復(fù)雜的功能和取得更好的代碼可讀性和可移植性。但是與普通 C 語(yǔ)言應(yīng)用程序不同的是,在編譯和鏈接 boot loader 這樣的程序時(shí),我們不能使用 glibc 庫(kù)中的任何支持函數(shù)。 這就帶來(lái)一個(gè)問(wèn)題,那就是從那里跳轉(zhuǎn)進(jìn) main() 函數(shù)呢?直接把 main() 函數(shù)的起始地址作為整個(gè) stage2 執(zhí)行映像的入口點(diǎn)或許是最直接的想法。但是這樣做有兩個(gè)缺點(diǎn):1)無(wú)法通過(guò)main() 函數(shù)傳遞函數(shù)參數(shù);2)無(wú)法處理 main() 函數(shù)返回的情況。 第27頁(yè),共40頁(yè),
19、2022年,5月20日,3點(diǎn)10分,星期三 一種更為巧妙的方法是利用 trampoline(彈簧床)的概念。也即,用匯編語(yǔ)言寫(xiě)一段trampoline 小程序,并將這段 trampoline 小程序來(lái)作為 stage2 可執(zhí)行映象的執(zhí)行入口點(diǎn)。然后我們可以在 trampoline 匯編小程序中用 CPU 跳轉(zhuǎn)指令跳入 main() 函數(shù)中去執(zhí)行;而當(dāng) main() 函數(shù)返回時(shí),CPU 執(zhí)行路徑顯然再次回到我們的 trampoline 程序。簡(jiǎn)而言之,這種方法的思想就是:用這段 trampoline 小程序來(lái)作為 main() 函數(shù)的外部包裹(external wrapper)。 第28頁(yè),共4
20、0頁(yè),2022年,5月20日,3點(diǎn)10分,星期三trampoline 程序示例(來(lái)自blob): .text .globl _trampoline _trampoline: bl main /* if main ever returns we just call it again */ b _trampoline 可以看出,當(dāng) main() 函數(shù)返回后,我們又用一條跳轉(zhuǎn)指令重新執(zhí)行 trampoline 程序當(dāng)然也就重新執(zhí)行 main() 函數(shù),這也就是 trampoline(彈簧床)一詞的意思所在。 第29頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三1、初始化本階段要使用到的硬件
21、設(shè)備 這通常包括:(1)初始化至少一個(gè)串口,以便和終端用戶(hù)進(jìn)行 I/O 輸出信息;(2)初始化計(jì)時(shí)器等。 在初始化這些設(shè)備之前,也可以重新把 LED 燈點(diǎn)亮,以表明我們已經(jīng)進(jìn)入 main() 函數(shù)執(zhí)行。 設(shè)備初始化完成后,可以輸出一些打印信息,程序名字字符串、版本號(hào)等。第30頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三 2 檢測(cè)系統(tǒng)的內(nèi)存映射(memory map) 所謂內(nèi)存映射就是指在整個(gè) 4GB 物理地址空間中有哪些地址范圍被分配用來(lái)尋址系統(tǒng)的 RAM 單元。比如,在 SA-1100 CPU 中,從 0 xC000,0000 開(kāi)始的 512M 地址空間被用作系統(tǒng)的 RAM 地址
22、空間,而在 Samsung S3C44B0X CPU 中,從 0 x0c00,0000 到 0 x1000,0000 之間的 64M 地址空間被用作系統(tǒng)的 RAM 地址空間。第31頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三雖然 CPU 通常預(yù)留出一大段足夠的地址空間給系統(tǒng) RAM,但是在搭建具體的嵌入式系統(tǒng)時(shí)卻不一定會(huì)實(shí)現(xiàn) CPU 預(yù)留的全部 RAM 地址空間。也就是說(shuō),具體的嵌入式系統(tǒng)往往只把 CPU 預(yù)留的全部 RAM 地址空間中的一部分映射到 RAM 單元上,而讓剩下的那部分預(yù)留 RAM 地址空間處于未使用狀態(tài)。 第32頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期
23、三由于上述這個(gè)事實(shí),因此 Boot Loader 的 stage2 必須在它想干點(diǎn)什么 (比如,將存儲(chǔ)在 flash 上的內(nèi)核映像讀到 RAM 空間中) 之前檢測(cè)整個(gè)系統(tǒng)的內(nèi)存映射情況,也即它必須知道 CPU 預(yù)留的全部 RAM 地址空間中的哪些被真正映射到 RAM 地址單元,哪些是處于 unused 狀態(tài)的。 第33頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三(1) 內(nèi)存映射的描述 用如下數(shù)據(jù)結(jié)構(gòu)來(lái)描述 RAM 地址空間中的一段連續(xù)(continuous)的地址范圍: 這段 RAM 地址空間中的連續(xù)地址范圍可以處于兩種狀態(tài)之一:(1)used=1,則說(shuō)明這段連續(xù)的地址范圍已被實(shí)現(xiàn)
24、,也即真正地被映射到 RAM 單元上。(2)used=0,則說(shuō)明這段連續(xù)的地址范圍并未被系統(tǒng)所實(shí)現(xiàn),而是處于未使用狀態(tài)。 第34頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三3 加載內(nèi)核映像和根文件系統(tǒng)映像 (1) 規(guī)劃內(nèi)存占用的布局 這里包括兩個(gè)方面: (1)內(nèi)核映像所占用的內(nèi)存范圍; (2)根文件系統(tǒng)所占用的內(nèi)存范圍。 在規(guī)劃內(nèi)存占用的布局時(shí),主要考慮基地址和映像的大小兩個(gè)方面。 第35頁(yè),共40頁(yè),2022年,5月20日,3點(diǎn)10分,星期三對(duì)于內(nèi)核映像,一般將其拷貝到從(MEM_START0 x8000) 這個(gè)基地址開(kāi)始的大約1MB大小的內(nèi)存范圍內(nèi)(嵌入式 Linux 的內(nèi)核一
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 部編初中歷史2025年新教材七年級(jí)下冊(cè)課后練習(xí)答案
- 2024年計(jì)算機(jī)二級(jí)考試復(fù)習(xí)指南試題及答案
- 提升監(jiān)理工作質(zhì)量的措施試題及答案
- 黔南民族師范學(xué)院《西方文論經(jīng)典導(dǎo)讀》2023-2024學(xué)年第一學(xué)期期末試卷
- 齊齊哈爾理工職業(yè)學(xué)院《數(shù)字界面設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 龍游縣2025年小升初全真數(shù)學(xué)模擬預(yù)測(cè)卷含解析
- 2025年湖北省八市高三二模高考生物試卷試題(含答案詳解)
- 學(xué)期末安全教育主題班會(huì)
- 旅游業(yè)發(fā)展與地理的試題及答案
- 預(yù)防性侵害班會(huì)課件
- 房屋租賃合同 (三)
- 2025年北京電子科技職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試歷年(2019-2024年)真題考點(diǎn)試卷含答案解析
- 2024年安徽寧馬投資有限責(zé)任公司招聘10人筆試參考題庫(kù)附帶答案詳解
- 《變頻器原理及應(yīng)用》課件
- 第16課《有為有不為》公開(kāi)課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
- 新生兒腭裂喂養(yǎng)護(hù)理
- 中醫(yī)養(yǎng)生保健培訓(xùn)
- 2024年職業(yè)素養(yǎng)培訓(xùn)考試題庫(kù)(附答案)
- 第20課 聯(lián)合國(guó)與世界貿(mào)易組織-(說(shuō)課稿)2023-2024學(xué)年九年級(jí)下冊(cè)歷史部編版(安徽)
- 《光電對(duì)抗原理與應(yīng)用》課件第1章
- 網(wǎng)絡(luò)安全題庫(kù)及答案(1000題)
評(píng)論
0/150
提交評(píng)論