已阅读5页,还剩58页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ubifs文件系统的制作过程&遇到的问题及解决方案总结-之一“uboot中添加对UBIFS文件系统的支持” 分类: 嵌入式 2012-04-18 21:34 314人阅读 评论(0) 收藏 举报 为了更好的理解ubifs根文件系统的制作,首先,我们简单的说一下,系统的组成: Bootloader(uboot)parames(启动参数)kernel(内核)root Filesystem(根文件系统)bootloader(uboot)的作用就是用来加载操作系统;而嵌入式linux系统由linux内核和根文件系统两部分构成,两者缺一不可。所以我们要制作一个UBIFS的根文件系统,首先必须让上面系统组成的几个部分都支持UBIFS文件系统,就得在这几个组成部分添加一些“东西”(支持UBI的配置):(打个我自己理解的比喻吧:“娶媳妇”比作-启动系统,娶媳妇是不是要经过老爸、老妈、丈母娘、岳父的同意和支持?bootloader、parames、kernel、root Filesystem便是老爸、老妈、丈母娘、岳父.O(_)O,而你叫UBI)这篇博文主要是详细解析:uboot中添加对UBIFS文件系统的支持一、移植环境主机:vmware-redhat5开发板:mini2440-256MB nandflashkernel:2.6.29 编译器:arm-linux-gcc-4.3.2.tgzuboot: u-boot-2008.10 二.移植步骤本次移植的功能为:支持UBIFS文件系统1.在include/configs/mini2440.h中添加如下配置: (注意:不同的开发板在include/configs/目录下对应的修改的配置文件不同,我的开发板是mini2440所以修改的是mini2440.h)#define CONFIG_MTD_DEVICE#define CONFIG_MTD_PARTITIONS#define CONFIG_CMD_MTDPARTS#define CONFIG_LZO#define CONFIG_RBTREE#define CONFIG_CMD_UBIFS/要支持ubIfs首先得让uboot支持UBIFS的烧写命令#define CONFIG_CMD_UBI/uboo支持的ubifs烧写命令:1.mtdparts:用来给NAND分区;/*2.nand erase.part:用来擦除指定分区 等这些命令 在“UBIFS镜像的制作&烧写”博文理解*/其次要支持MTD(memory technology device内存技术设备)是用于访问memory设备(ROM、flash)的Linux的子系统#define MTDIDS_DEFAULT nand0=nandflash0/同时要给nandlflash建立默认的分区,#define MTDPARTS_DEFAULT mtdparts=nandflash0:384k(bootloader),/我的分区: 128k(params), 5m(kernel), 64m(root)/*还要修改下面几个宏,因为使用UBIFS会占用更多的堆、栈空间*/#define CONFIG_STACKSIZE (512*1024)#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE+1024*1024)#define CONFIG_SYS_GBL_DATA_SIZE 5122.回到uboot的顶层目录下(可能拿到的uboot已被编译过,所以最好要用此命令清理中间文件)执行命令:make clean(uboot是通用的bootloader,支持多种开发板,所以编译之前先选择使用哪种board)执行命令:make mini2440_config注意:我用的是mini2440开发板,所以要编译这个开发板使用的uboot,所以这里的目标为mini2440_config,表示选择的board是mini2440(mini2440_config在Makefile标准术语称为“目标”,可以在uboot顶层Makefile找到该目标)执行命令(开始编译uboot) :make CROSS_COMPILE=arm-linux-ubifs文件系统的制作过程&遇到的问题及解决方案总结-之二“Linux内核中添加对UBIFS文件系统的支持” 分类: 嵌入式 2012-04-19 13:55 156人阅读 评论(0) 收藏 举报 一、移植环境主机:vmware-redhat5开发板:mini2440-256MB nandflashkernel:2.6.29 编译器:arm-linux-gcc-4.3.2.tgzuboot: u-boot-2008.10 二.移植步骤1.在内核顶层目录下使用命令:make menuconfig ,进入内核配置菜单,添加对UBIFS文件系统的支持。(补充:如果菜单里没有UBIFS file system support的选项,一般2.6.27以上的内核已经支持了UBIFS,所以只需把内核顶层目录下的.config文件里的#CONFIG_MTD_UBI is not set 设置成 :CONFIG_MTD_UBI=y)如图:之后退出.config文件并保存。再次进入make menuconfig 菜单这时已经有了UBIFS file system support的选项,把它设为UBIFS file system support *是编译进内核的意思2.在 arch/arm/plat-s3c24xx/common-friendly-arm.c中,添加对NAND Flash 的MTD分区。如图:49-70行为修改部分(注意:对应不同开发板路径和分区文件会有所不同,方正就是在arch/arm/mach-s3c2440 或者arch/arm/plat 下面的某个文件 ;我原来就是因为弄错了路径和分区文件所以导致和uboot的默认分区对不上号,所以启动出错,大家可以参考我曾经的出错获得一些启示:/read.php?tid-19717.html)之后,退出保存;3.回到内核顶层目录之后,使用命令:make uImage ARCH=arm CROSS_COMPILE=arm-linux-,编译内核,在arch/arm/boot/目录下生成内核的镜像uImage,并将生成的uImage拷贝到/tftpboot/ 目录下等待下载烧写。注意:若没有生成uImage,看编译内核的提示说mkimage命令没有发现(找不到),说明你的系统中没有安装mkimage工具;解决办法:在uboot 中我们知道mkimage是用来产生u-boot格式映像文件的,所以可以在u-boot源代码(编译之后)中把mkimage拷贝到/bin文件目录下。具体操作:我们从u-boot顶层目录下的tools目录中的mkimage拷贝到/usr/bin中,然后重新编译一次内核(即重新执行步骤3的命令)ubifs文件系统的制作过程&遇到的问题及解决方案总结-之三“UBIFS镜像的制作&烧写” 分类: 嵌入式 2012-04-19 16:23 254人阅读 评论(0) 收藏 举报 一、移植环境主机:vmware-redhat5开发板:mini2440-256MB nandflashkernel:2.6.29 编译器:arm-linux-gcc-4.3.2.tgzuboot: u-boot-2008.10 二、制作ubifs镜像步骤1:将文件系统制作成 ubifs镜像文件,需要使用mkfs.ubifs工具,该工具可以在网址:/mtd-utils.git,下载mtd-utils工具包源码编译后获得。在安装mtd-utils之前首先在系统中安装如下两个软件:(因为原先我看一些博文给的地址都不可访问,只好按名称东下一个西下一个,编译后都出错没法解决,特此提醒,后来暮然回首,在我的以前做过的文件系统中找到了以下三个经编译后可成功生成ubifs命令工具,(现放我资源里,提供给大家)请放心下载)a.安装libacl,(我资源里)下载地址:/detail/yx_l128125/4243336输入命令:rpm -ivh libacl-2.2.23-5.4.e14.i386.rpmb.安装lzo-2.05, (我资源里)下载地址:/detail/yx_l128125/4243343执行如下命令:# tar zxvf lzo-2.05.tar.gz# cd lzo-2.05# ./configure# make# make installc.安装 mtd-utils.tar.gz (我资源里)下载地址:/detail/yx_l128125/4243333# tar zxvf mtd-utils.tar.gz# cd mtd-utils# ./configur# make # make install步骤2.使用上述安装命令后,mkfs.ubifs被安装到了/usr/local/usr/sbin目录下,可使用命令:export PATH=$PATH:/usr/local/usr/sbin将该路径包含进环境变量,然后使用命令:mkfs.ubifs -m 2048 -c2048 -e 126976 -r /nfsroot/rootfs -o rootfs.bin ,将根文件系统所在目录rootfs制作为ubifs镜像文件rootfs.bin,将该文件拷贝到/tftpboot/目录下等待下载烧写。(注意,你在哪执行这个命令,生成的.bin镜像就在执行此命令的当前目录下生成)【注意点:1.上面制作的ubifs镜像文件使用的命令参数是根据开发板所使用的NAND Flash来确定的,我的NAND Flash容量是256MB,可以适应命令:mkfs.ubifs -h 来查看各个命令选项的意思,我这里只简单的介绍一下:-r :要制作成镜像的根文件系统的路径-m:最小的I/O操作的大小(也就是NAND FLASH的一个page的大小)-e : 逻辑擦除块的大小-p :物理擦除块的大小-c :最大逻辑擦除块的数量-o :最终制作成的根文件镜像的文件名注意点:2.我原来用mkfs.ubifs -m 2048 -c2048 -e 126976 -r /nfsroot/rootfs -o rootfs.bin 制作成的镜像,启动内核时有错,我曾经的出错现象:/read.php?tid-19717.html但是发现启动内核时打印此出错信息:UBI error: validate_ec_hdr: bad VID header offset 512, expected 2048 UBI error: validate_ec_hdr: bad EC header UBI error: ubi_io_read_ec_hdr: validation failed for PEB 556 UBI error: ubi_init: cannot attach mtd3 UBI error: ubi_init: UBI error: cannot initialize UBI, error -22 后来找到了相近的解决方案:/space.php?uid=20632682&do=blog&id=82414按照这篇帖子最终内核成功的启动了我现在还不太懂为什么“-e 126976”而不是大多数制作ubifs文件系统写的 “-e 129024”如果大家知道请通知我,不胜感激!】步骤3.通过Jlink或者H-JTAG将u-boot.bin先烧进norflash,之后连接好串口线和网线,从norflash启动开发板。步骤4.设定好网络相关的环境变量,重点是先设置好ipaddr和serverip(因为下面用到tftp协议下载)之后用sav命令保存环境变量;之后用命令:tftp 31000000 u-boot.bin 下载uboot.bin到内存地址31000000处。步骤5:使用命令:nand erase 0 60000,将nand flash的前0x60000字节空间擦除掉。在使用命令:nand write 31000000 0 60000,将内存31000000处的u-boot.bin烧写到nand flash中。步骤6:使用命令:tftp 31000000 uImage使用命令: nand erase 80000 300000,将nand flash的kernel分区擦除掉,在使用命令:nand write 31000000 80000 300000 ,将内存31000000处的uImage烧写到nand flash中。步骤7:使用命令:mtdparts default使用默认分区对Nand Flash进行分区。使用命令:nand erase root ,擦除root分区。使用命令:ubi part root 2048,激活root分区进行ubi格式化。最后使用命令:ubi create rootfs ,创建rootfs分区。【注意点:原来我用命令: ubi part root来激活root分区进行ubi格式化,但是启动内核时出现报错信息(看红字部分),所以按这篇博文/space.php?uid=20632682&do=blog&id=82414改成:ubi part root 2048 之后就没有报错了UBI error: validate_ec_hdr: bad VID header offset 512, expected 2048UBI error: validate_ec_hdr: bad EC header UBI error: ubi_io_read_ec_hdr: validation failed for PEB 556 UBI error: ubi_init: cannot attach mtd3 UBI error: ubi_init: UBI error: cannot initialize UBI, error -22 】步骤8:使用命令:tftp 31000000 rootfs.bin下载rootfs到默认内存地址31000000处,使用命令:ubi write 31000000 rootfs $filesize,将内存31000000处大小为$filesize的rootfs.bin通过ubi方式烧写到nand flash的对应分区中。步骤9: 设置启动变量: bootargs ,(bootargs是uboot传给内核的参数,使用命令:set bootargs ubi.mtd=3 root=ubi0:rootfs rootfstype=ubifs console=ttySAC0 init=/linuxrc rw 设置启动命令:bootcmd,(bootcmd 是uboot启动的命令,输入命令:set bootcmd nand read 31000000 80000$filesize; bootm 31000000最后使用sav命令保存环境变量)步骤10:关掉电源,让开发板重新从nand flash启动,可以看到内核成功加载了我们只做的ubifs文件系统,如图:注意点1:set bootcmd nand read 31000000 80000$filesize; bootm 31000000 中的31000000是启动内核的地址,内核启动时自动找到31000000这个地方来启动kernel;而前面用过的tftp 31000000 xxx中的31000000是内存中的地址(存放在内存地址中的数据掉电后就没了)注意点2:如果 bootm后面不跟地址,默认是到30008000处寻在内核启动的;如果bootcmd环境变量写成:set bootcmd nand read 31000000 80000$filesize; bootm最终这种现象:如图(因为它到30008000没有找到内核,内核原来由80000的内存地址读到了31000000地址处)为S3C2440移植内核 2012-04-24 22:23 20人阅读 评论(0) 收藏 举报 1.修改晶振频率 S3C2440支持两种频率:12MHZ 和16MHZ.目前市面上出售的开发板大多使用的是12MHZ的晶振,而内核源代码采用的是16MHZ频率,从而产生了错误的PCLK,因此导致内核向串口输出数据时使用了错误的比特率(正确的应该是),这样在超级终端上看到的就是乱码。因此我们只须修改内核源代码中的晶振频率即可。 将内核顶层目录下的 arch /arm/mach-s3c2440/mach-smdk2440.c的第180行:s3c24xx_init_clocks(16934400); 改为:s3c24xx_init_clocks(12000000);2.修改Nand Flash分区表 这次内核正常启动,不再出现乱码,但未能成功挂载根文件系统。出现错误如下: VFS :Mounted root (jffs2 filesystem ). Freeing init memroy:132k Warning : unable to open an initial console. Kernel panic - not syncing:No init found. Try passing init = option to kernel.仔细查看内核出错前的输出,发现内核在Nand Flash 上创建了8个分区:Creating 8 MTD partition on NAND 64MiB 3,3v 8-bit :0x00000000 - 0x00004000 :Boot Agent0x00000000 -0x00200000 :S3C2410 flash partition 10x00400000 -0x00800000 :S3C2410 flash partition 20x00800000 -0x00a00000 :S3C2410 flash partition30x00a00000 -0x00e00000 :S3C2410 flash partition 40x00e00000 -0x01800000 :S3C2410 flash partition 50x01800000 -0x03000000 :S3C2410 flash partition 60x00300000 -0x04000000 :S3C2410 flash partition 7kernel commal line : noinitrd root=/dev/mtdblock2 console = ttySAC0 rootfstype=jffs2由上面看出,内核会到NAND Flash 的0x00400000 0x00800000 区间来挂载根文件系统,但事实上通过u-boot烧写根文件系统时,是将其烧写到Nand Flash 的0x00400000 0x04000000 这个区间。所以内核不能成功挂载根文件系统。因此,必须修改内核对Nand Flash的分区定义,让第3个分区位于0x00400000-0x04000000这个区间。 修改 arch /arm/plat-s3c24xx/common-smdk.c文件 ,将staticstruct mtd_partition.函数做如下修改,这样一来,整个Nand Flash 被划分为4个分区。第一个分区大小1MB,存放u-boot;第二个分区大小3MB,存放kernel;第三个分区大小60MB,存放根文件系统;第四个分区从第64M开始一直到Nand Flash的最后,可用于扩展。staticstruct mtd_partitionsmdk_default_nand_part = 0 = .name = Bootloader , .size = SZ_1M,.offset = 0, , 1 = .name = kernel, .offset = SZ_1M, .size = SZ_2M + SZ_1M, 2 = .name = Root filesystem , .offset = SZ_4M, .size = SZ_64M - SZ_4M, 3 = .name = Extended, .offset = SZ_64M, .size = MTDPART_SIZE_FULL,;内核Kconfig 与 Makefile 文件分析 分类: 嵌入式 2012-04-25 11:36 60人阅读 评论(0) 收藏 举报 一.内核构造系统简介 内核是个复杂庞大的系统,对它进行配置、裁剪、编译原本非常地复杂和困难,但现在却只需要简单的两个命令:(1)make menuconfig ;(2)make uImage 就搞定了,原因是在其背后有一个设计精巧的内核构造系统帮助我们精确的完成了各项任务。内核构造系统最关键的组成元素就是各个目录下的Kconfig 文件和 Makefile文件,本节将对这两类文件进行介绍,以使大家了解内核构造系统的基本情况,从而能够修改它们,以完成向内核中添加功能组件的目的。二. Kconfig 文件精解* Kconfig 文件的作用是: 1.控制make menuconfig 时, 出现的配置选项;2.根据用户配置界面的选择,将配置结果保存在.config 配置文件(该文件将提供给Makefile使用,用以决定要编译的内核组件以及如何编译)。初始Kconfig文件是arch /arm/Kconfig ( Kconfig文件的语法和语义,详情可查阅内核源码中的Documentation /kbuild/kconfig-language.txt 文件 )(一)Kconfig 文件的基本要素:config 条目(entry) configYAFFS_FStristate YAFFS2 file system support default y depends onMTD_BLOCK selectYAFFS_YAFFS1 selectYAFFS_YAFFS2 help YAFFS2 , or Yet Another Flash Filing System , is a filing system optimised for NAND Flash chips. To compile the YAFFS2 File system support as a module, choose M here :the module will be called yaffs2.Ifunsure , say N上面的config 条目,各部分的含义是:(1)YAFFS_FS为变量名,将在.config 中以CONFIG_YAFFS_FS=y 或 n 的形式出现,如图(2)tristate 为出现在配置菜单中的文字,没有它,将使得用户不能在配置界面中显示并配置它,同时它也为变量取值的类型,可为y 、n 、m(3)default :为变量默认值,可被用户设置值覆盖。(4)depends on :表示该变量必须在MTD_BLOCK被设置的情况下才能进行设置,否则取值为n ,即使default为y(注:原来我的.config 文件中出现的形式时#CONFIG_YAFFS_FS is not set ,所以一致后来在make menuconfig菜单中找不到YAFFS2 file system support的选项,就是因为这个原因,后来设置成CONFIG_YAFFS_FS=y还是没有YAFFS2 file system support的选项,因为没有理解depends on MTD_BLOCK ,后来理解了,再次到.config文件中设置了此选项,菜单中终于有了YAFFS2 file system support的选项)(5)select :表示它将影响到变量YAFFS_FS,使得YAFFS_FS至少应该配置为y或m(如果它最终取值为y 或 m )(6) help :中的文字将作为配置界面中的帮助信息。附加说明:* 无depends on ,default 为y : 默认为y。 一般用于必须要设置的选项,此时不要设置prompt 。* 有depends on ,default 为y :所依赖的条目己设置,则默认为y ; 所依赖的条目未设置,则为n.* 有depends on ,default 为n :所依赖的条目己设置,则默认为n; 所依赖的条目未设置,则为n.* 无depends on ,default 为n :在为设置prompt的情况下,此选项想要被设置,需要由其他选项来select它。二.Kconfig 中变量的取值类型 Kconfig 中变量取值类型总共有5种。其中做常见的是tristate 和 bool ,分别对应于make meuconfig 配置界面中 和 选项。(1)tristate :可取y 、n 、m。(2)bool (其为tristate的变体) :可取 y 、n(3)string :取值为字符串,如:CONFIG_CMDLINE = root =/dev/hdalro init = /bin/bash console =ttySAC0 (4)hex (其为string的变体):取值为十六进制数据,如:CONFIG_VECTORS_BASE =0xffff0000.(5)int (其为string的变体):取值为十进制数据,如:CONFIG_SPLIT_PTLOCK_CPUS=4096三.Kconfig 文件的要素:source由于内核源代码中大多数目录下都有各自的Kconfig 文件,因此需要一种手段将所有的Kconfig 文件组织为一个整体。这就是source的功能,它用于引入另一个Kconfig文件,有点类似于C语言的#include 。(举例:在内核的fs/Kconfig 中增加一行: source fs/yaffs2/Kconfig 就是如此)续篇:.config 文件说明make menuconfig 配置完成退出时,选择保存,则用户所做的选择将保存在内核源代码顶层目录文件中.config文件中。下面.config文件的片段显示内核配置者作了如下选择:将YAFFS_FS 、YAFFS_YAFFS1功能编译进uImage;不编译BFS_FS、EFS_FS、YAFFS_9BYTE_TAG功能;续篇:Makefile 文件说明下面是内核drivers/net/Makefile 文件的片段:12 obj - $ (CONFIG_ATL1) += atl1/13 obj - $ (CONFIG_GIANFAR) += gianfar_driver.o1415 gianfar_driver - objs : = gianfar.o 16 gianfar_ethtool.o 17 gianfar_mii.o 18 gianfar_sysfs.o26 obj - $ (CONFIG_PLIP) + = plip.o它的含义是:(1)第26行,如果.config文件中变量CONFIG_PLIP=y,那么将编译本目录下的plip.文件并将其功能集成进uImage ;如果.config文件中变量CONFIG_PLIP=m,那么将编译本目录下的plip.c文件生成模块plip.ko;否则,将不编译plip.c。(2)第1318行,如果config文件中变量CONFIG_GIANFAR=y,那么将编译本目录下的cgianfar.c、gianfar_ethtool.c、gianfar_mii.c、gianfar_sysfs.c文件并将其功能集成进uImage ;如果config文件中变量CONFIG_GIANFAR=m,那么将编译本目录下的cgianfar.c、gianfar_ethtool.c、gianfar_mii.c、gianfar_sysfs.c文件生成模块并将其功能集成进gianfar_driver.ko ;否则不编译cgianfar.c、gianfar_ethtool.c、gianfar_mii.c、gianfar_sysfs.c文件。(3)第12行,如果.config 文件中变量CONFIG_ARL1=y,将递归进入本目录的子目录atl1,并将根据子目录下的Makefile文件内容决定改子目录如何进行编译;否则,将不进入本目录的子目录atl1进行编译。例如:下面是内核fs/Makefile 文件的片段:如图:之后进入yaffs2子目录下的Makefile 看看:如图:制作ubifs文件系统 分类: 嵌入式linux 2010-11-08 10:32 2447人阅读 评论(1) 收藏 举报 1,安装相关的软件包apt-get install liblzo2-dev2,获取相关的工具mkfs.ubifs和ubinize这两个工具是制作ubifs文件系统的时候用到,它们是mtd-utils工具包中的内容,mtd-utils工具包你可以从下面的网站下载和编译出来:官方网站:/index.html资源下载网站:/3,创建一个create-ubifs.sh脚本,主要是调用mkfs.ubifs和ubinize工具和相关参数来制作ubifs文件系统,内容如下:#!/bin/bash# Script to generate ubifs filesystem image. # ubinize configuration fileconfig_file=rootfs_ubinize.cfg# Function to check result of the commandcheck_result() if $? -ne 0 then echo FAILEDelse echo SUCCESSFULfi# Function to check whether an application existscheck_program() for cmd in $do which $cmd /dev/null 2&1 if $? -ne 0 then echo echo Cannot find command /$cmd/ echo exit 1 fidoneif $# -ne 5 then echo echo Usage: create-ubifs.sh page_size_in_bytes pages_per_block partition_size_in_bytes blocks_per_device path_to_rootfs echo exitfipage_size_in_bytes=$1echo Page size $page_size_in_bytesbytes.pages_per_block=$2echo Pages per block $pages_per_blockpartition_size_in_bytes=$3echo File-system partition size $partition_size_in_bytesbytes.blocks_per_device=$4echo Blocks per device $blocks_per_devicepath_to_rootfs=$5# wear_level_reserved_blocks is 1% of total blcoks per devicewear_level_reserved_blocks=expr $blocks_per_device / 100echo Reserved blocks for wear level $wear_level_reserved_blocks#logical_erase_block_size is physical erase block size minus 2 pages for UBIlogical_pages_per_block=expr $pages_per_block - 2logical_erase_block_size=expr $page_size_in_bytes /* $logical_pages_per_blockecho Logical erase block size $logical_erase_block_sizebytes.#Block size = page_size * pages_per_blockblock_size=expr $page_size_in_bytes /* $pages_per_blockecho Block size $block_sizebytes.#physical blocks on a partition = partition size / block sizepartition_physical_blocks=expr $partition_size_in_bytes / $block_sizeecho Physical blocks in a partition $partition_physical_blocks#Logical blocks on a partition = physical blocks on a partitiion - reserved for wear levelpatition_logical_blocks=expr $partition_physical_blocks - $wear_level_reserved_blocksecho Logical blocks in a partition $patition_logical_blocks#File-system volume = Logical blocks in a partition * Logical erase block sizefs_vol_size=expr $patition_logical_blocks /* $logical_erase_block_sizeecho File-system volume $fs_vol_sizebytes.echoecho Generating configuration file.echo rootfs-vo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全教育课件 一年级
- 家庭安全课件
- 商品流通概论试题及答案
- 《分离工程》试题库及参考答案
- 大学生职业规划考试答案
- 人员测评作业题复习资料
- 初级统计师《统计专业知识和实务》模拟试卷及答案解析
- 雨天安全课件
- 全国计算机一级考试选择题试题与详细答案(二)
- 2022年2月舟山市税务系统遴选面试真题附详解
- 2025秋人教版小学美术二年级上册期末过关练习卷及答案 (三套)
- 净化设备施工方案
- 沙田路灯升降车施工方案
- 卓越绩效管理模式
- 2025 高中环境保护之国际气候谈判课件
- 大模型在企业的应用实践
- 油菜飞播作业合同2025年合同履行进度跟踪
- 2025-2026学年第一学期小学科学三年级上册期末测试卷(教科版2024)及答案(三套)
- 5.3 实际问题与一元一次方程 第1课时 配套、工程问题 教学设计 2024-2025学年人教版七年级数学上册
- 扬州市数据局:2025可信数据空间基础知识
- 企业导师聘用协议书
评论
0/150
提交评论