嵌入式Linu知识块与知识点_第1页
嵌入式Linu知识块与知识点_第2页
嵌入式Linu知识块与知识点_第3页
嵌入式Linu知识块与知识点_第4页
嵌入式Linu知识块与知识点_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基础安装Linux系统(1)语言选择:简体中文(2)键盘配置:美国英语式(3)鼠标配置:3键鼠标(PS/2)(4)选择安装还是升级:新安装(5)安装类型个人桌面:工作站:服务器:定制:(6)磁盘分区设置自动分区:手工分区:(7)为系统分区:显示当前分区,下一步(8)添加分区:挂载点固定大小指定空间大小使用全部可用空间强制为主分区检查磁盘坏块(9)引导装载程序配置:选择引导装载程序:GRUB选择要引导的操作系统引导装载程序是否使用口令配置高级引导装载程序选项10)网络配置:编辑网络设备是否引导时激活设备名IP/子网掩码设置主机名通过DHCP自动设置手工设置其他设置网关次要第三(11)防火墙配置:

2、选择安全级别高级中级无防火墙选择防火墙规则默认定制信任的设备容许进入其他端口(12)语言支持的选择:Chinese(P.R.ofchina)(13)时区配置:亚洲/上海(14)设置根口令(15)选择软件包组:(16)准备安装:应该看到一个安装RedHatLinux做准备的屏幕。当你重新引导系统后,一份完整的安装日志可在/root/install.log中找到,以备今后参考。要取消安装进程,按计算机的重新启动按钮,或者使用Control-Alt-Delete组合键来重启计算机。(17)安装软件包:(18)创建引导盘:(19)视频卡配置:自动检测,若检测不到,请手工配置(20)配置显示器:自动检测

3、,若检测不到,请手工配置21)定制配置:色彩深度:真色24位屏幕分辨率:1024X768(22)安装完成基本使用登录和注销启动和关机显示属性的设置改变桌面背景显示设置分辨率色彩深度配置日期和时间光盘的使用(1)在文件管理器中使用光盘(2)在终端提示下使用光盘用户还可以手工地在shell提示下挂载和卸载光盘。在光盘驱动器内插入一张光盘,打开终端,然后键入以下命令:#mount/mnt/cdrom这样,光盘就会被挂载,便可以用文件管理器来使用它了。还可以通过点击桌面上的主目录图标,并在位置栏内键入“/mnt/cdrom”来访问光盘。光盘上工作完毕后,在把它从驱动器内弹出之前必须卸载它。关闭所有使用

4、光盘的应用程序或文件管理器,然后在终端提示下键入以下命令:#umount/mnt/cdrom现在,便可以安全地按光盘驱动器上的弹出按钮来取出光盘。打印机的安装与设置使用RPM来管理软件包RPM的设计目标可升级性强大的查询功能系统校验纯净源码RPM基本操作模式安装RPM包rpm-vhRPM包的全路径文件名删除RPM包rpm-eRPM包名称升级RPM包rpm-URPM包的全路径文件名查询RPM包rpm-q校验已安装的软件包rpm-V命令及相关概念命令的使用方式在Linux系统中打开终端的方式有以下两种:种是在桌面上依次单击主程序t系统工具t终端”可打开如图2-1的终端窗口;另一种是在Linux桌面

5、上单击鼠标右键,从弹出的快捷菜单中选择“终端”命令,也可打开终端窗口键盘上大多数字符是普通打印字符,它们没有特殊含义。只有少数特殊字符指示计算机做专门的操作。其中最常见的特殊字符是回车键RETURN,它表示输入行结束;系统收到回车信息便认为输入的当前行结束,系统的响应是让屏幕光标回到下一行行首。回车符只是控制符的一个例子。控制符是指控制终端工作方式的非显示字符。输入一般控制符必须先按下控制键,或称作CTRL键,然后再按所对应的字符键。例如,输入回车符可以直接按回车键,也可以先按控制键,再按m键。CONTROL-m或CTL-m也是回车符。一些常用的控制符有:CTL-d,它表示终端的输入结束;CT

