版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
《嵌入式操作系統(tǒng)》實(shí)驗(yàn)報(bào)告《嵌入式操作系統(tǒng)》試驗(yàn)報(bào)告
班級(jí)計(jì)算機(jī)
學(xué)號(hào)
姓名
指導(dǎo)老師莊旭菲
工業(yè)高校信息工程學(xué)院計(jì)算機(jī)系
2024年6月
試驗(yàn)一Linux核移植與編譯試驗(yàn)
1.試驗(yàn)?zāi)康?/p>
?了解Linux核相關(guān)學(xué)問與核結(jié)構(gòu)
?了解Linux核在ARM設(shè)備上移植的基本步驟和方法
?把握Linux核裁剪與定制的基本方法
2.試驗(yàn)容
?分析Linux核的基本結(jié)構(gòu),了解Linux核在ARM設(shè)備上移植的一些基本步驟及常識(shí)。
?學(xué)習(xí)Linux核裁剪定制的基本配置方法,利用UP-Magic210型設(shè)備配套Linux核進(jìn)行
自定義功能(如helloworld顯示)的添加,并重新編譯核源碼,生成核壓縮文件zImage,下載到UP-Magic210型設(shè)備中測試。
3.試驗(yàn)步驟
試驗(yàn)名目:/UP-Magic210/SRC/kernel/linux-/
編譯核:在宿主機(jī)端為UP-Magic210設(shè)備的Linux核編寫簡潔的測試驅(qū)動(dòng)(核)程序helloworld.c并修改核名目中相關(guān)文件,添加對測試驅(qū)動(dòng)程序的支持。
(1)、使用vim編輯器手動(dòng)編寫試驗(yàn)代碼helloworld.c
helloworld.c如如下:
#include
#include
MODULE_LICENSE("DualBSD/GPL");
//驅(qū)動(dòng)程序入口函數(shù)
staticinthello_init(void)
{
printk(KERN_ALERT"##############Hello,world############\n");
return0;
}
//驅(qū)動(dòng)程序出口函數(shù)
staticvoidhello_exit(void)
{
printk(KERN_ALERT"###############Goodbye,world#########\n");
}
module_init(hello_init);
module_exit(hello_exit);
有關(guān)驅(qū)動(dòng)程序的編寫規(guī),請參考課程教材,本試驗(yàn)只在編寫簡潔的驅(qū)動(dòng)(核)程序并加入到Linux核名目樹中,使用戶熟識(shí)編譯核的過程。該驅(qū)動(dòng)程序是向終端輸出相關(guān)程序信息。編寫好helloworld.c后將其拷貝到核源碼樹的drivers/char/名目下。
#cphelloworld.c/UP-Magic210/SRC/kernel/linux-/drivers/char/(2)、進(jìn)入試驗(yàn)核源碼名目修改driver/char/名目下的Kconfig文件,根據(jù)Kconfig語法添加helloworld程序的菜單支持
#cdUP-Magic210/SRC/kernel/linux-/
#vidrivers/char/Kconfig
例如:在Kconfig文件中的source“driver/char/hw_random/Kconfig”下面添加如下:source“driver/char/hw_random/Kconfig”
configHELLO_MODULE
bool"HelloWorldTest"
dependsonCPU_S5PV210
help
ThisisademototestkernelexperimentOnUP-Magic210.
(3)、進(jìn)入試驗(yàn)核源碼名目修改driver/char/名目下的Makefile文件,根據(jù)核中Makefile語法添加helloworld程序的編譯支持
#vidrivers/char/Makefile
在Makefile中(大約在91行)添加如下一行
obj-$(CONFIG_TOSHIBA)+=toshiba.o
obj-$(CONFIG_I8K)+=i8k.o
obj-$(CONFIG_DS1620)+=ds1620.o
obj-$(CONFIG_HW_RANDOM)+=hw_random/
obj-$(CONFIG_HELLO_MODULE)+=helloworld.o
obj-$(CONFIG_PPDEV)+=ppdev.o
(4)、運(yùn)行makemenuconfig配置核對helloworld程序的支持:
#makedistclean
#makemenuconfig
先加載核配置單,如圖:
然后進(jìn)入到DeviceDrivers--->菜單中如圖:
進(jìn)入到Characterdevices--->如圖:
進(jìn)入該菜單會(huì)發(fā)覺HelloWorldTest選項(xiàng),按下空格將其靜態(tài)編譯進(jìn)核
退出保存核配置
(5)、重新編譯核
在核源碼的頂層名目下編譯核
#make
scripts/kconfig/conf-sarch/arm/Kconfig
CHKinclude/linux/version.h
CHKinclude/generated/utsrelease.h
make:“include/generated/mach-types.h”是最新的。
CALLscripts/checksyscalls.sh
CHKinclude/generated/pile.h
CCdrivers/char/helloworld.o
LDdrivers/char/built-in.o
LDdrivers/built-in.o
LDvmlinux.o
MODPOSTvmlinux.o
初次編譯核源碼,由核代碼浩大,所需較長時(shí)間(大約幾分鐘至10幾分鐘不等)。編譯勝利后會(huì)在核源碼名目的arch/arm/boot/名目下生成核壓縮文件zImage。
#lsarch/arm/boot/zImage
arch/arm/boot/zImage
#
(6)、將新生成的核鏡像文件zImage燒寫到UP-Magic210型設(shè)備中,這里不在贅述(燒寫步驟可以參考文檔“UP-Magic210出廠程序燒寫手冊(LINUX)V1.0.pdf”第23頁)。新核燒寫勝利后啟動(dòng)UP-Magic210型系統(tǒng),可以在串口終端中查看到Linux核在啟動(dòng)過程中打印出來的如下信息:
S3C_LCDclockgotenabled::133.000Mhz
Window-FB1:map_video_memory:clearff600000:00096000
FB1:map_video_memory:dma=57100000cpu=ff600000size=00096000
Console:switchingtocolourframebufferdevice80x30
fb-1069494052:framebufferdevice
###################Hello,world###################
ppdev:user-spaceparallelportdriver
s3c-uart.0:ttySAC0atMMIO0x7f005000(irq=37)isaS3C
s3c-uart.1:ttySAC1atMMIO0x7f005400(irq=38)isaS3C
s3c-uart.2:ttySAC2atMMIO0x7f005800(irq=39)isaS3C
RAMDISKdriverinitialized:16RAMdisksof4096Ksize1024blocksize
loop:loaded(max8devices)
nbd:registereddeviceatmajor43
dm9000EthernetDriver
eth0:dm9000atc7866000,c7866002IRQ78MAC:00:22:12:34:56:90
S3CIrDAdriver,(c)2024SamsungElectronics
Linuxvideocaptureinterface:v2.00
可以看到在終端上打印出###################Hello,world###################信息。同樣進(jìn)入ARM系統(tǒng)后也可以通過dmesg命令查看核啟動(dòng)信息。
#dmesg
S3C_LCDclockgotenabled::133.000Mhz
Window-FB1:map_video_memory:clearff600000:00096000
FB1:map_video_memory:dma=57100000cpu=ff600000size=00096000
Console:switchingtocolourframebufferdevice80x30
fb-1069494052:framebufferdevice
###################Hello,world###################ppdev:user-spaceparallelportdriver
s3c-uart.0:ttySAC0atMMIO0x7f005000(irq=37)isaS3C
s3c-uart.1:ttySAC1atMMIO0x7f005400(irq=38)isaS3C
s3c-uart.2:ttySAC2atMMIO0x7f005800(irq=39)isaS3CRAMDISKdriverinitialized:16RAMdisksof4096Ksize1024blocksize4.試驗(yàn)結(jié)果
思索:如何能在Linux系統(tǒng)啟動(dòng)時(shí),輸出顯示自定義的文本信息,請修改Linux核啟動(dòng)代碼,完成此功能。
5.試驗(yàn)中遇到的問題及解決方法
在試驗(yàn)中遇到一些問題,例如在復(fù)制的時(shí)候我記得原來用cp–a/tmp/linux-2.4.18-br.tar.gz就可以了,可這次不行必需要用cp–a/tmp/linux-2.4.18-br.tar.gz./到自己的名目下。不過最終都順當(dāng)解決了問題,在編譯復(fù)習(xí)了makemenuconfig的編譯配置。
試驗(yàn)二根文件系統(tǒng)試驗(yàn)
1.試驗(yàn)?zāi)康?/p>
?了解UP-Magic210魔法師試驗(yàn)套件Linux系統(tǒng)下根文件系統(tǒng)結(jié)構(gòu)
?把握根文件系統(tǒng)的搭建過程
?把握busybox、mkcramfs等工具的使用方法
2.試驗(yàn)容
?使用busybox生成文件系統(tǒng)中的命令部分,使用mkcramfs工具制作CRAMFS格式的
根文件系統(tǒng)。
?分析根文件系統(tǒng)etc名目下重要配置文件的格式及語法,熟識(shí)根文件系統(tǒng)的啟動(dòng)過程3.試驗(yàn)步驟
試驗(yàn)名目:/UP-Magic210/SRC/kernel/linux-/
/UP-Magic210/SRC/rootfs/
一、在核中添加文件系統(tǒng)類型支持
(1)、進(jìn)入宿主機(jī)中UP-Magic210型光盤核名目:
#cd/UP-Magic210/SRC/kernel/linux-/(2)、運(yùn)行makemenuconfig命令配置核文件系統(tǒng)相關(guān)支持添加對CRAMFS根文件以及YAFFS2文件系統(tǒng)系統(tǒng)支持
進(jìn)入Filesystems--->菜單
進(jìn)入Miscellaneousfilesystems--->菜單
選擇CompressedROMfilesystemsupport(cramfs)支持,如圖:
選擇YAFFS2filesystemsupport支持,配置如下圖
退出保存核配置
運(yùn)行make編譯核,重新燒寫核。
二、根文件系統(tǒng)的實(shí)現(xiàn)
(1)、制作BUSYBOX工具集
進(jìn)入本次試驗(yàn)名目
#cd/UP-Magic210/SRC/rootfs/
#ls
bash-4.0.tar.bz2busybox-1.19.3.tar.bz2rootfs
解壓busybox-1.19.3.tar.bz2壓縮包
#tarxjvfbusybox-1.19.3.tar.bz2
產(chǎn)生busybox-1.19.3名目
#ls
bash-4.0.tar.bz2busybox-1.19.3busybox-1.19.3.tar.bz2rootfs
進(jìn)入busybox-1.19.3名目進(jìn)行busybox的修改及配置
修改此名目的Makefile文件,更改ARCH?和CROSS_PILE?=宏定義,如下:CROSS_PILE?=arm-none-linux-gnueabi-
ARCH?=arm
退出保存。
運(yùn)行makemenuconfig對工具集進(jìn)行定制
#makemenuconfig
進(jìn)入BusyboxSettings--->選項(xiàng)
進(jìn)入BusyboxLibraryTuning--->選項(xiàng)
選中Fancyshellprompts支持
進(jìn)入MiscellaneousUtilities--->選項(xiàng)
去除inotifyd選項(xiàng)
接下來的配置可以依據(jù)詳細(xì)狀況來設(shè)置或裁剪相關(guān)工具。退出保存設(shè)置。
編譯busybox
#make
安裝busybox
#makeinstall
勝利后會(huì)在當(dāng)前名目下生成_install名目,編譯的工具也都集成在該安裝名目下。
#cd_install/
#ls
binlinuxrcsbinusr
#
可以看到_install名目下生成了根文件系統(tǒng)常用的命令及工具,接下來的工作,用戶可以依據(jù)需要將_install名目下生成的命令拷貝到根文件系統(tǒng)相應(yīng)名目下。
例如:將從busybox生成的which命令拷貝到根文件系統(tǒng)名目的usr/bin名目下,這樣,我們的根文件系統(tǒng)就支持which命令了。
(2)、制作CRAMFS根文件系統(tǒng)鏡像
試驗(yàn)中已經(jīng)供應(yīng)了mkcramfs制作工具以及mkrootfs.sh腳本文件,用戶只需執(zhí)行mkrootfs.sh腳本文件來使用mkcramfs制作根文件系統(tǒng)鏡像即可。
當(dāng)然也可以手動(dòng)的執(zhí)行命令:./mkcramfsrootfs_up210rootfs_up210.cramfs
#./mkrootfs.sh
此時(shí)在當(dāng)前名目下生成根文件系統(tǒng)鏡像文件rootfs_up210.cramfs
#ls
mkcramfsmkrootfs.shrootfs_up210rootfs_up210.cramfs
三、燒寫根文件系統(tǒng)
將新生成的根文件系統(tǒng)鏡像文件rootfs_up210.cramfs燒寫到UP-Magic210型設(shè)備中進(jìn)行測試,這里不在贅述(燒寫步驟可以參考文檔“UP-Magic210出廠程序燒寫手冊
(LINUX)V1.0.pdf”第24頁)。假如用戶新添加了相關(guān)命令或工具(例如which命令)啟動(dòng)系統(tǒng)后可以驗(yàn)證用戶添加入的新命令或工具。
4.試驗(yàn)結(jié)果
5.試驗(yàn)中遇到的問題及解決方法
make編譯有錯(cuò)誤,進(jìn)行源代碼的修改。之后再makemenuconfig中將這個(gè)宏對應(yīng)的東西配置成沒有就好了,假如沒有這個(gè)宏,那么就直接用出錯(cuò)的那個(gè)文件的名字找就行了,找到后給它去掉,將來make的時(shí)候就不會(huì)編譯這個(gè)文件了,在次進(jìn)行make編譯后,編譯出來了busybox這個(gè)東西,就在證明編譯通過了。
試驗(yàn)三模塊方式驅(qū)動(dòng)試驗(yàn)
1.試驗(yàn)?zāi)康?/p>
學(xué)習(xí)在LINUX下進(jìn)行驅(qū)動(dòng)設(shè)計(jì)的原理
?把握使用模塊方式進(jìn)行驅(qū)動(dòng)開發(fā)調(diào)試的過程
2.試驗(yàn)容
?在PC機(jī)上編寫簡潔的虛擬硬件驅(qū)動(dòng)程序并進(jìn)行調(diào)試,試驗(yàn)驅(qū)動(dòng)的各個(gè)接口函數(shù)的實(shí)
現(xiàn),分析并理解驅(qū)動(dòng)與應(yīng)用程序的交互過程。
?在ARM設(shè)備上創(chuàng)建設(shè)備驅(qū)動(dòng)節(jié)點(diǎn),編寫用戶空間應(yīng)用程序,對驅(qū)動(dòng)程序進(jìn)行測試。
3.試驗(yàn)步驟
(1)、編譯驅(qū)動(dòng)程序/UP-Magic210/SRC/exp/driver/01_demo/demo.c,手工加載驅(qū)動(dòng)程序,通過設(shè)備號(hào)建立驅(qū)動(dòng)設(shè)備節(jié)點(diǎn),執(zhí)行應(yīng)用程序測試該驅(qū)動(dòng)及設(shè)備,分析驅(qū)動(dòng)程序demo.c。
進(jìn)入試驗(yàn)名目編譯源程序
#cd/UP-Magic210/SRC/exp/driver/01_demo/
清除中間代碼,重新編譯
#makeclean
#make
當(dāng)前名目下生成驅(qū)動(dòng)程序demo.ko和應(yīng)用測試程序test_demo。
啟動(dòng)UP-Magic210試驗(yàn)系統(tǒng),連好網(wǎng)線、串口線。通過串口終端掛載宿主機(jī)試驗(yàn)名目(留意:虛擬機(jī)IP地址需要設(shè)置為:57)。
#mount-tnfs-onolock57:/UP-Magic210/mnt/nfs
進(jìn)入串口終端的NFS共享試驗(yàn)名目
#cd/mnt/nfs/SRC/exp/driver/01_demo/
手動(dòng)加載驅(qū)動(dòng)程序demo.ko
#insmoddemo.ko
通過設(shè)備號(hào)建立驅(qū)動(dòng)設(shè)備節(jié)點(diǎn)
#mknod/dev/democ2510
執(zhí)行應(yīng)用程序測試該驅(qū)動(dòng)及設(shè)備,分析應(yīng)用程序測試結(jié)果。
#./test_demo
(2)、請參考驅(qū)動(dòng)程序demo.c,編寫一個(gè)虛擬字符設(shè)備驅(qū)動(dòng)程序并進(jìn)行調(diào)試,該虛擬字符設(shè)備驅(qū)動(dòng)程序完成如下功能:
◆在核模塊初始化函數(shù)中,實(shí)現(xiàn)動(dòng)態(tài)申請?jiān)O(shè)備號(hào)并注冊該設(shè)備,動(dòng)態(tài)建立設(shè)備文件節(jié)
點(diǎn);
◆在核模塊的退出函數(shù)中,實(shí)現(xiàn)設(shè)備注銷,刪除該設(shè)備文件節(jié)點(diǎn);
◆實(shí)現(xiàn)file_operations設(shè)備驅(qū)動(dòng)文件結(jié)構(gòu)體中的open、read、write、ioctl和release
函數(shù)功能,其中:
?open函數(shù):設(shè)置一個(gè)計(jì)數(shù)器count,每調(diào)用一次open函數(shù),計(jì)數(shù)器count加1。
?read函數(shù):讀取用戶寫入的字符串?dāng)?shù)據(jù)的排列結(jié)果。
?write函數(shù):實(shí)現(xiàn)將用戶寫入的字符串?dāng)?shù)據(jù),根據(jù)每個(gè)字符的ASCII值逆序或升序排序(依據(jù)開關(guān)值asc排序:asc=0,逆序排序;asc=1,升序排序;)。
?ioctl函數(shù):設(shè)置排序方式開關(guān)值asc。
?release函數(shù):每調(diào)用一次release函數(shù),計(jì)數(shù)器count減1。
4.試驗(yàn)結(jié)果
5.試驗(yàn)中遇到的問題及解決方法。
沒有修改makefile文件直接進(jìn)行編譯導(dǎo)致出錯(cuò)。試驗(yàn)前沒有仔細(xì)閱讀試驗(yàn)原理,看懂試驗(yàn)代碼,所以在使用make命令以后無法實(shí)現(xiàn)。最終在同學(xué)的關(guān)心下找到了緣由。忽視了自己使用的是gcc編譯而不是交叉編譯,因而沒有設(shè)置節(jié)點(diǎn)。嘗試了許多次以后才發(fā)覺了問題,期間以為是test_demo文件的問題,但是導(dǎo)入導(dǎo)出許多次都沒有解決,問了同學(xué)才找到了問題。
試驗(yàn)四LED驅(qū)動(dòng)及掌握試驗(yàn)
1.試驗(yàn)?zāi)康?/p>
?了解ARM設(shè)備外圍電路結(jié)構(gòu)與接口原理
?熟識(shí)Linux系統(tǒng)下硬件驅(qū)動(dòng)編程
?編程實(shí)現(xiàn)對嵌入式設(shè)備上LED燈的掌握
2.試驗(yàn)容
?閱讀UP-Magic210平臺(tái)硬件文檔,熟識(shí)ARM處理硬件外圍接口電路
?編程實(shí)現(xiàn)UP-Magic210平臺(tái)設(shè)備上LED驅(qū)動(dòng)及應(yīng)用測試程序
3.試驗(yàn)步驟
編寫UP-Magic210平臺(tái)設(shè)備上LED驅(qū)動(dòng)及應(yīng)用測試程序并進(jìn)行調(diào)試,該LED驅(qū)動(dòng)程序完成如下功能:
◆在核模塊初始化函數(shù)中,實(shí)現(xiàn)動(dòng)態(tài)申請?jiān)O(shè)備號(hào)并注冊該設(shè)備,動(dòng)態(tài)建立設(shè)備文件節(jié)
點(diǎn);
◆在核模塊的退出函數(shù)中,實(shí)現(xiàn)設(shè)備注銷,刪除該設(shè)備文件節(jié)點(diǎn);
◆實(shí)現(xiàn)file_operations設(shè)備驅(qū)動(dòng)文件結(jié)構(gòu)體中的ioctl函數(shù),完成如下功能:
?一次調(diào)用掌握全部的LED亮或滅;
?掌握單個(gè)LED亮或滅;
?實(shí)現(xiàn)流水燈顯示,流水燈顯示效果自行定義,流水燈循環(huán)顯示次數(shù)由用戶應(yīng)用程序傳入。
程序:
驅(qū)動(dòng)程序分析:
#include
#include
#include
#include
#include
#include
#include
#include
#include
MODULE_LICENSE("GPL");
#defineDEVICE_NAME"leds"http://驅(qū)動(dòng)名稱
#defineDEVICE_MAJOR231//驅(qū)動(dòng)主設(shè)備號(hào)
#defineDEVICE_MINOR0//驅(qū)動(dòng)次設(shè)備號(hào)
//聲明字符設(shè)備類結(jié)構(gòu)
structcdev*mycdev;
structclass*myclass;
dev_tdevno;
//LEDGPIO列表
staticunsignedlongled_table={
S3C_GPQ2,
S3C_GPQ3,
S3C_GPQ4,
S3C_GPQ5,
S3C_GPQ6,
};
//LEDGPIO輸出類型配置列表
staticunsignedintled_cfg_table={
S3C_GPQ2_OUTP,
S3C_GPQ3_OUTP,
S3C_GPQ4_OUTP,
S3C_GPQ5_OUTP,
S3C_GPQ6_OUTP,
};
//LEDIOCTRL處理函數(shù),主要完成從用戶空間傳遞數(shù)據(jù)進(jìn)行GPIO引腳設(shè)置功能
staticintuptech_leds_ioctl(structinode*inode,structfile*file,unsignedintcmd,unsignedlongarg)
{
switch(cmd){
case0:
case1:
if(arg>6){
return-EINVAL;
}
//LEDGPIO設(shè)置函數(shù)接口
s3c_gpio_setpin(led_table,!cmd);
return0;
default:
return-EINVAL;
}
}
//驅(qū)動(dòng)層file_operations接口函數(shù)初始化
staticstructfile_operationsuptech_leds_fops={
.owner=THIS_MODULE,
.ioctl=uptech_leds_ioctl,
};
//驅(qū)動(dòng)程序入口初始化函數(shù),設(shè)置LEDGPIO、向核注冊設(shè)備。staticint__inituptech_leds_init(void)
{
intret;
inti;
//注冊LED設(shè)備
devno=MKDEV(DEVICE_MAJOR,DEVICE_MINOR);//獵取設(shè)備號(hào)mycdev=cdev_alloc();
cdev_init(mycdev,//初始化字符設(shè)備err=cdev_add(mycdev,devno,1);//向系統(tǒng)添加LED設(shè)備if(err!=0)
printk("s3cledsdeviceregisterfailed!\n");
myclass=class_create(THIS_MODULE,"leds");
if(IS_ERR(myclass)){
printk("Err:failedincreatingclass.\n");
return-1;
}
//建立LED設(shè)備節(jié)點(diǎn)
class_device_create(myclass,NULL,MKDEV(DEVICE_MAJOR,DEVICE_MINOR),NULL,DEVICE_NAME,DEVICE_MINOR);
//LEDGPIO配置初始化
for(i=0;i
#include
#include
#include
intmain(intargc,char**argv)
{
inti;
inton;
intled_number;
intfd;
/*
依據(jù)命令行參數(shù)容,進(jìn)行掌握。將命令行參數(shù)1設(shè)置成LEDnumber,參數(shù)2設(shè)置成LED點(diǎn)亮熄滅狀態(tài)on
*/
if(argc!=3||sscanf(argv,"%d",
fprintf(stderr,"\t./ledled_numberon|off\n");
fprintf(stderr,"Options:\n");
fprintf(stderr,"\tled_numberfrom0to4\n");
fprintf(stderr,"\ton:1off:0\n");
exit(1);
}
//打開LED設(shè)備節(jié)點(diǎn)
fd=open("/dev/leds",0);
if(fdtm_gmtoff為:
#defineTIMEZONE_OFFSET(foo)foo->tm_gmtoff
修改boa.c:
修改:
if(setuid(0)!=-1){
DIE("ickyLinuxkernelbug!");
}
為:
//if(setuid(0)!=-1){
//DIE("ickyLinuxkernelbug!");
//}
修改defines.h:
修改:
#ifndefSERVER_ROOT
#defineSERVER_ROOT"/etc/boa"
#endif
為:
#ifndefSE
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 維生素c課程設(shè)計(jì)
- 蓋板零件課程設(shè)計(jì)
- 保險(xiǎn)行業(yè)會(huì)計(jì)職責(zé)總結(jié)
- 海底動(dòng)物創(chuàng)意課程設(shè)計(jì)
- 咨詢行業(yè)的營銷工作總結(jié)
- 火葬場衛(wèi)生整治工作總結(jié)
- 2024年西雙版納職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫含答案
- 水務(wù)領(lǐng)域數(shù)字經(jīng)濟(jì)發(fā)展的研究計(jì)劃
- 2024年認(rèn)識(shí)圖形二教案
- 2024年秋天的信教案模板
- 《紅色家書》讀書分享會(huì)主題班會(huì)課件
- 2025年廣東省春季高考數(shù)學(xué)仿真模擬試卷試題(含答案解析+答題卡)
- 新媒體運(yùn)營工作年終總結(jié)
- 【MOOC】電子技術(shù)-北京科技大學(xué) 中國大學(xué)慕課MOOC答案
- 米酒釀造工藝
- 點(diǎn)式高層住宅工程施工組織設(shè)計(jì)
- 0-3歲嬰幼兒心理發(fā)展知到智慧樹期末考試答案題庫2024年秋杭州師范大學(xué)
- 2024年1月福建省普通高中學(xué)業(yè)水平合格性考試化學(xué)試題(解析版)
- 齊白石介紹課件
- 窺見中華文明之光- 高中語文統(tǒng)編版(2022)必修下冊第一單元整體教學(xué)設(shè)計(jì)
- 2024年安徽省公務(wù)員錄用考試《行測》真題及解析
評論
0/150
提交評論