




下載本文檔
版權(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)項(xiàng)目報(bào)告項(xiàng)目名稱(chēng):基于DM3730的Android系統(tǒng)啟動(dòng)過(guò)程分析和Logo移植1.項(xiàng)目開(kāi)發(fā)目的本次項(xiàng)目研究和開(kāi)發(fā)的主要目的如下:(1)基于DM3730處理器研究Android系統(tǒng)的啟動(dòng)過(guò)程及其主要流程;(2)基于Android系統(tǒng)的啟動(dòng)流程init進(jìn)程深入理解。(3)移植Android系統(tǒng)啟動(dòng)過(guò)程中的Logo和相關(guān)動(dòng)畫(huà);(4)修改Android系統(tǒng)的指定桌面,讓系統(tǒng)啟動(dòng)后直接跳入自己的開(kāi)發(fā)的應(yīng)用程序。2 .項(xiàng)目開(kāi)發(fā)內(nèi)容本次項(xiàng)目需要完成的主要內(nèi)容有如下幾點(diǎn):1 在Ubuntu11.04上下載Android專(zhuān)用源碼,完成Android系統(tǒng)的軟件開(kāi)發(fā)環(huán)境的搭建;2 在EVM37x開(kāi)發(fā)板上
2、搭建Android系統(tǒng)的硬件開(kāi)發(fā)環(huán)境;3 Android系統(tǒng)的init進(jìn)程和init.rc文件簡(jiǎn)單解析;4 Android系統(tǒng)啟動(dòng)的動(dòng)畫(huà)和Logo的修改;5 Android系統(tǒng)桌面源碼的修改,實(shí)現(xiàn)直接調(diào)入自己的應(yīng)用程序。3 .項(xiàng)目開(kāi)發(fā)軟硬件設(shè)備(1)硬件平臺(tái):TI高性能處理器DM3730,TI核心開(kāi)發(fā)板EM/AM37xxEVM板(2)操作系統(tǒng):AndroidICS4.0.32) PC端的開(kāi)發(fā)平臺(tái):Ubuntu11.04(4)開(kāi)發(fā)所需的IDE:TI集成開(kāi)發(fā)環(huán)境CCS5.14 .項(xiàng)目開(kāi)發(fā)流程4.1 項(xiàng)目開(kāi)發(fā)前期準(zhǔn)備4.1.1 Android源碼下載和編譯本項(xiàng)目是在Ubuntu宿主機(jī)上完成Andro
3、id源碼的下載和編譯。在此之前需要完成以下工作,主要包括各種Android開(kāi)發(fā)所需的插件,編譯時(shí)所需的基礎(chǔ)庫(kù)以及開(kāi)發(fā)調(diào)試的minicom終端等。sudoadd-apt-repository"debsudoapt-getupdatesudoapt-getinstallgit-coregnupgsun-java6-jdkflexbisongperflibsdl-devlibesd0-devlibwxgtk2.6-devbuild-essentialzipcurllibncurses5-devzlib1g-devminicomtftpduboot-mkimageexpectsudoupda
4、te-java-alternatives-sjava-6-sun下載Android源碼的過(guò)程和命令:repoinit-ugit://rowboat/manifest.git-minit-ugit:/rowboat/manifest.git-mTI-Android-ICS-4.0.3-DevKit-3.0.0.xmlreposync./.repo/repo/reposync-local-onlyAndroid源碼的編譯:包括環(huán)境變量的設(shè)定,x-loader、u-boot>LinuxKernel以及Android文件系統(tǒng)。環(huán)境變量:expo
5、rtPATH=source/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATHx-loader編譯:makeCROSS_COMPILE=arm-eabi-distcleanmakeCROSS_COMPILE=arm-eabi-omap3evm_configmakeCROSS_COMPILE=arm-eabi-u-boot編譯:makeCROSS_COMPILE=arm-eabi-distcleanmakeCROSS_COMPILE=arm-eabi-omap3_evm_configmakeCROSS_COMPILE=arm-eabi-Li
6、nuxKernel編譯:makeARCH=armCROSS_COMPILE=arm-eabi-distcleanmakeARCH=armCROSS_COMPILE=arm-eabi-omap3_evm_android_defconfigAndroid文件系統(tǒng)編譯:makeTARGET_PRODUCT=omap3evmOMAPES=5.x-j8整個(gè)系統(tǒng)編譯過(guò)程約3個(gè)小時(shí)左右,占用空間達(dá)12G,因此對(duì)PC機(jī)的要求較高。Android文件系統(tǒng)制作:cd/home/gzz/DM3730/source/out/target/product/omap3evmcp-rroot/*android_rootfs
7、/cp-rsystemandroid_rootfs././././build/tools/mktarball.sh./././host/linux-x86/bin/fs_get_statsandroid_rootfs.rootfsrootfs.tar.bz2到此為止,整個(gè)Android系統(tǒng)的各個(gè)部分都編譯和制作完成。4.1.2 EVM板硬件環(huán)境的搭建這里說(shuō)的硬件開(kāi)發(fā)環(huán)境的搭建,主要是指將上述編譯好的Android系統(tǒng)所需的xloader、u-boot、Linuxkernel和文件系統(tǒng)鏡像通過(guò)tftp協(xié)議下載到Linux的NandFlash上去。使用如下命令進(jìn)行鏡像文件的燒錄:OMAP3_EVM
8、#tftp0x80000000MLOOMAP3_EVM#nanderase0x00x50000OMAP3_EVM#nandecchw2OMAP3_EVM#nandwrite0x800000000x00x50000通過(guò)以上主要內(nèi)容,順利完成項(xiàng)目開(kāi)發(fā)所需的軟硬件開(kāi)發(fā)環(huán)境的搭建,為后續(xù)項(xiàng)目的順利進(jìn)行打下了良好的基礎(chǔ)。Android中的內(nèi)核啟動(dòng)后,kernel會(huì)啟動(dòng)第一個(gè)用戶(hù)級(jí)別的進(jìn)程:init,它是一個(gè)由內(nèi)核啟動(dòng)的用戶(hù)級(jí)進(jìn)程。內(nèi)核自行啟動(dòng)(已經(jīng)被載入內(nèi)存,開(kāi)始運(yùn)行,并已初始化所有的設(shè)備驅(qū)動(dòng)程序和數(shù)據(jù)結(jié)構(gòu)等)之后,就通過(guò)啟動(dòng)一個(gè)用戶(hù)級(jí)別的進(jìn)程,完成系統(tǒng)的引導(dǎo)。init始終是第一個(gè)進(jìn)程,位于/sbin/
9、init下面。而init.rc是init進(jìn)程啟動(dòng)讀取的第一個(gè)文件,該文件時(shí)一個(gè)配置Android系統(tǒng)所需要啟動(dòng)的服務(wù)和相關(guān)Android應(yīng)用程序最初始化的配置。因?yàn)樗cAndroid啟動(dòng)的界面有直接的聯(lián)系,所以為了項(xiàng)目的順利進(jìn)行,有必要先對(duì)其進(jìn)行理解和熟悉。分析init進(jìn)程需要結(jié)合init.rc進(jìn)行,在這里主要通過(guò)分析部分代碼,做合理的解釋。Init進(jìn)程的源代碼位于Android源碼的system/core/init/init.c下面,由于代碼過(guò)于龐大這里不在粘貼。# uevent進(jìn)程if(!strcmp(basename(argv0),"ueventd")returnue
10、ventd_main(argc,argv);這個(gè)函數(shù)是取出argv中的第一個(gè)參數(shù),比如/sbin/ueventd,則basename為ueventd。android系統(tǒng)第一次啟動(dòng)的進(jìn)程名init,所以該函數(shù)ueventd_main不執(zhí)行,該函數(shù)的真正執(zhí)行在init啟動(dòng)serviceueventd/sbin/ueventd后,fork出一個(gè)子進(jìn)程,execve啟動(dòng)/sbin/ueventd后,實(shí)際上該函數(shù)是對(duì)init的符合鏈接,也就是ueventd進(jìn)程執(zhí)行起來(lái)后執(zhí)行的代碼還是init.c中的main,因此不同的進(jìn)程名會(huì)去執(zhí)行相同的main函數(shù)。ueventd_main函數(shù)的主要功能:在Linux
11、系統(tǒng)中現(xiàn)在都使用uevent機(jī)制來(lái)管理設(shè)備的熱插拔事件,給用戶(hù)空間權(quán)利來(lái)完成一些設(shè)備文件節(jié)點(diǎn)的創(chuàng)建。這種機(jī)制是建立在socket的通信機(jī)制上,用戶(hù)空間和內(nèi)核驅(qū)動(dòng)進(jìn)行交互,詳細(xì)的機(jī)制沒(méi)有去了解過(guò)。是linux2.6的版本中常用的機(jī)制。比如驅(qū)動(dòng)出現(xiàn)device_create等時(shí),會(huì)向用戶(hù)空間報(bào)告一個(gè)uevent事件,用戶(hù)空間由uevent進(jìn)程解析后去創(chuàng)建設(shè)備節(jié)點(diǎn)。2.init.rc的解析INFO("readingconfigfile'n");init_parse_config_file("/init.rc");init.rc是一個(gè)配置文件,內(nèi)部有許多
12、的語(yǔ)言規(guī)則,所有語(yǔ)言會(huì)在init_parse_config_file中進(jìn)行解析。調(diào)用流程如下init_parse_config_file>read_file>parse_config.parse_config(源代碼略)。通過(guò)對(duì)這個(gè)文件的解析,會(huì)啟動(dòng)Android的應(yīng)用程序,使得Android進(jìn)入Java的世界4.3Android啟動(dòng)Logo和動(dòng)畫(huà)移植在這里主要對(duì)Android系統(tǒng)的3個(gè)畫(huà)面進(jìn)行移植,一是Linux內(nèi)核在啟動(dòng)加載Frambuffer幀緩沖驅(qū)動(dòng)時(shí)會(huì)調(diào)用一個(gè)函數(shù)完成Linux的Logo圖標(biāo)的顯示。二是Android的第一個(gè)init用戶(hù)進(jìn)程啟動(dòng)會(huì)調(diào)用函數(shù)完成一個(gè)圖片的顯示
13、。三是Android系統(tǒng)中Java應(yīng)用程序啟動(dòng)時(shí)顯示出來(lái)的動(dòng)畫(huà)效果bootanimation。Android啟動(dòng)第一個(gè)Logo圖標(biāo)移植Android系統(tǒng)是基于Linux內(nèi)核設(shè)計(jì)而成的,Linux下使用幀緩沖(Framebuffer)的概念來(lái)表示一個(gè)顯示接口,通俗理解就表示一塊LCD。幀緩沖區(qū)的相關(guān)驅(qū)動(dòng)在內(nèi)核啟動(dòng)時(shí)調(diào)用fbmemjnit,在該函數(shù)中主要完成使用register_chrdev來(lái)注冊(cè)了一個(gè)名稱(chēng)為fb的字符設(shè)備,最后調(diào)用函數(shù)class_create在/sys/class目錄下創(chuàng)建了一個(gè)graphics目錄等。同樣的驅(qū)動(dòng)加載中會(huì)調(diào)用硬件平臺(tái)相關(guān)LCD的驅(qū)動(dòng)初始化函數(shù)omapfbjnit。
14、這個(gè)函數(shù)會(huì)針對(duì)對(duì)個(gè)fb,完成相關(guān)節(jié)點(diǎn)的創(chuàng)建在/dev/graphics/fb0,fb1等。主設(shè)備號(hào)為29一旦完成創(chuàng)建,會(huì)調(diào)用fb_notfier_call_chain,函數(shù)通知控制fb的console理解為控制臺(tái)).每一個(gè)fb都會(huì)對(duì)應(yīng)于一個(gè)console來(lái)控制。而Logo的顯示啟動(dòng),就是在fbcon_init和fbcon_switch中來(lái)完成的。在fbcon_init中使用fbcon_prepare_logo函數(shù)準(zhǔn)備需要顯示的Logo數(shù)據(jù)源,在fbcon_switch使用fb_show_logo來(lái)顯示Logo。本項(xiàng)目中需要將一張Jpg的圖片作為L(zhǎng)ogo樣式的圖標(biāo)顯示在LCD上面。實(shí)現(xiàn)的步驟如下
15、:.為了能讓這部分的Logo圖標(biāo)能夠正常顯示,需要在編譯時(shí)對(duì).config文件添加一定的配置:CONFIG_FRAMEBUFFER_CONSOLECONFIG_LOGOCONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY完成這些配置之后的Logo才可以正常顯示,否則內(nèi)核在啟動(dòng)驅(qū)動(dòng)加載時(shí),顯示Logo圖標(biāo)的函數(shù)不會(huì)執(zhí)行相關(guān)的操作。.jpg圖標(biāo)的格式轉(zhuǎn)換。Linux啟動(dòng)圖標(biāo)格式不直接支持jpg格式,主要支持ppm、pbm格式的圖像文件,因此需要先將圖像進(jìn)行適當(dāng)?shù)霓D(zhuǎn)換:1)使用gimpimage軟件隨意修改圖片的像素大小使用終端命令完成convertxxx.jpgxxx
16、.png3)使用如下命令完成最終的轉(zhuǎn)換(被轉(zhuǎn)換的文件必須是png格式)pngtopnmxxx.png>xxx.pnmpnmquant224xxx.pnm>xxx224.pnm最終生成一張xxxx224.pnm格式的圖像文件。完成圖片的準(zhǔn)備工作后,需要修改部分Linux內(nèi)核的源碼,具體的操作如下進(jìn)行:a.對(duì)Makefile文件做一定的修改添加如下內(nèi)容:obj-$(CONFIG_LOGO_ICS_CLUT224)+=logo_ics_clut224.b.對(duì)10go.c等源文件做一定的修改添加如下內(nèi)容:ifdefCONFIG_LOGO_ICS_CLUT224logo=&logo_
17、ics_clut224;/gzzprintk("depth=%d,logo=logo_ics_clut224n",depth);/bygzz#endifc.修改部分代碼讓圖片顯示在LCD在正中間主要修改部分在fb_show_logo_line,這個(gè)函數(shù)實(shí)現(xiàn)Logo圖標(biāo)的完全顯示。image.dx=0;image.dy=y;image.dx=(info->var.xres/2)-(logo->width/2);image.dy=(info->var.yres/2)-(logo->height/2);/bygzzimage.width=logo->
18、width;/140image.height=logo->height;/153在這個(gè)函數(shù)中,要顯示的圖像信息都保存在里image結(jié)構(gòu)體中,同時(shí)Logo圖像顯示的右上角放在image.dx,image.d必個(gè)坐標(biāo)上。這里可以通過(guò)修改這對(duì)坐標(biāo)值,完成位置的修改。比如這里配置的是顯示在LCD(480*640)的正中問(wèn)。通過(guò)以上a,b.c三個(gè)步驟可以實(shí)現(xiàn)將任意一張圖片作為L(zhǎng)ogo圖像顯示在自己的LCD上,給出一個(gè)良好的用戶(hù)效果。第二個(gè)圖標(biāo)的顯示主要和iMt進(jìn)程有關(guān)系。在init進(jìn)程中會(huì)有一個(gè)console_inkaction函數(shù)來(lái)完成這個(gè)圖標(biāo)的顯示,這里直接給出部分代碼來(lái)解析如下:static
19、intconsole_init_action(intnargs,char*args)(intfd;chartmpPROP_VALUE_MAX;if(console0)snprintf(tmp,sizeof(tmp),"/dev/%s",console);console_name=strdup(tmp);fd=open(console_name,O_RDWR);if(fd>=0)have_console=1;close(fd);if(load_565rle_image(INIT_IMAGE_FILE)fd=open("/dev/tty0",O_WRO
20、NLY);if(fd>=0)constchar*msg;msg="n""n""n""n""n""n""n"/consoleis40colsx30lines"n""n""n""n""n""n""n""ANDROID"write(fd,msg,strlen(msg);close(fd);retur
21、n0;a.初始化控制臺(tái)。init進(jìn)程在啟動(dòng)的時(shí)候,會(huì)解析內(nèi)核的啟動(dòng)參數(shù)(保存在文件/proc/cmdline中)。如果發(fā)現(xiàn)內(nèi)核的啟動(dòng)參數(shù)中包含有了一個(gè)名稱(chēng)為“androidboot.console勺屬性,那么就會(huì)將這個(gè)屬性的值保存在字符數(shù)組console中。這樣我們就可以通過(guò)設(shè)備文件/dev/<console探訪問(wèn)系統(tǒng)的控制臺(tái)。如果內(nèi)核的啟動(dòng)參數(shù)沒(méi)有包含名稱(chēng)為“androidboot.console勺屬性,那么默認(rèn)就通過(guò)設(shè)備文件/dev/console來(lái)訪問(wèn)系統(tǒng)的控制臺(tái)。如果能夠成功地打開(kāi)設(shè)備文件/dev/<console>£者/dev/console,那么就說(shuō)明系
22、統(tǒng)支持訪問(wèn)控制臺(tái),因此,全局變量have_console0勺就會(huì)被設(shè)置為1。b.顯示第二個(gè)開(kāi)機(jī)畫(huà)面。顯示第二個(gè)開(kāi)機(jī)畫(huà)面是通過(guò)調(diào)用函數(shù)10ad_565rle_image來(lái)實(shí)現(xiàn)的。在調(diào)用函數(shù)10ad_565rle_image的時(shí)候,指定的開(kāi)機(jī)畫(huà)面文件為INIT_IMAGE_FILE。INIT_IMAGE_FILE是一個(gè)宏,定義在system/core/init/init.h文件中,如下所示:#defineINIT_IMAGE_FILE"/initlogo.rle"圖像文件initlogo.rle保存的第二個(gè)開(kāi)機(jī)畫(huà)面的圖像格式是565rle的。rle的全稱(chēng)是run-lengthe
23、ncoding,翻譯為游程編碼或者行程長(zhǎng)度編碼,它可以使用4個(gè)字節(jié)來(lái)描述一個(gè)連續(xù)的具有相同顏色值的序列。在rle565格式,前面2個(gè)字節(jié)中用來(lái)描述序列的個(gè)數(shù),而后面2個(gè)字節(jié)用來(lái)描述一個(gè)具體的顏色,其中,顏色的RGB值分別占5位、6位和5位。c.制作initlogo.rle文件。準(zhǔn)備一張png格式的文彳使用Ubuntu自帶的圖片轉(zhuǎn)換工具執(zhí)行如下命令:convert-depth8android_logo.pngrgb:android_logo.raw使用android編譯后的rgb2565工具,在android/out/host/linux-x86/bin目錄下(android為當(dāng)前源碼所在目錄)
24、,轉(zhuǎn)換命令如下:rgb2565-rle<android_logo.raw>initlogo.rle0通過(guò)以上步驟就完成了代碼的移植和圖片的制作,最后只需要將initlogo.rle文件拷貝到Android的文件系統(tǒng)下面,重新啟動(dòng)就可以看到圖片的正常顯示。Android啟動(dòng)第三個(gè)動(dòng)畫(huà)移植考慮到第三個(gè)啟動(dòng)的動(dòng)畫(huà)位于Android的Java層,因此代碼量相當(dāng)龐大,因此只寫(xiě)如何替換啟動(dòng)動(dòng)畫(huà)來(lái)實(shí)現(xiàn)我們預(yù)期的效果。第三個(gè)開(kāi)機(jī)畫(huà)面是由應(yīng)用程序bootanimation來(lái)負(fù)責(zé)顯示的。應(yīng)用程序bootanimation在啟動(dòng)腳本init.rc中被配置成了一個(gè)服務(wù),如下所示:.serviceboota
25、nim/system/bin/bootanimationusergraphicsgroupgraphicsdisabledoneshot應(yīng)用程序bootanimation的用戶(hù)和用戶(hù)組名稱(chēng)分別被設(shè)置為graphics注意,用來(lái)啟動(dòng)應(yīng)用程序bootanimation的服務(wù)是disable的,即init進(jìn)程在啟動(dòng)的時(shí)候,不會(huì)主動(dòng)將應(yīng)用程序bootanimation啟動(dòng)起來(lái)。當(dāng)SurfaceFlinger服務(wù)啟動(dòng)的時(shí)候,它會(huì)通過(guò)修改系統(tǒng)屬性ctl.start的值來(lái)通知init進(jìn)程啟動(dòng)應(yīng)用程序bootanimation,以便可以顯示第三個(gè)開(kāi)機(jī)畫(huà)面,而當(dāng)System進(jìn)程將系統(tǒng)中的關(guān)鍵服務(wù)都啟動(dòng)起來(lái)之后,
26、ActivityManagerService服務(wù)就會(huì)通知SurfaceFlinger服務(wù)來(lái)修改系統(tǒng)屬性ctl.stop的值,以便可以通知init進(jìn)程停止執(zhí)行應(yīng)用程序bootanimation,即停止顯示第三個(gè)開(kāi)機(jī)畫(huà)面。Android的所有版本都可以添加一個(gè)bootanimation.zip文件。內(nèi)容包括part文件夾和desc.txt。前者的文件夾下面存放的是連續(xù)的png格式文件,后者desc.txt里面是播放信息設(shè)置,其內(nèi)容和格式如下:48072015p10part1p00part2其中480800是指顯示的分辨率寬和高,15是圖像播放的幀數(shù)。p后面的數(shù)字分別指播放次數(shù)0和播放時(shí)間。Andr
27、oid系統(tǒng)啟動(dòng)時(shí)會(huì)文件系統(tǒng)如下目錄查找:#defineUSER_BOOTANIMATION_FILE"/data/local/bootanimation.zip"#defineSYSTEM_BOOTANIMATION_FILE"/system/media/bootanimation.zip"只需要將制作好的動(dòng)畫(huà)文件放到指定的目錄即可實(shí)現(xiàn)自己設(shè)計(jì)的美觀的動(dòng)畫(huà)以替換默認(rèn)的開(kāi)機(jī)畫(huà)面。到此為止,完成項(xiàng)目所需完成的主要內(nèi)容:移植完成了三個(gè)動(dòng)畫(huà)來(lái)替換系統(tǒng)自帶的圖片,使得產(chǎn)品可以實(shí)現(xiàn)更加友好的用戶(hù)界面,提高產(chǎn)品的銷(xiāo)量。Android桌面移植這部分的內(nèi)容主要是完成And
28、roid系統(tǒng)啟動(dòng)桌面進(jìn)程的移植,目的是講這個(gè)默認(rèn)的桌面進(jìn)程修改為自己所設(shè)計(jì)的應(yīng)用進(jìn)程,使得用戶(hù)在使用Android終端設(shè)備是可以直接進(jìn)入自行設(shè)計(jì)的應(yīng)用操作界面。既然是移植桌面系統(tǒng),那么需要修改的就是桌面的源碼,閱讀Android系統(tǒng)龐大的源碼,可以發(fā)現(xiàn)Android源碼的Home應(yīng)用程序就是Launcher進(jìn)程。Android系統(tǒng)中的應(yīng)用程序安裝好了以后,SystemServerffl件接下來(lái)就要通過(guò)ActivityManagerService來(lái)啟動(dòng)Home應(yīng)用程序LauncherT,Launcher在啟動(dòng)的時(shí)候便會(huì)通過(guò)PackageManagerServi/巴系統(tǒng)中已經(jīng)安裝好的應(yīng)用程序以快捷圖標(biāo)的形式展示在桌面上,這樣用戶(hù)就可以使用這些應(yīng)用程序了。既然作為Home應(yīng)用程序有這樣的優(yōu)先級(jí),那他的特點(diǎn)就是在AndroidManifest.xml文件
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- DB31/T 1279-2021實(shí)驗(yàn)裸鼴鼠生長(zhǎng)和繁殖期的配合飼料營(yíng)養(yǎng)成分
- DB31/T 1154-2019手術(shù)室X射線影像診斷放射防護(hù)及檢測(cè)要求
- DB31/T 1089-2018環(huán)境空氣有機(jī)硫在線監(jiān)測(cè)技術(shù)規(guī)范
- DB31/ 970-2016建筑用人造石單位產(chǎn)品能源消耗限額
- DB31/ 807.2-2015重點(diǎn)單位保安服務(wù)要求第2部分:特殊勤務(wù)保安
- DB31/ 329.8-2014重點(diǎn)單位重要部位安全技術(shù)防范系統(tǒng)要求第8部分:旅館、商務(wù)辦公樓
- 2025餐廳經(jīng)理勞動(dòng)合同模板
- 網(wǎng)絡(luò)安全政策與規(guī)范試題及答案
- 藝術(shù)創(chuàng)意園區(qū)入駐企業(yè)與運(yùn)營(yíng)管理協(xié)議
- 數(shù)字媒體廣告內(nèi)容原創(chuàng)版權(quán)授權(quán)合同
- 傳染病法律法規(guī)培訓(xùn)課件
- 高中地理學(xué)業(yè)水平合格性考試必修二知識(shí)點(diǎn)總結(jié)(會(huì)考)
- 職業(yè)升學(xué)就業(yè)協(xié)議書(shū)
- 旅行導(dǎo)游協(xié)議書(shū)
- 慢性胃炎考試試題及答案
- 浙江首考2025年1月普通高等學(xué)校招生全國(guó)統(tǒng)考政治試題及答案
- (完整版)重大危險(xiǎn)源清單及辨識(shí)表
- 試驗(yàn)室儀器設(shè)備檢定校準(zhǔn)證書(shū)和測(cè)試報(bào)告確認(rèn)表(公司范本)
- 《傳媒翻譯》教學(xué)大綱
- 新工科的建設(shè)和發(fā)展思考ppt培訓(xùn)課件
- [北京]大型房地產(chǎn)開(kāi)發(fā)項(xiàng)目成本測(cè)算實(shí)例及表格(全套)
評(píng)論
0/150
提交評(píng)論