6、L-g控制终端响铃;CTL-h称为退格键,用于改正输入的错误.此外还有两个特殊键,一个是DELETE键,另一个是BREAK键。大多数LINUX系统中,DELETE键表示立即终止程序。在有些系统里,也用CTL-c终止程序。一般说来,BREAK键与DELETE键、CTL-c的功能基本相同。另外,在终端上还有一个命令补齐(Command-LineCompletion)的操作技巧,所谓命令补齐是指当键入的字符足以确定目录中一个唯一的文件时,只须按Tab键就可以自动补齐该文件名的剩下部分,例如要把目录/freesoft下的文件解包,当键入到tarxvfz/freesoft/g时,如果此文件是该目录下唯一

7、以g开头的文件,这时就可以按下Tab键,这时命令会被自动补齐为:,非常方便文件概念及操作命令ls选项文件目录列表文件类型-:常规文件?d:目录?b:块特殊设备?c:字符特殊设备?p:有名管道?s:信号灯?m:共享存储器文件类型的字符表示文件的权限,权限由三个字符串组成,这三个字符串分别表示:该文件所有者的权限、组中其他人的权限和系统中其人的权限;每个字符串又由三个字符组成,次表示对文件的读(用字符r表示)、写(用字符W表示)和执行权限(用字符x表示)当用户没有相应的权限时,该权限的对应位置用短线“-”来表示。#find目录列表匹配标准cat选项文件列表grep选项匹配字符串文件列表sort选项

8、文件diff参数原文件目标文件cp选项源文件目标文件rm选项文件列表mv-f-i文件1文件2安装和登录命令:login、shutdown、halt、reboot、mount、umount、chsh文件处理命令:file、mkdir、dd、mv、ln系统管理相关命令:df、top、free、quota、at、lp、adduser、groupaddkill、crontab、tar、unzip、gunzip、last网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rloginrcp、finger、mail、nslookup系统安全相关命令:passw

9、d、su、umask、chgrp、chmod、chown、chattr、sudo、pswhoShell编程建立嵌入式开发环境软件开发环境建立交叉开发工具链使用现有的交叉开发工具链建立交叉开发工具链从ARMLinux站点得到对解压$tar-通过相关文档得到具体安装路径-建立相关目录,并将解压后的文件移到此相关目录$mkdir-p/usr/local/arm在环境变量PATH中添加路径因为GCC编译器的运行是依赖于其他工具和库,通常不能把这些工具放在任意目录下。只好向下载的站点求教,一般通过相关的README或者说明文档可以得到具体的安装路径。Arm-linuxBinEtcIncludeInfoL

10、ibLibexecSbinShareSys-includeusrBinIncludeInfoLibLibexecMantmp因为GCC编译器的运行是依赖于其他工具和库,通常不能把这些工具放在任意目录下。只好向下载的站点求教,一般通过相关的README或者说明文档可以得到具体的安装路径。Arm-linuxBinEtcIncludeInfoLibLibexecSbinShareSys-includeusrBinIncludeInfoLibLibexecMantmp手工制作交叉开发工具链编译binutils$cdbinutils-2.14$mkdirbuild-arm-linux$cdbuild-a

