




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式Linux小型化裁减嵌入式Linux小型化裁减2主要内容嵌入式Linux系统基本概念嵌入式Linux系统裁减与移植嵌入式LINUX软件开发嵌入式Linux小型化裁减3主要内容嵌入式Linux系统基本概念Linux嵌入式Linux系统裁减与移植嵌入式Linux应用嵌入式Linux小型化裁减416.1.1 嵌入式系统的定义MPUMPU微处理器微处理器电源电源模块模块时钟时钟复位复位FlashFlashRAMRAMROMROMUSBUSBLCDLCDKeyboardKeyboard外围电路外围电路OtherOther外设外设嵌入式系统硬件组成嵌入式系统硬件组成 嵌入式Linux小型化裁减5嵌入
2、式系统设备常见接口I/OA/D、D/A键盘键盘LCD存储器接口存储器接口网络设备接口网络设备接口嵌入式Linux小型化裁减6CISC和RISC指令集CISCCISC:复杂指令集(:复杂指令集(Complex Instruction Set ComputerComplex Instruction Set Computer)l具有大量的指令和寻址方式具有大量的指令和寻址方式l8/28/2原则:原则:80%80%的程序只使用的程序只使用20%20%的指令的指令l大多数程序只使用少量的指令就能够运行。大多数程序只使用少量的指令就能够运行。l如如Intel X86Intel X86系列或者兼容的低功耗芯
3、片系列或者兼容的低功耗芯片RISCRISC:精简指令集(:精简指令集(Reduced Instruction Set Computer)Reduced Instruction Set Computer)l在通道中只包含最有用的指令在通道中只包含最有用的指令l确保数据通道快速执行每一条指令确保数据通道快速执行每一条指令l使使CPUCPU硬件结构设计变得更为简单硬件结构设计变得更为简单l如如PowerPC, MIPS, ARM/XScalePowerPC, MIPS, ARM/XScale 嵌入式Linux小型化裁减7冯诺依曼体系结构模型指令寄指令寄存器存器控制器控制器数据通道数据通道输入输入输出
4、输出中央处理器中央处理器存储器存储器程序程序指令指令0 0指令指令1 1指令指令2 2指令指令3 3指令指令4 4数据数据数据数据0 0数据数据1 1数据数据2 2嵌入式Linux小型化裁减8哈佛体系结构指令寄指令寄存器存器控制器控制器数据通道数据通道输入输入输出输出中央处理器中央处理器程序存储器程序存储器指令指令0指令指令1指令指令2数据存储器数据存储器数据数据0数据数据1数据数据2地址地址指令指令地址地址数据数据嵌入式Linux小型化裁减916.1.2 嵌入式操作系统的特点“嵌入计算机系统的专用操作系统”。嵌入性:物理环境(小型)、电气环境(可靠)、成本(价廉)等要求。 专用性 :满足对象
5、要求的最小软、硬件配置等。 性能要求:多任务调度、实时性能功能要求:接口与通信能力嵌入式Linux小型化裁减10常见嵌入式操作系统 VxWorksVxWorks 市场占有率最高的系统。它支持多种处理器 ,高性能。 PSOSystemPSOSystem 模块化好,在中低端系统中应用广。pSOS已属于WindRiver。 QNXQNX 小巧灵活,在航空航天和工业控制中广泛应用 Windows CEWindows CE 多线程、完整优先权、多任务的操作系统。 图形界面好,开发工具友好 Linux-derived RTOS Linux-derived RTOS Montavist Linx, RTli
6、nux; Other OSOther OS VTRX,Palm OS,ucos etc嵌入式Linux小型化裁减1116.1.3 嵌入式Linux发展与应用专用嵌入式实时操作系统 vs 嵌入式Linux 操作系统专用嵌入式实时操作系统嵌入式Linux操作系统系统购买费非常昂贵商业版本需要一定服务费使用费每件产品需都需缴纳免费技术支持开发商一家支持商业版厂商和Linux社团网络协议栈需要额外购买免费且性能优异软件移植难,因为系统封闭易,因为代码开放产品开发周期长,因为参考代码有限短,应用和参考丰富实时性能好可用RTLinux等模块弥补稳定性好较好,高性能系统待验证嵌入式Linux小型化裁减12如
7、何选择合适的linux版本标准的Linux 版本。小型化的嵌入式版本。具有实时扩展功能的Linux 版本。Linux 特殊应用版本。例如有许多针对不同的如“瘦服务器”或“防火墙”应用的小型化、实时特性增强的版本。嵌入式Linux小型化裁减13网络可选择资源标准版本Debian:Red Hat:Slackware:Turbo Linux:嵌入式Linux小型化裁减14网络可选择资源小型化版本ETLinux:Linux Router Project:LOAF:ucLinux:嵌入式Linux小型化裁减15网络可选择资源实时扩展版RTLinux:RTAI:EL/IX:SRT-Linux:嵌入式Lin
8、ux小型化裁减16嵌入式linux构建与应用的关键技术对linux 的裁减达到小型化的目的;对不同嵌入式微处理器的linux 内核代码移植,驱动程序的研究;专业应用开发: 移植应用程序,开发面向特定应用的控制软件。嵌入式Linux小型化裁减17嵌入式嵌入式Linux操作系统实时性操作系统实时性 常用衡量实时性标准确定性(Determinism):系统的行为表现应该是确定的,每个系统调用执行的时间是可预测的。中断延迟时间(Interrupt Latency Time):从接收到中断信号到操作系统作出响应,并进入中断服务程序的时间;上下文切换时间(Context-Switching Time),就
9、是操作系统将控制权从执行中取回,然后交给另一个任务所需的时间。嵌入式Linux小型化裁减18嵌入式嵌入式Linux操作系统实时性操作系统实时性影响中断处理时间的因素处理器硬件电路的延迟时间,通常这个时间可以忽略。操作系统处理中断并将控制权转移给中断处理程序所需要的时间。操作系统的中断禁止时间,这是操作系统为了保护重要的系统程序代码暂停接受中断需要的时间。嵌入式Linux小型化裁减19嵌入式嵌入式Linux操作系统实时性操作系统实时性某任务中断1的服务程序中断2的服务程序中断禁止区中断2的中断延时中断1产生中断2产生中断1的中断延时t1t2t3嵌入式Linux小型化裁减20Linux内核与实时性
10、内核与实时性 对比项目Linux 2.4(s)Linux 2.6(s)内核在无负载时中断延时最大值8.531.0内核在重负载时中断延时最大值113.549.5内核在无负载时中断任务响应延时最大值104412内核在强负载时中断任务响应延时最大值4446578嵌入式Linux小型化裁减21嵌入式嵌入式Linux实时化技术实时化技术 非实时化通用内核实时化内核硬件平台非实时任务实时任务RTlinux双内核实时化结构双内核实时化结构嵌入式Linux小型化裁减22嵌入式嵌入式Linux实时化技术实时化技术非实时进程1非实时进程2原Linux内核实时任务实时内核硬件中断RTLinux任务处理流程任务处理流
11、程 嵌入式Linux小型化裁减23主要内容嵌入式Linux系统基本概念Linux嵌入式Linux系统裁减与移植嵌入式Linux软件开发嵌入式Linux小型化裁减24从何处开始?需要考虑的问题是否支持自己的硬件平台有多少可选软件、文件定制能力如何是否有完整文档、新版本升级是否方便等等一系列问题。可以选择的方法基于面向特定应用的嵌入式Linux版本基于通用嵌入式Linux版本基于某通用Linux系统和Linux源代码库嵌入式Linux小型化裁减25Linux系统的软件分层 使用使用C C库的应用程序库的应用程序C库库内核内核内核内核硬件硬件嵌入式Linux小型化裁减26内核,C库,Shell和实用
12、程序 典型的Linux系统包括3个主要的软件层:Linux内核、C库和应用程序; 内核主要的功能包括内存管理、进程调度、设备驱动、文件系统、网络协议栈和模块管理等; 内核之上是C库,这一层负责把符合POSIX标准的API转换成内核可以识别的形式; 离硬件最远的是应用程序层,细分包含两部分:系统程序,一般指运行系统所不可缺少的程序;用户程序,给用户提供各种功能;嵌入式Linux小型化裁减27嵌入式Linux系统构建流程 裁减编译内核建立root文件系统制作系统映像安装引导嵌入式Linux小型化裁减28第1步:裁减和编译内核获得内核源代码根据硬件平台获得对应的Linux系统源代码从一个通用系统,如
13、redhat系统获得源代码裁减编译内核的步骤配置内核更新编译文件1.编译内核嵌入式Linux小型化裁减29编译内核原则Linux内核拥有灵活方便的配置功能,菜单分为,芯片组支持,外设支持,文件支持,网络等,每类只将需要的内容编译进内核。根据目标系统的硬件配置选择模块根据应用目标选择其他功能模块应当保证内核只支持一种或是两种必要的文件系统,如ext2和minix;为支持内存虚拟磁盘启动,需要编译内核支持ram disk和initrd嵌入式Linux小型化裁减30第1步:裁减编译内核以root超级用户登录,进入目录/usr/src/linux。如果目标系统和主机系统不是同一硬件平台需要先建立交叉编
14、译环境并获得目标系统的内核源代码#make menuconfig对内核模块进行配置(也可以在X Window中运行make xconfig)。#make dep 更新配置文件#make bzImage (如果内核不大则执行#make zImage),执行该命令后,将在/usr/src/linux/arch/i386/boot目录下生成内核文件bzImage(或zImage)。若配置中加入了模块的支持(选项为M),还需要执行#make modules和#make modules_install。生成内核/usr/src/linux/arch/i386/boot/bzImage文件为内核文件改名为
15、MiniKernel备用嵌入式Linux小型化裁减31第2步:建立root文件系统 什么是什么是root文件系统?文件系统? 一个完整的Linux系统除了内核外,还必须有一个由C库和系统应用程序构成的root文件系统。 一个root文件系统包括支持完整Linux系统运行的全部东西。 建立建立root文件系统的步骤文件系统的步骤 在主机中建立目标系统的root文件系统目录结构 从代码库中挑选并裁减出适用的各种文件1.将root文件系统目录中的所有内容打包制作成映像嵌入式Linux小型化裁减32第2步:建立root文件系统root文件系统的内容文件系统的内容基本文件系统结构,至少含有目录/dev、
16、/proc、/bin、/etc、/lib、/usr、/tmp ;最基本的系统应用程序,如sh、ls、cp、mv等;最低限度的配置文件,如rc、inittab、fstab等;基本设备,如/dev/mem、/dev/ tty*、/dev/console;基本程序运行所需的C函数库。嵌入式Linux小型化裁减33第2步:建立root文件系统建立目录系统建立目录系统以root用户登录开发主机,在合适的目录下(如根目录下),用mkdir rootfs命令建立一个工作目录rootfs。在rootfs/目录下的内容就是今后目标系统根目录(/)下的内容。在当前目录下执行cd rootfs进入到rootfs目录
17、中,然后用mkdir命令分别在rootfs目录下建立以下目录: /etc 放置系统配置文件; /sbin 放置重要的系统程序; /bin 放置系统基本应用程序; /dev 设备文件的目录;/proc proc文件系统所需目录;/lib 准备存放共享函数库;/mnt 准备挂载其他设备的目录节点/usr 准备放置用户应用程序。嵌入式Linux小型化裁减34第2步:建立root文件系统 建立目录系统建立目录系统 /proc、/mnt和/usr在此情况下都是空的,只需要用mkdir创建它们即可。 /dev:设备文件需要用mknod产生。如果简单起见用cp -dpR 参数开关来复制原系统的设备文件节点也
18、可以,例如cp -dpR /dev/mem /mnt/dev 。至少需要console、kmem、mem、null、ram、tty*等文件。 /etc:一般可以包含rc.d/* (系统启动脚本)、fstab(列出要登录的文件系统)、inittab(包含启动过程参数) 。嵌入式Linux小型化裁减35第2步:建立root文件系统 建立目录系统建立目录系统/bin和/sbin:这两个目录中包含有一些系统运行不可缺少的程序和大量实用程序,如ls、mv、cat、cp等。系统实用程序可以根据需要选择拷贝,而系统运行不可缺少的一些程序必须拷贝过来,如init、getty、login、mount、bash等
19、。/lib: 必须有函数库装载器,这个装载器或是ld.so (对 a.out 库) 或是 ld-linux.so (对 ELF 库)。如果有一个模块化的内核,你还得必须考虑需要加载的模块。它们都位于/lib/modules。嵌入式Linux小型化裁减36第2步:建立root文件系统裁减裁减root文件系统文件系统动态库的裁减精简系统应用程序精简嵌入式系统专用程序嵌入式Linux小型化裁减37第2步:建立root文件系统裁减裁减root文件系统文件系统动态库的裁减Linux的C库glibc就是系统的动态连接库,相当于Windows系统的系统dll动态连接库。用软件工具扫描系统所需要的库,然后进行
20、删减。采用精简版本的C库,目前可以选择的开源动态库有libc5、uclibc、dietlibc等,但需要测试兼容性。 嵌入式Linux小型化裁减38第2步:建立root文件系统精简系统应用程序Shell是必须的,采用Shell脚本开发的程序因为是解释性的,所以尺寸往往只需要几百个字节,而完成相同功能的C程序编译后都至少要几KB。 /bin和/sbin目录下的ls等各种系统实用程序需要精简嵌入式Linux小型化裁减39第2步:建立root文件系统用busybox精简系统应用程序Busybox 是 Debian GNU/Linux 的Bruce Perens 首先开发的。Busybox 编译出一个
21、单个的独立执行程序,就叫做 busybox。但是它可以根据配置,执行 ash shell 的功能,以及几十个各种小应用程序的功能。采用busybox作为Shell和系统实用程序的精简并不会改变系统的使用方式,因为编译busybox除了生成busybox这个可执行程序外,还为每个busybox替代的系统实用程序生成了一个符号链接。例如,对于ls实用程序,会生成符号连接ln -s /bin/busybox /bin/ls。 嵌入式Linux小型化裁减40第2步:建立root文件系统精简嵌入式系统专用程序原则一,没有用处的软件一律不安装在嵌入式系统中。原则二,如果某软件模块是必须的,则寻找是否有相同
22、功能的嵌入式版本的软件可以作为其替代品。如用t d,boa等替代庞大的Apache。 原则三,如果只能选择某软件模块,则通过重新配置和编译优化来进行裁减。如采用动态链接库,优化编译选项等原则四,对于自行开发的软件,在设计、开发和编译的时候都要针对嵌入式系统进行优化。调用精简的C库函数等嵌入式Linux小型化裁减41第3步:制作root文件系统映像软件包名称软件包名称版本版本许可证许可证描述描述thttpd2.15-1BSD一个小型、快速而且安全的Web服务器,可以适合大多数Web服务器要求,运行速度也比Apache要快。busybox1.00GPL一个Linux系统实用程序的微型集合。它为嵌入
23、式系统提供符合POSIX标准的环境,基本上可以满足多数用户的需要。glibc2.3.3LGPL共享库:标准C库、标准数学库等,是系统运行的基本成分。对嵌入式环境进行了优化编译。tinylogin1.4GPL它用于登录嵌入式系统、接受其验证身份、为其修改密码,并能维护其用户和用户组。为了增强系统安全性,它还支持影子口令。对嵌入式系统上的busybox是极好的补充。lilo21.4-4BSD License引导Linux系统的一个基本程序。Lilo可以从软盘或是硬盘上把Linux内核装入,引导内核,并把系统控制权交给内核。Lilo也可以引导其他的操作系统。sgap2.0自主开发应用由切换控制、映射
24、协议和几个不同的网络应用服务模块组成,提供网络安全隔离和可控信息交换功能。net-tools1.54-1GPL基本的网络配置工具,如netstat,route等。netkit-base0.16-2BSD基本的网络实用工具,如ping,inetd等。netkit-telnet0.14-3BSD包括命令行的telnet终端和一个telnet守护进程。嵌入式Linux小型化裁减42第3步:制作root文件系统映像集成好的root文件系统最终要安装到嵌入式系统目标板上去 。精简的root文件系统其体积比起一般配备的只有十几MB字节大小的flash存储器来讲还是太大。flash存储器的特点不允许系统像读
25、写磁盘驱动器那样反复读写它。很多专用嵌入式Linux,如LRP等,都有自己独特的系统映像打包、组织和管理方式,但其原理都大同小异。 嵌入式Linux小型化裁减43第3步:制作root文件系统映像在开发主机中建立一个loop设备的临时挂接点,准备后面用来暂时挂载目标嵌入式系统的root文件系统:mkdir /mnt/loop 建立一个大小为的临时文件并将其清零。这个文件会被用来制作root文件系统的映像,因此其大小是根据前面对root文件系统裁减的情况确定的,可以根据实际情况进行调整:dd if=/dev/zero of=/tmp/loop_tmp bs=1k count=6600 在开发主机上
26、将一个loop设备与临时文件联系起来:losetup /dev/loop0 /tmp/loop_tmp在这个loop设备上建立文件系统,Linux内核识别两种可以直接拷贝到ramdisk的文件系统,它们是minix和ext2,ext2性能更好,因此我们建立ext2文件系统:mke2fs /dev/loop0嵌入式Linux小型化裁减44第3步:制作root文件系统映像将loop设备上的虚拟盘挂在前面建立挂接节点/mnt/loop上:mount /dev/loop0 /mnt/loop -t ext2将制作好的root文件系统所有内容拷贝到所挂载的节点上: cp -a /rootfs/* /mn
27、t/loop卸下挂接点,删除建立的挂接点,再取消loop设备与临时挂接点的联系:umount /mnt/looprmdir /mnt/loop losetup -d /dev/loop0压缩文件系统后,就拥有了一个目标嵌入式系统的root文件系统的压缩映像,最后删除最初建立的临时文件:dd if=/tmp/loop_tmp | gzip -9 rootfs.gzrm -f /tmp/loop_tmp检查压缩后的root文件映像的大小,并比较目标系统的flash尺寸,如果超出了大小,还得进一步裁减root文件系统后重新制作映像:ls 嵌入式Linux小型化裁减45第4步:安装引导 嵌入式Linu
28、x系统启动过程 嵌入式Linux小型化裁减46第4步:安装引导用ext2文件系统格式化flash磁盘。因为flash磁盘是装在第二个IDE接口上的,所以它是hdc设备,格式化它的第一个分区:mke2fs /dev/hdc1 挂载flash磁盘到开发系统上/mnt/temp的挂载节点上:mount /dev/hdc1 /mnt/temp/ 在flash磁盘上建立用来存放映像的目录:mkdir /mnt/temp/boot mkdir /mnt/temp/etc拷贝先前编译好的嵌入式Linux的内核:cp /usr/src/linux/arch/i386/boot/MiniKernel /mnt/
29、temp/boot拷贝安装Lilo需要的文件:cp /boot/boot.b /mnt/temp/boot/cp /etc/lilo.conf /mnt/temp/etc/拷贝已经制作好的root文件系统的映像文件:cp /rootfs/rootfs.gz /mnt/temp/ 嵌入式Linux小型化裁减47第4步:安装引导安装后的根目录结构(/mnt/temp/) boot/ etc/RAMDisk和initrdRAMDisk就是把RAM中的一块空间拿出来作为磁盘设备来用,initrd使用了RAMDisk技术;使用initrd的理由:加载内核模块,驱动存放根文件系统的介质;相对于访问软盘,R
30、AMDisk的速度快得多;嵌入式Linux小型化裁减48第4步:安装引导一般嵌入式系统烧写flash的方法用专用仪器烧写;启动bootloader后通过通信口烧写;通过BDM,JTAG等调试端口烧写X86系统CF卡或者DOM等都可以作为硬盘,通过IDE接口挂接在主机系统上进行读写。嵌入式Linux小型化裁减49RAMDisk和initrd RAMDisk就是把RAM中的一块空间拿出来作为磁盘设备来用,显然这会浪费内存; initrd使用了RAMDisk技术,常用于软盘启动中; 使用initrd的理由:加载内核模块,驱动存放根文件系统的介质;相对于访问软盘,RAMDisk的速度快得多;可以将软驱
31、空闲出来;嵌入式Linux小型化裁减50第4步:安装引导脚本文件 #begin#default=linuxboot=/dev/hdcdisk=/dev/hdcimage=/boot/MiniKernellabel=linuxread-writeroot=/dev/ram0append= console=ttyS1,9600n8 ramdisk_size=65536 load_ramdisk=1#end#嵌入式Linux小型化裁减51第4步:安装引导在flash磁盘上安装Lilo引导程序,注意参数-r指明了Lilo引导程序安装的设备:lilo -v -r /mnt/temp/卸载flash磁盘,
32、准备进行测试:umount /mnt/temp/嵌入式Linux小型化裁减52主要内容嵌入式Linux系统基本概念Linux嵌入式Linux系统裁减与移植嵌入式Linux软件开发嵌入式Linux小型化裁减5316.4.1 开发系统与目标系统开发系统与目标系统 以太网Linux/PC服务器Windows工作站Linux/PC工作站Internet串行线BDM电缆串行线开发板开发板JTAG电缆嵌入式Linux小型化裁减54服务器软件系统Redhat linux 装上所有的网络服务软件嵌入式linux应用系统开启nfs, telnet, ftp 服务Nfs 给目标板 ,telnet与ftp给wind
33、ows客户机嵌入式Linux小型化裁减55开发流程开发模式编写驱动程序配置、编译内核下载、引导内核用NFS文件共享调试应用程序嵌入式Linux小型化裁减56开发流程固化模式应用程序 + 驱动程序构建Ramdisk编译内核烧写Flash嵌入式Linux小型化裁减57开始新工程编辑源代码交叉编译 连接仿真调试程序下载台式/笔记本式PC机并口JTAG仿真器网络接口JTAG接口USB接口串口0 开发板串口USB接口以太网口stubDebug DvkCPU处理器执行监测结果超级终端 开发板实验流程结束嵌入式Linux小型化裁减5816.4.1 开发系统与目标系统开发系统与目标系统 用网络文件系统挂接应用
34、软件用网络文件系统挂接应用软件设置Linux服务器的IP地址为。root用户登录后用netconf命令配置支持网络文件系统服务器。设置输出目录是/usr/cross/project,而且使得主机IP为可读写。保存设置后运行ntsysv使NSF启动。在编译目标系统内核时选择支持可读写NSF文件系统,并在其root文件系统的/etc/fstab文件中加入一行::/usr/cross/project /mnt/nfs nfs设目标系统的IP地址为。1.当目标系统启动后,从开发主机telnet到目标系统,执行mount a命令,在目标系统中的/mnt/nfs目录下就会挂载开发系统
35、中的输出目录。嵌入式Linux小型化裁减5916.4.2 交叉编译环境开发应用程序如同嵌入式系统构建那样,同样遵循编辑,编译,最后下载到目标板运行的过程。 在开发主机的开发目录/usr/cross下至少存在如下目录结构bin/ 编译目标系统运行程序的编译器,调试器等工具powerpc-linux/include/ 编译目标系统应用程序需要的头文件powerpc-linux/lib/ 编译目标系统应用程序需要的运行库project/ 开发目标系统应用程序的工作目录嵌入式Linux小型化裁减6016.4.2 交叉编译环境(1)在开发系统的/usr/coss/project下编辑文件:/*begin*/#
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- ktv消防合同协议
- 工程维修团购合同协议
- 建设工程拆除合同协议
- 验光机买卖合同协议
- 合同解除和还款协议范本
- FDA合同生产安排质量协议
- 工程项目会计合同协议
- 废旧车辆买卖合同协议
- 合同纠纷调节协议书范本
- 香港回归谈判合同协议
- 腰椎人工椎体置换术
- 综合一体化指挥调度解决方案
- 家长会课件:七年级家长会班主任优质课件
- 人工智能导论智慧树知到课后章节答案2023年下哈尔滨工程大学
- 脑中风病人病情观察
- 第14课 背影 课件(共26张ppt)
- 汽车维修工(三级)技能理论考试题库(浓缩300题)
- 石景山区行政事业单位资产清查业务培训
- 《今天怎样做教师-点评100个教育案例》读书分享会PPT模板
- 高效节水灌溉技术与灌溉排水工程设计及案例分析
- 《将军胡同》阅读试题及答案
评论
0/150
提交评论