




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
福 建 师 范 大 学 应 用 科 技 学 院学 生 论 文论文题目: 嵌入式数码相框设计 指导教师: 蔡坚勇 学 号: 120352010014 姓 名: 赖景源 年 级: 2010级 专 业: 电子信息工程 2014 年 3 月 27日嵌入式数码相框设计福建师范大学应用科技学院 电子信息工程专业120352010014 赖景源 指导老师 蔡坚勇摘 要嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可以配置,通常对功能、可靠性、成本、体积、功耗有严格约束的一种专用计算机系统。当前先进的嵌入式系统,通常由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及嵌入式应用程序四个部分组成,实计算机基于ARM Linux和Qt/Embedded的嵌入式数码相框系统的研究和实现应用系统,称为嵌入式系统、实时系统或者嵌入式实时系统。根据目前国内外对嵌入式的研究和开发,结合实际的实验条件,本项目使用硬件平台广东省嵌入式软件公共技术中心开发的GEC2440开发板作为目标机,使用安装Windows XP的PC机作为宿主机,并在宿主机Windows平台上安装了一个虚拟机软件,虚拟机里安装的是Red Hat EnterpriseLinux 5作为开发环境。主要实现工作包括:在宿主机上安装交叉编译工具,建立交叉编译环境,配置tftp、DNW(或超级终端)以建立嵌入式软件平台。进行一个可以浏览与管理图片功能,且能进行幻灯片播放的课程设计。针对项目需求实现对驱动程序的完善和移植,制作适合此开发板的根文件系统,最后将基于qt设计的应用程序程植到开发板上,实现个人图片的掌上管理。关键词:嵌入式系统;GEC2440开发板;虚拟机环境;移植。AbstractEmbedded system is used as the center, take the computer technology as the foundation, software and hardware can be configured, usually to the function, reliability, cost, volume, power consumption have strict constraints of a kind of special computer system. The current advanced Embedded system, usually by Embedded microcontroller processor,peripheral hardware equipment, Embedded operating system and Embedded application four parts, real computer based on ARM Linux and Qt/Embedded Embedded digital photo frame system research and implementation application system, called the Embedded system, real-time systems or Embedded real-time system.According to the current domestic and foreign research and development of embedded, combining with the condition of experiment, this project use hardware platform embedded software public technology center of guangdong province the development of GEC2440 development board as the target machine, use Windows XP install the PC as the host machine, and in the host machine Windows platform installed a virtual machine software, virtual machine is installed, the Red Hat EnterpriseLinux 5 as a development environment. Main realization work include: in the host machine installation cross-compiling tools, set up cross-compiling environment, the configuration TFTP, DNW (or super terminal) to establish embedded software platform. A can browse pictures and management function, and can play a course design slides. For the project requirements to achieve the perfect for drivers and transplantation, making for the development of the board root filesystem, finally will be based on qt application ChengZhi designed to development board, realize the palm of personal pictures !Keywords: embedded system;GEC2440 development board;virtual machine environment;the transplant.36目 录摘 要2Abstract3目 录4第一章概要5第二章 所需环境及设备62.1硬件部分:62.1.1 GEC2440开发板介绍62.2软件部分72.2.1 Linux系统平台介绍:72.2.2 QT/Embeded界面介绍:7第三章 嵌入式开发环境的搭建73.1嵌入式交叉环境的概述83.2 交叉编译环境的搭建83.3交叉调试环境的搭建93.4交叉服务器的搭建103.5关于交叉调试10第四章U-boot的移植.104.1建立工作目录.104.2设置环境.114.3进入目录配置编译.164.4 bootloader的烧写.16第五章 Linux内核的移植175.1 准备工作175.2 修改内核源码顶层175.3 修改机器码175.4 设置 flash 分区175.5 配置编译内核185.6 Linux内核编译225.7下载到开发板中测试22第六章 基于qt3平台的应用程序226.1新建一个数码相框工程236. 2函数源代码.236.3在主机上运行356.4交叉编译生成目标文件366.5在目标板上运行36第七章 结束语37致谢37参考文献38第一章 概要1.1背景随着PC时代数码技术的发展,数码相机以其低廉的价格,方便的操作成为摄影器材未来的发展方向。目前,很多家庭都持有数码相机,一次拍摄下来的照片往往会有上百张,使用PC机来查看拍摄下来的图片,操作繁琐,而且依赖于PC机。作为数码相机的一种附属产品,数码相框不仅具有传统相框的特点,而且可以直接从数码相机中选择心仪的照片,定时更新照片。数字相框可以摆放在家居显眼之处,成为现代家庭一道靓丽的风景线。数码相框是展示数码照片而非纸质照片的相框。众多的数码摄影产生的相片保存起来后,查看过程繁琐不方便,大量打印出来又非常浪费,如果用数码相框直接插上相机的存储卡展示照片,就非常酷了。数码摄影必然推动数码相框的发展,因为据调查全世界打印的数码相片不到35%。1.2系统开发目的根据实际应用的特点对产品进行完整的需求分析,形成比较完善的总体设计方案。同时,达到能具备Linux操作系统下简单的设备驱动程序开发、图形用户接口设计的能力。此外,掌握基本的系统功能及性能测试技术,从而具备比较全面的嵌入式应用系统开发能力。另外,作为一个消费类电子产品,数码相框的设计必须考虑以下因素:(1)用户接口友好、操作方便。由于该产品的使用者大多是非专业人士,用户接口是否清晰明了、操作是否简捷方便成为用户是否能迅速的接受此产品的重要因素。(2)系统兼容性强。数码相框应能识别和处理当前数码相机主要的图像格式,能访问主流的外部半导体存储卡。(3)稳定可靠。作为消费类电子产品。必须通过比较严格的功能测试,以保证用户在使用过程中,不会因为程序错误而丧失对产品的信心。1.3所需环境及设备(1)以GEC2440开发板作为目标机,使用安装了Windows XP 的PC机作为宿主机,并在宿主机上安装虚拟机软件,虚拟机里安装的是Red Hat EnterpriseLinux5作为开发环境。(2)硬件部分:GEC2440模仿三星smdk2440,以ARM920T为内核,控制辅助设备。基本端口包括以太网接口,USB接口,还有两个RS232的串口。A/D和D/A模块主要用于现场数据的采集与控制信号的输出。DC/DC模块主要负责整个系统的供电。1.4系统概要设计硬件部分:系统的主要硬件包括嵌入式开发平台GECC2440、LCD屏、人机交互界面、外部存储介质接口电路。大致可以分为三块:(1)LCD屏用来展示图片、输出信息。(2)人机交互界面设定各个模式的播放形式、输入信息。(3)外部存储介质接口电路用来提供外部的存储介质的接口。软件部分:(1)交叉环境的搭建:用GNU工具链作为交叉编译器。(2)超级终端。1.5系统详细设计(1)嵌入式Linux开发环境的建立具体步骤过程:交叉环境的具体建立;Qt应用界面代码的编写;环境的调试、仿真运行、NFS的配置等。(2)系统软硬件的的连接工作:bootloader的移植、linux内核配置移植、驱动移植、根文件系统制作、带库的根文件系统的制作及各阶段的调试、QT界面的设计。(3)运用QT 及网络编程实现系统设计界面的可视化,及网络的连接问题。(4)对预期的目标功能,编写代码,调试仿真、运行。(5)对应用程序开发的代码编写与调试运行。第二章 设备与运行环境2.1硬件部分:以GEC2440开发板作为目标机,使用安装了Windows XP 的PC机作为宿主机,并在宿主机上安装虚拟机软件,虚拟机里安装的是Red Hat EnterpriseLinux5作为开发环境。GEC2440模仿三星smdk2440,以ARM920T为内核,控制辅助设备。基本端口包括以太网接口,USB接口,还有两个RS232的串口。A/D和D/A模块主要用于现场数据的采集与控制信号的输出。DC/DC模块主要负责整个系统的供电。系统的主要硬件包括嵌入式开发平台GECC2440、LCD屏、外部存储介质接口电路、人机交互界面。大致可以分为三块:(1)LCD屏用来显示图片、输出信息。(2)人机交互界面设定各个模式的播放形式、输入信息。(3)外部存储介质接口电路用来提供外部的存储介质的接口.2.1.1 GEC2440开发板介绍使用硬件平台广东省嵌入式软件公共技术中心开发的GEC2440开发板作为硬件平台,GEC2440是模仿广为流行的三星smdk2440开发板而设计的低价位开发板,下面对GEC2440做一些简单介绍。GEC2440的设计以ARM920T为内核的三星SC32440是控制核心,负责控制所有辅助设备。存储器采用SDRAM和FLASH两种类型,能满足系统运行和调试的需要。基本端口包括以太网接口,USB接口,还有两个RS232的串口。A/D和D/A模块主要用于现场数据的采集与控制信号的输出。DC/DC模块主要负责整个系统的供电。扩展接口考虑了系统的可扩展性。开发板外观布局如图2.1图2.1GEC2440开发板外观图2.2软件部分2.2.1 Linux系统平台介绍:Linux是一种类UNIX操作系统。兼容POSIX 1003.1标准,并包含了UNIX System V和BSD 4.3的大部分特征。它充分体现了操作系统的方展趋势,即开放、稳定、标准。Linux具有如下的特征:1) 真正的多用户、多任务操作系统。2) 支持动态链接库。3) 符合POSIX(可移植操作系统接口)标准。4) 提供Shell命令解释程序和编程语言。5) 采用页式存储管理。6) 提供强大的管理功能,包括远程管理功能。7) 具备大量的实用程序和通信、联网工具。8) 提供内核编程接口。9) 具备图形用户接口。10)大量高级程序设计语言已经被移植到Linux系统上,因此它是理想的应用程序开发平台。2.2.2 QT/Embeded界面介绍:当前嵌入式Linux在手机、PDA等手持信息设备领域的应用十分广泛。各种手持设备是否拥有图形用户界(GUI)己经成为其人机交互技术的关键体现,所以一个十分友好的图形用户界面(GUI)是必不可少的。嵌入式GUI是嵌入式系统广泛应用的人机交互接口。嵌入式系统有限的硬件资源要求嵌入式GUI必须简单、直观、可靠、占用资源小且反应快速。由于嵌入式系统硬件本身的多样性,嵌入式GUI应具备高度可移植性与可裁减性。第三章 嵌入式开发环境的搭建3.1嵌入式交叉环境的概述嵌入式系统一般是一个资源受限的系统,因此直接在嵌入式系统的硬件平台上编写软件比较困难,有时候甚至是不可能的。所以需要一个交叉环境来实现:(1) 先在通用计算机上编写一个程序;(2) 然后通过本地编译或者交叉编译生成目标平台上可以运行的二进制代码格式;(3) 最后再下载到目标平台上的特定的位置上去运行。3.2 交叉编译环境的搭建在一种平台上编译出能在另一种平台(体系结构不同)上运行的程序,在PC平台(X86CPU)上编译出能在arm平台上的程序,编译后的程序在X86上是不能运行的,必须放到arm上才能运行,用来编译这种程序的编译器叫作交叉编译器。我们用到的是arm-linux-gcc。嵌入式软件开发需要交叉开发环境,这是其开发的一显著特点,交叉编译器只是交叉开发环境的一部分,我们说的交叉开发环境是指编译、链接和调试嵌入式应用软件的环境,它与运行嵌入式应用软件的环境有所不同,常采用宿主机-目标机模式。关于交叉工具链:它是交叉编译环境所需工具的集合体,是所需软件(binuntials、gcc与glibc等)的安装载体,主要包括:交叉编译器(arm-linux-gcc)、交叉汇编器(arm-linux-as)、交叉链接器(arm-linux-ld)、各种操作所依赖的库及用于处理可执行程序和库的一些基本工具(如arm-linux-strip)。交叉环境如图3.1所示:图3.1交叉环境安装编译器(交叉工具链)软件:eabi-4.1.2.tar.bz2安装准备 #mkdir /usr/local/arm#cp eabi-4.1.2.tar.bz2 -C /usr/local/arm#mv eabi 4.1.2添加环境变量:#vi /etc/bashrc在文件结尾添加 export PATH= /usr/local/arm/4.1.2/bin:$PATH使配置生效:#source /etc/bashrc3.3交叉调试环境的搭建源码包gdb-6.5.tar.bz2的安装cd.(1)新建编译目录 #mkdir /home/build_gdb #cd /home/build_gdb 将gdb-6.5.tar.bz2拷贝到/home/build_gdb(2)解压gdb-6.5.tar.bz2 #tar jxf gdb-6.5.tar.bz2c(3)配置 #cd gdb-6.5 #./configure -target=arm-linux -prefix=/usr/local/arm/4.1.2/此步遇到的问题是:./configuretarget =arm-linux没有那个文件或目录,是因为configure的权限问题,在运行configure前chmod 755 configure)(4)编译 #make(5)安装 #make install (在/usr/local/arm/4.1.2/bin/目录下已生成arm-linux-gdb工具)。3.4交叉服务器的搭建源码包:gdb-6.5/gdb/gdbserver(1)进入 #cd gdb-6.5/gdb/gdbserver(2)配置 #chmod u+x configure #./configure -host=arm-linux (3)编译 #make CC=/usr/local/arm/4.1.2/bin/arm-linux-gcc (完了在当前目录生成gdbserver、gdbreplay等)这里遇到的问题是:没有使用绝对路径,导致了无法生成(4)下载安装到目标板(gdbserver)gdbserver放到目标板的/bin目录下。3.5关于交叉调试(1)新建测试目录 #mkdir /root/test #cd /root/test(2)编辑文件 #vim debug.c(3)交叉编译 #arm-linux-gcc -g debug.c -o debug (加上-g选项)(4)下载到目标板(将整个代码目录)#mkdir arm_debug #cd arm_debug /将目标程序放进arm_debug(5)启动调试服务器(目标板上进行) 成功后便开始侦听本地调试端口,可以看到如下信息: bash-4.0# gdbserver 22:1234 debug Process try created; pid = 992 Listening on port 1234 (22是目标板的IP)(6)启动交叉调试器(在宿主机上进行) #/root/test (一定要进去代码目录下) #arm-linux-gdb debug #target remote 22:1234 成功后打印如下:(gdb) target remote 23:1234Remote debugging using 23:1234Remote communication error: Connection reset by peer然后进行调试。第四章 U-boot的移植4.1建立工作目录下载源码Uboot的源码:u-boot-2009.11.tar.bz2#mkdir /root/build_uboot#cd /root/build_uboot把下载的源码拷贝到该目录,解压;并把解压后目录更名为u-boot。#tar jxvf u-boot-2009.11.tar.bz2#mv u-boot-2009.11 u-boot创建主代码 复制board/samsung/smdk2410目录为board/sansung/gec2440#cp arf board/samsung/smdk2410 board/samsung/gec2440/并修改目录下的Makefile将COBJS:=smdk2410.o.flash.o修改为COBJS:=GEC2440.o.flash.o复制include/configs/smdk2410.h为include/configs/gec2440.h#cp include/configs/smdk2410.h include/configs/gec2440.h修改顶层Makefile:创建目标板信息,在smdk2410_config:unconfig$(MKCONFIG)$(:_config=)arm arm920t smdk2410 NULL s3c24x0后面添加gec2440_config:unconfig$(MKCONFIG)$(:_config=)amr amr920t gec2440 samsung s3c24x0修改Makefile规则,将_LIBS:=$(subst$(obj),$(LIBS)$(subst$(obj),$(LIBBOARD)改为:_LIBS:=$(subst$(obj),$(LIBBOARD)$(subst$(obj),$(LIBS)4.2设置环境4.2.1stage1阶段硬件初始化在include/configs/gec2440.h头文件中添加CONFIG_S3C2440宏。#define CONFIG_S3C2440 14.2.2修改时钟由于s3c2410与s3c2440的时钟及Nand ,SDRAM等配置不同,故需要修改相关配置:(1)修改cpu/arm920t/start.S#if defined(CONFIG_S3C2400)|defined(CONFIG_S3C2410)|defined (CONFIG_S3C2440)#if defined(CONFIG_S3C2440) /添加中断禁止部分1dr r1, =0x7fff1dr r0,=INTSUBMSKstr r1,r0#endif#if defined (CONFIG_S3C2440)/添加时钟部分#defined MLLCON 0x4C000004/系统主频配置寄存器基地址#defined UPLLCON 0x4C000008/USB时钟频率配置寄存器基地址1dr r0, =CLKDIVN/设置分频系数mov r1 ,#5str r1,r01dr r0,=MPLLCON1dr r1,=0x7F021str r1,r01dr r0 ,=UPLLCON/设置USB时钟频率为48MHz1dr r1,=0x38022str r1,r0#else(2)修改board/samsung/gec2440/gec2440.c,设置主频和USB时钟频率参数与start.S中的一致#define FCLK_SPEED 2/设置默认等于2,即下面代码有效#elif FCLK_SPEED = 2#define M_MDIV 0x7F#define M_PDIV 0x2#define M_SDIV 0x1#define USB_CLOCK 2 /设置默认等于2,即下面代码有效#elif USB_CLOCK = 2#define U_M_MDIV 0x38 #define U_M_PDIV 0x2#define U_M_SDIV0x2(3)修改cpu/arm920t/s3c24x0/speed.cstatic ulong get_PLLCLK(int pllreg)S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();ulong r, m, p, s;if (pllreg = MPLL)r = clk_power-MPLLCON;else if (pllreg = UPLL)r = clk_power-UPLLCON;elsehang();m = (r & 0xFF000) 12) + 8;p = (r & 0x003F0) 4) + 2;s = r & 0x3;#if defined(CONFIG_S3C2440)if(pllreg = MPLL) /参考S3C2440 芯片手册上的公式:PLL=(2 * m * Fin)/(p * 2s)return(CONFIG_SYS_CLK_FREQ * m * 2) / (p s);#endifreturn(CONFIG_SYS_CLK_FREQ * m) / (p CLKDIVN & 0x2) ? get_FCLK()/2 : get_FCLK();4.2.3重定位u-boot代码(1)在include/configs/gec2440.h 头文件中定义Nand 要用到的宏和寄存器,在文件末尾加入以下Nand Flash 相关定义(在最后一句#endif /* _CONFIG_H */之前):/* Nand flash register and envionment variables*/#define CONFIG_S3C2440_NAND_BOOT 1#define NAND_CTL_BASE 0x4E000000#define STACK_BASE 0x33F00000#define STACK_SIZE 0x8000#define oNFCONF 0x00#define oNFCONT 0x04#define oNFADDR 0x0c#define oNFDATA 0x10#define oNFCMD 0x08#define oNFSTAT 0x20#define oNFECC 0x2c(2)修改cpu/arm920t/start.S#if 0#ifndef CONFIG_SKIP_RELOCATE_UBOOTrelocate: adr r0, _start ldr r1, _TEXT_BASE cmp r0, r1 beq stack_setupldr r2, _armboot_startldr r3, _bss_startsub r2, r3, r2add r2, r0, r2 ldmia r0!, r3-r10 stmia r1!, r3-r10 cmp r0, r2 ble copy_loop#endif #endif添加u-boot从Nand Flash 启动#ifdef CONFIG_S3C2440_NAND_BOOTmov r1, #NAND_CTL_BASE /复位Nand Flashldr r2, =( (712)|(78)|(74)|(00) )str r2, r1, #oNFCONF /设置配置寄存器的初始值,参考s3c2440 手册ldr r2, r1, #oNFCONFldr r2, =( (14)|(01)|(10) )str r2, r1, #oNFCONT /设置控制寄存器ldr r2, r1, #oNFCONTldr r2, =(0x6) /RnB Clearstr r2, r1, #oNFSTATldr r2, r1, #oNFSTATmov r2, #0xff /复位commandstrb r2, r1, #oNFCMDmov r3, #0 /等待nand1:add r3, r3, #0x1cmp r3, #0xablt nand1nand2:ldr r2, r1, #oNFSTAT /等待就绪tst r2, #0x4beq nand2ldr r2, r1, #oNFCONTorr r2, r2, #0x2 /取消片选str r2, r1, #oNFCONT/get read to call C functions (for nand_read()ldr sp, DW_STACK_START /为C 代码准备堆栈,DW_STACK_START 定义在下面mov fp, #0 / no previous frame, so fp=0 R11 帧指针寄存器/copy U-Boot to RAMldr r0, =TEXT_BASE/传递给C 代码的第一个参数:u-boot 在RAM 中的起始地址mov r1, #0x0 /传递给C 代码的第二个参数:Nand Flash 的起始地址mov r2, #0x30000 /传递给C 代码的第三个参数:u-boot 的长度大小(128k)bl nand_read_ll/调用启动函数tst r0, #0x0beq ok_nand_readbad_nand_read:loop2: b loop2 /infinite loopok_nand_read:/检查搬移后的数据,如果前4k 完全相同,表示搬移成功mov r0, #0ldr r1, =TEXT_BASEmov r2, #0x400go_next:ldr r3, r0, #4ldr r4, r1, #4teq r3, r4bne notmatchsubs r2, r2, #4beq stack_setupbne go_nextnotmatch:loop3: b loop3#endif /CONFIG_S3C2440_NAND_BOOT_start_armboot: .word start_armboot /在这一句的下面加上DW_STACK_START 的定义。.align 2DW_STACK_START: .word STACK_BASE+STACK_SIZE-4(3)在board/samsung/gec2440/目录下新建一个nand_read.c 文件。在该文件中来实现上面汇编中要调用的nand_read_ll 函数,代码如下:#include #define NF_BASE 0x4E000000#define _REGb(x) (*(volatile unsigned char *)(x)#define _REGi(x) (*(volatile unsigned int *)(x)#define NFCONF _REGi(NF_BASE + 0x0 ) /通过偏移量还是得到配置寄存器基地址#define NFCONT _REGi(NF_BASE + 0x4 ) /通过偏移量得到控制寄存器基地址#define NFCMD _REGb(NF_BASE + 0x8 ) /通过偏移量得到指令寄存器基地址#define NFADDR _REGb(NF_BASE + 0xC ) /通过偏移量得到地址寄存器基地址#define NFDATA _REGb(NF_BASE + 0x10) /通过偏移量得到数据寄存器基地址#define NFSTAT _REGb(NF_BASE + 0x20) /通过偏移量得到状态寄存器基地址#define NAND_CHIP_ENABLE (NFCONT &= (11) /N
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 化肥厂成品分类存放规定
- 七年级语文下册 口语交际《插上想像的翅膀接龙精美的童话》说课稿 语文版
- 2024年五年级英语上册 Unit 1 How can I get there第二课时说课稿 人教PEP
- 居民燃气安全使用合同书
- 江苏省徐州市中小学教学研究室高一信息技术教案IT第一课 知识回顾
- 主题4 地区产业结构的变化-以京津冀地区为例说课稿-2023-2024学年高中地理选择性必修2中图中华地图版
- 2017秋人教版高中历史必修1第一单元同步教学设计第3课 从汉至元政治制度的演变
- 12.1 《杠杆》(第2课时)说课稿-2025-2026学年人教版八年级物理下册
- 中医一技考试试题及答案
- 中医考试题型考研真题及答案
- 铁丝镀锌工操作规程培训
- 严防管制刀具 对自己和他人负责-校园安全教育主题班会课件
- 医院培训课件:《护患沟通技巧》
- 公路技术状况检测与评定-公路技术状况评定
- 正式员工正规劳动合同范本
- 人工搬运风险与控制培训课件
- 新能源材料与器件PPT完整全套教学课件
- 肺癌中医护理常规(整理)
- 住宅专项维修资金管理系统方案
- 新媒体时代人口老龄化问题下媒体适老化改造探析
- 医疗保险特药使用申请表
评论
0/150
提交评论