11、rm-linux$./configure-target=arm-linux-$make$makeinstall编译GCC的辅助编译器编译生成glibc库编译生成完整的GCC编译器制作交叉调试器使用交叉开发工具链编辑器vi二进制工具编译器gcc调试器gdb工程管理器make配置TFTP服务配置NFS服务配置超级终端/minicom硬件开发环境串口KermitMinicomwindows超级终端以太网简单的文件传输协议TFTP网络文件系统NFS动态主机配置协议(DHCPUSBJTAG综合以上熟悉开发流程部署Linux系统移植U-Boot理解嵌入式linux引导程序的原理,掌握如何在FS2410硬件

12、平台上移植u-bootBootloader介绍u-boot工程介绍u-boot的编译使用u-boot源码分析u-boot资源分配u-boot移植过程【实验】(1)u-boot常用命令(2)添加u-boot新命令设置u-boot环境变量配置编译u-boot移植FS2410的支持网卡、串口功能支持从nor、nandflash启动支持nor、nandflash烧写支持yaffs2、jffs2文件系统烧写支持u盘文件读取定制uboot安装uboot裁剪内核/usr/src/linux-x.y-z内核源码树driversarchmakefilearch=armCROSS_COMPILE=.config.

13、config文件被处理生成一个C语言头文件autoconf.h输出文件system.mapvmlinux链接器脚本文件mlinux.ldsarch/arm/kernel/head.oarch/arm/kernel/init-atask.oinitkernelmmfsipcsecuritylib/lib.aarch/arm/liblibdriversnet配置编译Linux内核目标:熟悉内核的原码结构和kbuildMakefile语法;掌握和内核、驱动模块编译相关的原理及方法。Linux内核介绍Linux内核特点Linux内核源代码结构Linux内核选项解析Linux内核编译链接内核模块编译、使

14、用方法【实验】配置交叉开发环境熟悉菜单配置文件的组织结构熟悉内核配置过程选项加入Kconfig新选项编译交叉开发环境所需要的内核在内核中加入自己的字符设备程序移植Linux内核源码目标:通过今天课程的学习,学员能够熟悉内核启动流程、掌握内核移植的一般方法、分析平台相关代码结构,并能够自己动手移植高版本内核支持FS2410开发板。Linux内核移植介绍Linux内核移植平台相关代码分析动手修改Linux内核源代码分析编译过程错误和宏定义的关系Linux启动过程源代码分析2.6内核平台设备结构介绍【实验】配置编译高版本的Linux内核移植高版本()内核支持FS2410板网卡驱动移植mtd支持及fl

15、ash分区方法yaffs2文件系统移植sd卡驱动液晶支持u盘功能分析解决编译过程中的错误调试Linux内核及优化linux内核目标:掌握内核调试的常用方法、内核优化的方法策略。Linux内核调试概述Linux内核的打印函数Linux内核启动过程错误分析解析oops信息常用调试方法和工具基本的驱动程序分析系统启动时间优化电源管理方法动态、静态功耗介绍嵌入式处理器对电源管理的支持嵌入式linux电源管理结构用户层电源管理策略设备驱动层电源管理策略【实验】通过基本调试手段解决内核启动过程错误分析、处理oops错误优化系统,加快系统启动速度优化系统,降低系统功耗定制内核映像安装内核映像Linux内核修

16、炼全面认识和了解Linux内核的框架,并以此为基础掌握学习Linux内核、分析阅读Linux内核源码的方法,真正地迈过那道无形的门坎。2)掌握、分析、钻研某个子系统在Linux内核中实现机制的方法,并了解Linux内核中的进程管理、内存管理、文件系统。3)了解如何参与Linux内核的开发和测试,以及一些常用的调试手段和工具。4)掌握Linux设备驱动的开发方法。5)掌握Android运行所需要的Linux内核开发和技巧。全面认识和了解Linux内核的框架,掌握学习Linux内核、分析阅读Linux内核源码的方法。第1章Linux内核的基本面Linux内核成长史多变的Linux内核版本号获取Li

17、nux内核的源代码ALinux内核与那些发行版Linux内核是如何工作的Linux虚拟机”系统调用台前文件系统.幕后进程调度幕后一一内存管理模块化的Kernel第2章Linux内核的按需配置与编译按需配置Linux内核配置方式的多种选择认识常见的配置选项-重视config文件为Linux内核打补丁编译Linux内核认识一些与编译有关的目录与文件构建编译环境备份是重要得编译步骤一些实用的小技巧Linux内核的文档及编译【实验】配置、编译Linux2.6内核第3章浏览Linux内核源码所需的技术基础Linux内核的体系结构Linux内核源码树使用vim+cscope+ctagsLinux内核代码的

18、特点gcc扩展的使用内嵌汇编Linux内核中的链表代码样例【实验】配置vim浏览内核源码第4章如何分析Linux内核源码Linux内核学习的心理问题kernel地图:Kconfig与Makefile看懂Kconfig与Makefile利用Kconfig与Makefile定位目标代码分析Linux内核源码如何入手分析README分析Kconfig与Makefile态度决定一切:从初始化函数开始【实验】定位并分析某个子系统或模块在内核中的实现掌握分析钻研某个子系统在内核中实现机制的方法,了解内核中的进程管理、内存管理、文件系统第5章开始之前Beforewebegin系统初始化Linux内核中的时间

