




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、【摘要】本文以MPC8378處理器、Linux內(nèi)核及U-boot1.3.4為例,講述了如何在PowerPC架構(gòu)下使用FDT。首先介紹了引入FDT的背景,接著詳細(xì)介紹了FDT的組成及制作。最后介紹了U-boot及內(nèi)核如何支持FDT?!娟P(guān)鍵字】PowerPC,MPC8378,DTS,DTB,F(xiàn)DT,device node,property,compatible1 背景 22 設(shè)備樹的描述方式 22.1 root Node
2、 32.2 chosen 32.3 cpus Node 32.4 System Memory 52.5 Devices 52.5.1 Compatible屬性 62.5.2
3、0; Addressing 62.6 Interrupts and Interrupt Controllers 73 如何制作設(shè)備樹映像 83.1 輸入 83.2 輸出 93.3 命令格式 94
4、; 設(shè)備樹的傳遞途徑 94.1 U-boot對FDT的支持 104.2 如何配置FDT 104.3 如何傳遞設(shè)備樹 105 內(nèi)核如何解析設(shè)備樹 126 設(shè)備樹對驅(qū)動設(shè)計(jì)產(chǎn)生的影響
5、151 背景通常情況下,桌面機(jī)和服務(wù)器可以兼容大部分軟件。最好的結(jié)果就是當(dāng)添加新硬件時(shí),無需重新編譯Linux內(nèi)核。標(biāo)準(zhǔn)的固件接口可以保證bootloader將正確的參數(shù)傳遞給內(nèi)核。PC可以采用bios,PowerPC and Sparc采用Open-Firmware接口。但是對于嵌入式系統(tǒng),軟件差別太大,內(nèi)核本身也是定制的,bootloader只需要傳遞很少的參數(shù),因?yàn)榇蟛糠中畔⒍际怯簿幋a在系統(tǒng)的配置中的。這樣同一個(gè)內(nèi)核映像很難同時(shí)使用在多個(gè)不同的平臺上。早期的PowerPC平臺采用特定的數(shù)據(jù)結(jié)構(gòu)bd_info來傳遞參數(shù),其定義在include/asm-p
6、pc/ppcboot.h,#define來定義特定平臺的數(shù)據(jù)域,但并沒有什么信息來說明當(dāng)前采用的是那個(gè)bd_info結(jié)構(gòu),所以必須保證在內(nèi)核和bootloader中同時(shí)更新,以便保持一致。合并32-bit (arch/ppc) 和 64-bit (arch/ppc64) PowerPC的同時(shí),決定重新整理固件接口,建立新的目錄arch/powerpc,這里所有的平臺必須向內(nèi)核提供Open Firmware風(fēng)格的設(shè)備樹,以便內(nèi)核啟動時(shí)可以獲得當(dāng)前平臺的硬件配置。2 設(shè)備樹的描述方式簡單的說設(shè)備書是一種描述硬件配置信息的數(shù)據(jù)結(jié)構(gòu),包括CPU,內(nèi)存,總線及相關(guān)外設(shè)
7、。內(nèi)核啟動時(shí)可以解析這些信息,以此決定如何配置內(nèi)核及加載那些驅(qū)動。該數(shù)據(jù)結(jié)構(gòu)有一個(gè)單一的根節(jié)點(diǎn)“/”。每個(gè)節(jié)點(diǎn)有個(gè)名字并可以包含多個(gè)子節(jié)點(diǎn)。數(shù)據(jù)的格式遵循IEEE standard 1275。Device tree source (.dts)采用一種易編輯的文本方式來表達(dá)設(shè)備樹,device tree compiler tool (dtc)將.dts轉(zhuǎn)換成binary device tree blob(.dtb)。設(shè)備樹并不是控制系統(tǒng)設(shè)備的唯一方法,比如內(nèi)核對USB和PCI已經(jīng)有非常方便的檢測機(jī)制。/ / the root node an-empty-pro
8、perty; a-child-node array-prop = <0x100 32> string-prop = "hello, world" ; another-child-node binary-prop = 0102CAFE;
9、string-list = "yes","no","maybe" ;Figure 1: Simple example of the .dts file format2.1 root Node設(shè)備樹的起點(diǎn)是根節(jié)點(diǎn),Model和compatible屬性指明了當(dāng)前平臺的名字,格式為<mfg>,<board>:Mfg是vendor,board是板子模型Compatible屬性不一定非得要,但是當(dāng)兩個(gè)系統(tǒng)在硬件配置上基本一致時(shí),這個(gè)參數(shù)可以用于辨別當(dāng)
10、前系統(tǒng)。/ model = "fsl,mpc8377rdb" compatible = "fsl,mpc8377rdb" #address-cells = <1> #size-cells = <1> aliases ethernet0 = &enet0;
11、160; ethernet1 = &enet1; serial0 = &serial0; serial1 = &serial1; /pci0 = &pci0; ; / Child nodes go here;Figure 3
12、: Example system root node2.2 chosen此節(jié)點(diǎn)并不真正代表設(shè)備節(jié)點(diǎn),而是一些虛擬的由bootloader傳遞給內(nèi)核的一些參數(shù),包括bootargs(cmdline)和initrd等。一般由bootloader在啟動內(nèi)核時(shí)添加此節(jié)點(diǎn)。2.3 cpus Nodecpus節(jié)點(diǎn)是root節(jié)點(diǎn)的子節(jié)點(diǎn),對于多核CPU系統(tǒng),每個(gè)CPU有一個(gè)子節(jié)點(diǎn)。Cpus節(jié)點(diǎn)并不需要特別的特性,但是通常習(xí)慣指定#address-cells = <1>和#size-cells = <0>,這指定了
13、各個(gè)CPU節(jié)點(diǎn)的reg屬性的格式,其用于編碼物理CPU號。CPU節(jié)點(diǎn)的格式為cpux,model屬性描述CPU類型,其他的是時(shí)鐘頻率及cache 相關(guān)屬性。cpus #cpus = <1> #address-cells = <1> #size-cells = <0> PowerPC,83770 device_type = "cpu
14、" model = "PowerPC, 8377" reg = <0x0> d-cache-line-size = <32> i-cache-line-size = <32> &
15、#160; d-cache-size = <32768> i-cache-size = <32768> timebase-frequency = <0> bus-frequency = <0> clock-frequency = <0>
16、0; ;Figure 4: cpus nodecpus #cpus = <2> #address-cells = <1> #size-cells = <0> PowerPC,86410 device_type = "cpu"
17、 reg = <0> d-cache-line-size = <20> / 32 bytes i-cache-line-size = <20> / 32 bytes d-cache-size = <8000>
18、 / L1, 32K i-cache-size = <8000> / L1, 32K timebase-frequency = <0> / 33 MHz, from uboot bus-frequency = <0
19、> / From uboot clock-frequency = <0> / From uboot 32-bit; linux,boot-cpu; ; &
20、#160; PowerPC,86411 device_type = "cpu" reg = <1> d-cache-line-size = <20> / 32 bytes i-cache-line-size = <2
21、0> / 32 bytes d-cache-size = <8000> / L1, 32K i-cache-size = <8000> / L1, 32K time
22、base-frequency = <0> / 33 MHz, from uboot bus-frequency = <0> / From uboot clock-frequency = <0> / From uboot &
23、#160; 32-bit; ;2.4 System Memory描述系統(tǒng)內(nèi)存的節(jié)點(diǎn)成為memory node,其為root節(jié)點(diǎn)的子節(jié)點(diǎn),通常只用一個(gè)memory節(jié)點(diǎn)描述系統(tǒng)所有的內(nèi)存范圍,reg屬性用來定義當(dāng)前可用的各個(gè)memory范圍。memory device_type = "memory" reg = <0x00000000 0x40000000>
24、160; / 256MB at 0;Figure 5: Memory node2.5 Devices一系列節(jié)點(diǎn)用于描述系統(tǒng)總線及設(shè)備,每個(gè)總線及設(shè)備在設(shè)備樹種都有自己的節(jié)點(diǎn)。處理器的local bus通常直接作為根節(jié)點(diǎn)的子節(jié)點(diǎn),附著在local bus上的Devices and bridges將作為其子節(jié)點(diǎn)。下圖顯示的PLB bus上的設(shè)備包括interrupt controller, an Ethernet device,及 OPB bridge,OPB總線上有serial devices and a Flash deviceplb
25、; compatible = "simple-bus" #address-cells = <1> #size-cells = <1> ranges; UIC0: interrupt-controller compatible = "ibm,uic-440gp", "ibm,uic&q
26、uot; interrupt-controller; #interrupt-cells = <2> ; ethernet20000 compatible = "ibm,emac-440gp" reg = <0x20000 0x70> interrupt-parent = <&UIC0&g
27、t; interrupts = <0 4> ; opb compatible = "simple-bus" #address-cells = <1> #size-cells = <1>
28、160; ranges = <0x0 0xe0000000 0x20000000> serial0 compatible = "ns16550" reg = <0x0 0x10>
29、160; interrupt-parent = <&UIC0> interrupts = <1 4> ; serial10000 compatible = "ns16550" &
30、#160; reg = <0x10000 0x10> interrupt-parent = <&UIC0> interrupts = <2 4> ; flash1ff00000
31、0; compatible = "amd,s29gl256n", "cfi-flash" reg = <0x1ff00000 0x100000> ; ;Figure 6: Simple System Device Hierarchy2.5.1 Compa
32、tible屬性幾乎每個(gè)設(shè)備都有compatible屬性,OS利用此關(guān)鍵字來確定node所描述的設(shè)備,通常compatible字符串的格式如下:<manufacturer>,<part-num>對于每個(gè)特定的compatible值,需要為該設(shè)備定義一個(gè)device tree binding。有時(shí)候compatible是一系列字符串,如果某個(gè)設(shè)備在寄存器級別和某個(gè)舊設(shè)備兼容,則可以同時(shí)指定多個(gè)字串,這樣OS就知道這兩個(gè)驅(qū)動是兼容的。通常該設(shè)備的compatible字串在前,然后是兼容的舊設(shè)備的字串。2.5.2 Addressing設(shè)備地址
33、由reg屬性指定,其為一系列cell單元。格式如下:reg = <base1 size1 base2 size2 .>每個(gè)reg的實(shí)際大小有父節(jié)點(diǎn)的#address-cells and #size-cells屬性決定,#address-cells是用來指定base address基地址的cells個(gè)數(shù),#size-cells是用來指定region size的cells個(gè)數(shù)。Reg所使用的cells個(gè)數(shù)必須是(#address-cells + #size-cells)的倍數(shù)。Reg定義的是bus address,而非system address,bus address是設(shè)備依賴的總線
34、上的相對地址,或者更專業(yè)的說bus address是相對于父節(jié)點(diǎn)的。Ranges屬性可以將bus address映射到父節(jié)點(diǎn)一級,格式如下:ranges = <addr1 parent1 size1 .>addr為總線地址,寬度為#address-cells,parent是父節(jié)點(diǎn)總線上的地址,寬度為父節(jié)點(diǎn)的#address-cells,size寬度為父節(jié)點(diǎn)的#size-cells。但是當(dāng)總線地址和父節(jié)點(diǎn)地址映射關(guān)系為1:1時(shí),可以簡化映射關(guān)系:ranges;在本示例中,F(xiàn)lash在OPB總線上的地址為0x1ff00000,但OPB總線中,PLB bus address 0xe000
35、0000 映射到了0x0000000 on the OPB bus,因此Flash設(shè)備的地址為0xfff00000。2.6 Interrupts and Interrupt Controllers設(shè)備樹的自然布局很方便描述設(shè)備間的簡單關(guān)系,但是中斷系統(tǒng)是個(gè)比較復(fù)雜的例子??梢詫erial device描述為OPB總線的子節(jié)點(diǎn),但也可以說其是interrupt controller設(shè)備的子節(jié)點(diǎn),那么如何描述呢?目前的規(guī)范是,自然樹的結(jié)構(gòu)適用于描述那些尋址和控制設(shè)備的主要接口,次要連接可以通過phandle屬性來描述相互之間的關(guān)系,其為節(jié)點(diǎn)中的一個(gè)指針,指向另
36、一個(gè)節(jié)點(diǎn)。對于中斷連接,設(shè)備節(jié)點(diǎn)利用interrupt-parent and interrupts屬性來描述到interrupt controller的連接。interrupt-parent是指向描述interrupt controller節(jié)點(diǎn)的指針,interrupts是interrupt controller可以觸發(fā)的一系列中斷信號。Interrupt controller節(jié)點(diǎn)必須定義空屬性interrupt-controller,同時(shí)定義#interrupt-cells,確定幾個(gè)cells描述一個(gè)中斷信號。由于Interrupt controller節(jié)點(diǎn)在設(shè)備樹種被其他節(jié)點(diǎn)鏈接,因此必須
37、定義屬性linux,phandle = <xx>。對于大部分SOC系統(tǒng),通常只有一個(gè)interrupt controller,,但是多個(gè)interrupt controller之間可以級聯(lián)。interrupt controller和設(shè)備之間的關(guān)系就形成了interrupt tree。對于serial device node,interrupt-parent屬性定義了其在中斷樹中與其父節(jié)點(diǎn)的關(guān)系。Interrupts屬性定義了特定的中斷標(biāo)識,其格式取決于中斷樹中父節(jié)點(diǎn)的#interrupt-cells,通常#interrupt-cells為2,這樣第一個(gè)值表示interrupt co
38、ntroller中的硬件中斷編號,第二個(gè)值表示中斷觸發(fā)方式:電平觸發(fā)或者邊沿觸發(fā)。/* IPIC * interrupts cell = <intr #, sense> * sense values match linux IORESOURCE_IRQ_* defines: * sense = 8: Level, low assertion * sense = 2: Edge, high-to-low change */pic700 linux,phandle = <700>
39、0; interrupt-controller; #address-cells = <0> #interrupt-cells = <2> reg = <700 100> built-in; device_type = "ipic"serial4500 device_type = "seria
40、l" compatible = "ns16550" reg = <4500 100> clock-frequency = <0> interrupts = <9 8> interrupt-parent = <700>3 如何制作設(shè)備樹映像Device tree compiler(dtc)負(fù)責(zé)將文本格式的設(shè)
41、備樹轉(zhuǎn)換成OS可以識別的格式。3.1 輸入Dtc接受三種輸入格式:源文件,即device tree source;Blob (dtb),flattened tree format,主要用于檢查現(xiàn)有的DTB映像;FS文件系統(tǒng),/proc/device-tree下面的文件樹目錄,主要用于從當(dāng)前運(yùn)行的內(nèi)核中獲得設(shè)備樹映像。-sh-3.1# ls -al /proc/device-treels -l /proc/device-tree/-r-r-r- 1 root root
42、; 4 Jan 1 00:05 #address-cells-r-r-r- 1 root root 4 Jan 1 00:05 #size-cellsdr-xr-xr-x 2 root
43、0; root 0 Jan 1 00:05 aliasesdr-xr-xr-x 2 root root 0 Jan 1 00:05 chosen-r-r-r- 1 ro
44、ot root 15 Jan 1 00:05 compatibledr-xr-xr-x 3 root root 0 Jan 1 00:05 cpusdr-xr-xr-x
45、 15 root root 0 Jan 1 00:05 immre0000000dr-xr-xr-x 4 root root 0 Jan 1 00:05 localbuse0005
46、000dr-xr-xr-x 2 root root 0 Jan 1 00:05 memory-r-r-r- 1 root root 1 Jan
47、1 00:05 namedr-xr-xr-x 2 root root 0 Jan 1 00:05 pcie000a000dr-xr-xr-x 2 root root
48、160; 0 Jan 1 00:05 redbox-fpga-card0F0000000dr-xr-xr-x 2 root root 0 Jan 1 00:05 redbox-fpga-card1F0000000dr-xr-xr-x 2 root root
49、0; 0 Jan 1 00:05 redbox-fpga-dbstateF0000000dr-xr-xr-x 2 root root 0 Jan 1 00:05 redbox-fpga-miscF0000000ls -l /proc/device-tr
50、ee/immr/e0000000/-r-r-r- 1 root root 4 Jan 1 00:06 #address-cells-r-r-r- 1 root root
51、 4 Jan 1 00:06 #size-cells-r-r-r- 1 root root 4 Jan 1 00:06 bus-frequency-r-r-r- 1 root root
52、0; 11 Jan 1 00:06 compatible-r-r-r- 1 root root 4 Jan 1 00:06 device_typedr-xr-xr-x 2 root root &
53、#160; 0 Jan 1 00:06 ethernet24000dr-xr-xr-x 2 root root 0 Jan 1 00:06 ethernet25000dr-xr-xr-x 2 root r
54、oot 0 Jan 1 00:06 i2c3000dr-xr-xr-x 3 root root 0 Jan 1 00:06 i2c3100dr-xr-xr-x 2 root
55、0; root 0 Jan 1 00:06 interrupt-controller700dr-xr-xr-x 3 root root 0 Jan 1 00:06 mdio24520-r-r-r-
56、0; 1 root root 5 Jan 1 00:06 namedr-xr-xr-x 2 root root 0 Jan 1 00:06 powerb00
57、-r-r-r- 1 root root 12 Jan 1 00:06 ranges-r-r-r- 1 root root 8 Jan 1 00:06 reg
58、dr-xr-xr-x 2 root root 0 Jan 1 00:06 serial4500dr-xr-xr-x 2 root root 0 Jan
59、60; 1 00:06 serial4600dr-xr-xr-x 2 root root 0 Jan 1 00:06 spi7000dr-xr-xr-x 2 root root
60、160; 0 Jan 1 00:06 timer500dr-xr-xr-x 2 root root 0 Jan 1 00:06 usb23000dr-xr-xr-x 2 root root
61、160; 0 Jan 1 00:06 wdt2003.2 輸出Blob (dtb),主要用于從DTS獲得設(shè)備樹映像;source (dts), 當(dāng)輸入?yún)?shù)為Blob (dtb),可以“反匯編”出設(shè)備樹源文件;assembler source (asm),其最終可以編譯成.O文件,可以鏈接到bootloader中或者frrmware image。3.3 命令格式dtc -I <input -format > -O <output -format &
62、gt; -o output-filename -V output_version input_filenamedtc -I dts -O dtb -S 0x3000 -o obj_name.dtb source_name.dts-S 指定的是生成的dtb文件的大小,需要適當(dāng)?shù)財(cái)U(kuò)大以供u-boot 創(chuàng)建/choose節(jié)點(diǎn)時(shí)使用4 設(shè)備樹的傳遞途徑對于Open Firmware (OF)系統(tǒng),prom_init.c中的代碼負(fù)責(zé)解析設(shè)備樹,并將其轉(zhuǎn)化為blob印象。對于無Open Firmware (OF)的系統(tǒng),內(nèi)核可以直接從入口啟動,并接受外部傳遞的flatt
63、ened device tree參數(shù)。對于嵌入式系統(tǒng),此參數(shù)由bootloader提供,或者封裝過的zImage映像提供。4.1 U-boot對FDT的支持U-boot為了支持FDT,專門添加了新的代碼,如下:/Libfdt目錄fdt.hlibfdt.hfdt_support.hfdt_support.c4.2 如何配置FDT通常在板子配置頭文件定義相關(guān)宏,以支持FDT/* Pass open firmware flat tree */#define CONFIG_OF_LIBFDT 1
64、#define CONFIG_OF_BOARD_SETUP 1#define CONFIG_OF_STDOUT_VIA_ALIAS 1CONFIG_OF_BOARD_SETUP宏表示會對設(shè)備樹中的部分參數(shù)進(jìn)行調(diào)整,主要是timebase-frequency,bus-frequency,clock-frequency等參數(shù),在設(shè)備樹配置文件中,這些參數(shù)可能為0,即采用U-boot中的參數(shù)。4.3 如何傳遞設(shè)備樹Lib_ppc/board.c中do_bootm_linux負(fù)責(zé)啟動Linux內(nèi)核。#if defined(CONF
65、IG_OF_LIBFDT)#include <fdt.h>#include <libfdt.h>#include <fdt_support.h>static void fdt_error (const char *msg);static int boot_get_fdt (cmd_tbl_t *cmdtp, int flag, int argc, char *argv, bootm_headers_t *images, char *of_flat_tree, ulong *of_siz
66、e);static int boot_relocate_fdt (struct lmb *lmb, ulong bootmap_base, cmd_tbl_t *cmdtp, int flag, int argc, char *argv, char *of_flat_tree, ulong *of_size);#endif相關(guān)流程如下: 在該流程中,主要從啟動參數(shù)中找出設(shè)備樹,然后在設(shè)備樹中添加chosen 節(jié)點(diǎn), 并將initrd 的地
67、址地址,結(jié)束地址,bootargs,cmd_line 等參數(shù)保存到chosen 節(jié)點(diǎn)中,最后根據(jù)是否支持扁平設(shè)備樹選擇不同的內(nèi)核啟動方式。#if defined(CONFIG_OF_LIBFDT) if (of_flat_tree) /* device tree; boot new style */ /* * Linux Kernel Parameters (pa
68、ssing device tree): * r3: pointer to the fdt, followed by the board info data * r4: physical pointer to the kernel itself * r5: NULL
69、60; * r6: NULL * r7: NULL */ debug (" Booting using OF flat tree./n");
70、; (*kernel) (bd_t *)of_flat_tree, (ulong)kernel, 0, 0, 0); /* does not return */ else#endif /* * Linux Kernel Parameters (passing boar
71、d info data): * r3: ptr to board info data * r4: initrd_start or 0 if no initrd * r5: initrd_end - unused if r4 is 0
72、 * r6: Start of command line string * r7: End of command line string */ debug (" Booting using board
73、 info./n"); (*kernel) (kbd, initrd_start, initrd_end, cmd_start, cmd_end); /* does not return */ 如果未定義CONFIG_OF_LIBFDT或者當(dāng)前bootm命令沒有FDT參數(shù)時(shí)則采用傳統(tǒng)的方式啟動內(nèi)核。啟動命令格式如下:Bootm kernel_addr ramdisk_addr/-
74、 fdt_addr當(dāng)不采用ramdisk時(shí),第二個(gè)參數(shù)為“-”5 內(nèi)核如何解析設(shè)備樹1)首先將從u-boot 傳遞過來的映像基地址和dtb 文件映像基地址保存通用寄存器r30,r31;2)通過調(diào)用machine_init()、early_init_devtree()函數(shù)來獲取內(nèi)核前期初始化所需的bootargs,cmd_line等系統(tǒng)引導(dǎo)參數(shù);3)調(diào)用start_kernel()、setup_arch()、unflatten_device_tree()函數(shù)來解析dtb 文件,構(gòu)建一個(gè)由device_node 結(jié)構(gòu)連接而成的單項(xiàng)鏈表,并使用全局變量allnod
75、es 指針來保存這個(gè)鏈表的頭指針;4)內(nèi)核調(diào)用OF 提供的API 函數(shù)獲取allnodes鏈表信息來初始化內(nèi)核其他子系統(tǒng)、設(shè)備等。 Head_32.S/* * This is where the main kernel code starts. */start_here:。/* * Do early platform-specific initialization, * and set up the MMU. */ mr r3,r31
76、60; mr r4,r30 bl machine_init/* * Find out what kind of machine we're on and save any data we need * from the early boot process (devtree is copied on pmac by prom_init(). * This is called very early on the boot process, after
77、a minimal * MMU environment has been set up but before MMU_init is called. */void _init machine_init(unsigned long dt_ptr, unsigned long phys) /* If btext is enabled, we might have a BAT setup for early display, * thus we do enable some very basic
78、udbg output */#ifdef CONFIG_BOOTX_TEXT udbg_putc = btext_drawchar;#endif /* Do some early initialization based on the flat device tree */ early_init_devtree(_va(dt_ptr);/* Warning, IO base is not yet inited */void _init setup_arch(char *
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第四節(jié)醛和酮的化學(xué)性質(zhì)一加成反應(yīng)02課件
- 2025安徽蕪湖市市屬國有企業(yè)招聘74人筆試歷年參考題庫附帶答案詳解
- 智能駕駛技術(shù)發(fā)展趨勢及市場前景
- 化肥調(diào)控政策解讀課件
- 2024年甘肅省臨夏縣人民醫(yī)院公開招聘護(hù)理工作人員試題帶答案詳解
- 臨海市村衛(wèi)生室標(biāo)準(zhǔn)化建設(shè)(2020-2022年)實(shí)施方案
- 中國重卡汽車行業(yè)投資研究分析及發(fā)展前景預(yù)測報(bào)告
- 病原生物學(xué)教學(xué)平臺課件
- 2025年中國運(yùn)動健身器材行業(yè)發(fā)展運(yùn)行現(xiàn)狀及投資潛力預(yù)測報(bào)告
- 真空熱處理項(xiàng)目可行性研究報(bào)告
- 2025屆高三英語一輪復(fù)習(xí)人教版(2019)選擇性必修第一冊單詞默寫紙
- 第二單元 主題活動一《我是聰明的消費(fèi)者》(說課稿)-2023-2024學(xué)年四年級下冊綜合實(shí)踐活動內(nèi)蒙古版
- 2024年物聯(lián)網(wǎng)平臺開發(fā)與運(yùn)營服務(wù)合同3篇
- 建設(shè)單位安全質(zhì)量管理制度
- 《教育系統(tǒng)重大事故隱患判定指南》知識培訓(xùn)
- 2022-2023學(xué)年天津市濱海新區(qū)高一(下)期末語文試卷
- 2024年中國安全應(yīng)急產(chǎn)業(yè)發(fā)展研究報(bào)告
- 大學(xué)物理實(shí)驗(yàn)-拓展提高篇 課件 實(shí)驗(yàn)3.9-太陽能電池特性實(shí)驗(yàn)
- 2024年優(yōu)居房產(chǎn)加盟業(yè)務(wù)保密協(xié)議3篇
- 中國當(dāng)代文學(xué)專題-003-國開機(jī)考復(fù)習(xí)資料
- 企業(yè)自然災(zāi)害安全應(yīng)急預(yù)案
評論
0/150
提交評論