19、系统调用中断与中断处理Linux内核中的同步第6章子系统的初始化Linux内核选项解析Linux内核选项注册Linux内核选项两次解析那些入口函数.initcall.init节do_initcalls()函数以PCI子系统为例【实验】分析某个子系统的初始化过程第7章进程管理与调度Linux中的进程进程的来源:fork和clone所有美好的事物都会结束:进程退出内核线程进程调度O(1)调度CFS调度不确定的Multi-thread第8章内存管理物理地址、逻辑地址与虚拟地址分页内存在内核中的分配进程的内存组织内存映射mmap页面缓存第9章虚拟文件系统VFSVFS的体系结构理解VFS的那些数据结构V

20、FS的缓存机制文件系统的注册与安装文件系统的日志管理了解如何参与Linux内核的开发和测试,以及一些常用的调试手段和工具第10章IntentReceiver工具链及其生成Linux内核中的Makefile严格遵守Linux内核的编码风格添加代码到Linux内核为什么Linux内核没有稳定的API?如何提交补丁学会使用Git【实验】安装Git并用它来来获取最新的Linux内核源码第11章一些最上镜的Linux内核调试手段与工具Linux内核对调试的支持二分法与printk获取Linux内核信息调试福音之oops神奇的SysRq调试利器之GDB调试利器之SystemtapLinux内核崩溃转储利用

21、模拟器【实验】分析一个oops【实验】配置GDB调试环境并调试Linux内核第12章子系统的初始化Linux内核测试的4个阶段性能分析与调优工具CPU性能分析与调优Memory性能分析与调优IO性能分析与调优Network性能分析与调优oprofile启动速度调优【实验】Linux内核性能测试并提交Linux内核测试报告掌握驱动的开发方法,掌握Android运行所需要的Linux内核开发和技巧第13章驱动开发的方法论模块化的Linux内核第一个模块“HelloWorld!”重中之重:设备模型总线、设备和驱动在USB子系统上的投影驱动开发三件宝:spec、datasheet与Linux内核源码s

22、ysfs【实验】结合设备模型分析一个Linux内核中现有的驱动【实验】编写一个简单的模块第14章Android环境的相关介绍Android的历史和介绍Android和Linux的扯不清理还乱的关系取得Android的源代码和编译生成可执行环境Android源代码构成和运行原理加入新的处理器支持到Android框架第15章移植Android所需要的Linux内核Android运行所需要对Linux内核作的修改Android对现有驱动所必须做的修改键盘、鼠标驱动和键值映射显示驱动audio马驱动编译和拓展Android的启动分区boot.imgAndroid的启动过程分析和调试技术【实验】生成一个

23、可供Android启动的Linux内核【实验】制作和生成一个可运行的boot.img第16章实现Android的硬件抽象层Android的硬件抽象层的原理和构成实现ril,完成Android的移动网络功能支持libhardware_legacy接口libhardware接口蓝牙支持【实验】将一个wifi驱动加入Android硬件抽象层构建文件系统集成部署Linux系统u-bootu-boot目标:理解嵌入式linux引导程序的原理,掌握如何在FS2410硬件平台上移植Linux文件系统制作Linux系统集成测试文件系统和存储设备的选择部署Ramdisk文件系统的过程部署JFFS2文件系统的过程

24、部署Yaffs2文件系统的过程【实验】制作最小的文件系统添加udev支持部署ramdisk文件系统部署cramfs文件系统部署jffs2文件系统部署yaffs2文件系统配置u-boot使系统独立运行定制文件系统裁减文件系统安装文件系统理解启动过程内核引导(u-Boot)目标板硬件初始化初始化内存等硬件把压缩的内核映像加载到内存在嵌入式Linux开发中,经常用到网络加载的方式,就是通过TFTP协议把内核映像加载到目标板内存。那么目标板的Bootloader还应该能够驱动网络接口,配置IP地址。不同的Bootloader还有一系列命令进行配置跳转到内核映像入口执行解压内核映像完成自解压或者重定位跳

25、转到解压后的内核代码入口跳转到内核映像入口head.o内核启动main.cstart_kernelSetup_arch参数为指向内核命令行的指针初始化设备驱动挂接根文件系统从文件系统的目录下找到init程序,启动init进程在交叉开发环境中,通常采用NFS文件系统。在内核启动过程可以挂接NFS根文件系统。这种方式将极大地方便嵌入式Linux交叉开发。使目标板挂接NFS根文件系统在主机端配置相应的网络服务TFTPDHCPNFS配置目标板的内核选项配置相应的网络驱动程序“Networkdevicesupport”配置内核启动命令行参数配置内核挂接NFS根文件系统应用程序启动完成系统初始化启动相关服

26、务管理用户登录程序开发驱动程序开发LINUX字符设备驱动程序开发从用户设备I/O编程角度深入了解设备驱动的原理;通过了解字符设备驱动框架和具体硬件设备I/O操作,能够进行字符设备驱动开发;了解linux2.6内核的设备模型及掌握udev的使用LINUX字符设备驱动基础字符设备驱动程序实现框架与典型驱动分析用户空间与内核空间的数据传输同步、互斥、阻塞、睡眠机制Linux-2.6设备模型与sysfs文件系统udev与devfs文件系统【实验】、驱动开发编程环境与内核配置、编译、编写模块化字符设备驱动程序与测试、如何为内核程序传递参数、在驱动代码中加入创建proc结点方法、蜂鸣器驱动程序编写与测试、

27、编写驱动实现包含等待队列、信号量、fifo等功能、学会利用udev和sysfs文件系统动态创建设备结点设备驱动中常用的内核机制掌握在基本字符设备驱动的基础上增加复杂的内核机制;了解1inux内核中断子系统的实现原理,掌握linux中断处理程序编写方法;掌握内核延时机制及内存管理机制Poll和select操作异步通知机制1inux内核中断子系统中断处理程序编写驱动程序上/下半部处理与延缓执行机制内核定时器与延迟机制内核内存管理机制【实验】、编写驱动实现包含等待队列、信号量、fifo等功能、编写驱动实现包含poll功能、编写驱动实现包含异步通知功能、编写秒表字符设备,掌握定时器用法5、编写驱动实现

28、tasklet功能6、编写驱动实现工作队列功能7、按键中断实验8、A/D转换实验LINUX块设备驱动程序开发明白Linux中块设备驱动的特点及框架,独立分析Linux中大部分块设备的驱动方法,并熟悉MTD设备驱动的特点与框架,具备MTDNandFlash驱动程序开发的能力。通过实验,学员还可以掌握IDE、Ramdisk驱动移植方法。块设备及其驱动的特点块设备驱动程序中两个关键结构体GEN_DISK与REQUEST块设备驱动程序的注册与请求处理MTD设备的特点以及与块设备的关系MTD设备驱动的框架及关键结构体分析S3C2410(S3C2440)中的NANDFLASH控制器分析S3C2410(S3

29、C2440)NANDFLASHMTD驱动分析【实验】、编写简单的块设备驱动程序2、实现RAMDISK驱动3、IDE硬盘的驱动移植4、移植S3C2410闪存控制器驱动、配置MTD内核选项6、移植嵌入式文件系统LINUX网络设备驱动程序开发网络设备是嵌入式产品开发,特别是基于网络的产品开发中最重要的内容之一。通过本课学习,学员可以深入理解Linux网络驱动程序中有关套接字(socket)、套接字缓冲区(sk_buff)等概念,了解网络驱动程序的数据交换过程。通过实际的动手操作,学员将掌握如何移植或编写具体网卡的驱动程序,并在此基础上实现更为高级的网络功能。了解MMC/SD卡的物理及电气特性,熟悉相

30、关的工作协议,并在此基础上能够移植或编写Linux下的MMC/SD控制器的驱动程序。LINUX网络设备驱动程序开发OSI网络参考模型套接字(SOCKET)简介套接字缓冲区(SK_BUFF)NET_DEVICE结构分析数据包传送与接收网络驱动的中断处理网络设备驱动程序的基本实现LINUX下MMC/SD卡驱动开发嵌入式系统中几种常见存储介质的比较(NOR/NANDFLASH、CF、MMC/SD)MMC/SD卡物理及电气规范简介MMC/SD卡工作中的关键命令及关键结构信息S3C2410(S3C2440)中MMC/SDHOST控制器分析LINUX中MMC/SD存储卡驱动程序结构分析S3C2410(S3

31、C2440)中MMC/SDHOST控制器的驱动实现【实验】1、编写简单的虚拟以太网卡驱动程序2、移植并编写CS8900A网卡驱动程序3、移植并编写DM9000网卡驱动程序4、配置网络参数,测试网卡驱动程序行为5、MMC/SD协议分析6、在LINUX源码中加入针对ARM平台的MMC/SD主控制器驱动的支持LINUX帧缓冲驱动程序开发掌握嵌入式Linux显示驱动程序的开发方法,理解嵌入式Linux图形驱动程序实现机制,能够移植或编写嵌入式显示控制器驱动程序,并完成针对各种LCD硬件的定制。6.LINUX帧缓冲驱动程序开发帧缓冲显示技术帧缓冲驱动程序显示原理帧缓冲驱动程序的数据结构帧缓冲驱动程序的A

32、PI帧缓冲驱动程序的基本实现使用高级图形库触摸屏驱动开发触摸屏工作原理S3C2410触摸屏控制器工作原理触摸屏驱动程序编写【实验】1、熟悉FRAMEBUFFER驱动的结构、熟悉FRAMEBUFFER中的重要数据结构、编写S3C2410彩色LCD控制器驱动程序、编写测试程序控制屏幕显示、编译高级图形库例子,显示图形、熟悉触屏驱动程序、写触屏测试代码LINUX下USB驱动开发基础掌握USB通讯规范及拓扑结构中的主机控制器、HUB、USB设备的工作流程;掌握S3C2410USBdevice控制器的工作原理;最后在S3C2410开发板上编写usbtransfer固件程序,结合PC机上windows环境

33、下的DNW软件,实现基于usb的文件下载功能。通过Linux下USB驱动开发内容的学习,学员将深入理解Linux内核USB子系统,掌握USB驱动程序编写技术。经过学习后的学员能够移植或编写USB主机OHCI和设备驱动程序,最后通过对usbtransfer设备的驱动编程,实现在linux环境下的文件下载功能(替换DNW的下载功能)。8.LINUX下USB驱动开发基础8.1USB规范介绍USB主机控制器USBHUBUSB设备状态USB描述符USB请求USB通讯数据格式S3C2410USBdevice控制器编写usbtransfer固件程序9.LINUX下USB驱动高级开发9.1LinuxUSB驱动

34、层次LinuxUSB主机控制器驱动介绍LinuxUSBHUB驱动介绍LinuxUSB设备驱动程序编写usbtransfer设备驱动程序编写usbtransfer设备应用程序【实验】1、在开发板上烧写并测试USB固件程序2、usbtransfer固件程序分析与编写3、使用usbview工具观察USB设备4、使用sysfs分析USB层次结构5、LINUX下编写usbtransfer设备驱动实现USB下载步骤register_chrdev(register_chrdev)选择主设备号动态分配定义设备名称定义一组文件操作标记化格式声明file_operation结构应用程序开发文件I/O编程基于文件描

35、述符不带缓存不带缓存是指每一个函数都只调用系统中的一个函数函数说明openreadwritelseekclose基于流缓冲3种类型的缓冲存储全缓冲行缓冲不带缓冲函数说明OpenFILE*fopen(constchar*path,constchar*mode)FILE*fdopen(intfd,constchar*mode)FILE*freopen(constchar*path,constchar*mode,FILE*stream)intfclose(FILE*stream)size_tfread(void*ptr,size_tsize,size_tnmemb,FILE*stream)size_tfwrite(constvoid*ptr,size_tsize,si

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论