
基于嵌入式智能家居远程控制器设计答辩PPT课件.ppt
29页1,基于嵌入式智能家居远程控制器设计,,指导老师:杨家红(博士) 答辩学生:刘淑辉(07级计 算机科学与技术专业),2,摘要,本文研究了基于linux嵌入式操作系统,以使用arm2440为CPU的ARM9嵌入式开发板为硬件基础,以LINUX REDHAT 5为系统开发环境,以arm-linux-gcc 4.3.2为交叉编译环境以Friendly ARM Mini2440 Development Board为系统运行环境的智能家居系统的设计与实现通过详细的系统设计过程,制定系统,包括嵌入式操作系统linux内核的定制、bootloader的移植、linux内核的移植、文件系统的移植,并将其进行解析,将相应的命令根据通信协议转化为相应的控制信号,接入控制电路从而控制相应的电器本装置采用了四盏灯模拟家中的各种电器,通过远程的机算机来控制家里的电器3,功能模块设计,,,,4,本课题所用环境,,LINUX REDHAT 5,,arm-linux-gcc 3.4.1,,Friendly ARM Mini2440 Development Board,,,5,友善之臂,,图示:友善之臂,,6,主要设计方法,,,,,,,,,文件系统的制作,移置,linux2.6内核裁剪,移置,,bootloader移置,建立 Linux 开发环境,,程序测试,,,,7,Bootloader,stage1(汇编部分),,固件(fireware)中的boot代码,,,,Bootloader 的组成,,,,stage2(C部分),,,8,Bootloader,,硬件检测,资源分配,固件(fireware)中的boot代码,,,9,Bootloader,,硬件设备初始化,拷贝Boot Loader 的stage2 到RAM 空间中,为加载Boot Loader 的stage2 准备RAM 空间,stage1(汇编部分),设置好堆栈,跳转到stage2 的C 入口点,,,10,Bootloader,,初始化本阶段常用的硬件设备,内存映射mmap,将kernel image文件和根文件系统 image从flash读到RAM空间,stage2(C部分),为内核设置启动参数,调用内核,,,11,Bootloader的种类,Bootloader的实现大致可以分为以下几类 : 1.Vivi 由三星提供,韩国mizi 公司原创,开放源代码,必须使用arm-linux-gcc 进行编译,目前已经基本停止发展,主要适用于三星S3C24xx 系列ARM 芯片,用以启动Linux 系统,支持串口下载和网络文件系统启动等常用简易功能。
12,Bootloader的种类,2. U-Boot: 由三星提供,韩国mizi 公司原创,开放源代码,必须使用arm-linux-gcc 进行编译,目前已经基本停止发展,主要适用于三星S3C24xx 系列ARM 芯片,用以启动Linux 系统,支持串口下载和网络文件系统启动等常用简易功能13,Bootloader的种类,3. Blob Blob(Boot Loader Object)是由Jan-Derk Bakker and Erik Mouw发布的,是专门为StrongARM 构架下的LART设计的Boot LoaderBlob支持SA1100的LART主板,但用户也可以自行修改移植 Blob也提供两种工作模式,在启动时处于正常的启动加载模式,但是它会延时 10 秒等待终端用户按下任意键而将 Blob 切换到下载模式如果在 10 秒内没有用户按键,则 Blob 继续启动 Linux 内核14,Bootloader的移植,将vivi 的源代码包复制到某一个目录,进入该目录,运行以下命令: #tar xvzf vivi.tgz 执行该命令将把vivi 源代码解压到目录,进入vivi 源代码目录,执行: #make clean #make menuconfig 一般不需要更改任何配置,直接退出,然后执行“make”开始编译,执行结果如下: #make ARCH=arm CROSS_COMPILE=arm-linux- 此时已经在当前目录下生成了 vivi,把vivi 烧写到目标板的NandFlash 运行。
15,配置和编译 linux 内核,移植环境,,,16,内核的主要概念,内核,即操作系统它为底层的可编程部件提供服务,为上层应用程序提供执行环境内核裁剪就是对这些功能进行裁剪,选取满足特定平台和需求的功能不同的硬件平台对内核要求也不同,因此从一个平台到另一个平台需要对内核进行重新配置和编译操作系统从一个平台过渡到另一个平台Linux是一款平台适应性强,且容易裁剪的操作系统因此Linux在嵌入式系统得到了广泛的应用17,,linux内核的组成部分,,,,,,,18,Linux内核移植过程,(1)将所有文件复制到工作目录下,然后解压内核文件和编译器文件 (2)为内核打补丁 (3)修改Makefile,修改编译环境 (4)修改machine ID如果这一步省略,会在移植到开发板后Bootloader引导的时候出现机器ID错误的现象出错的ID号将以十六进制给出,将其转化为十进制,替换mach-types文件中的对应项这里移植后报的错误是0 xFB,即对应十进制251 (5)制作uImage文件在内核目录下建议一个名为mkimage的文件 (6)对内核进行配置执行make at91rm9200dk_defconfig实际上就是完成对内核的配置。
(7)编译内核生成映像文件19,Linux内核移植过程,内核移植过程图,,,20,文件系统的配置与移植,文件系统简单的说就是一种目录结构,由于 linux操作系统的设备在系统中是以文件的形式存在,将这些文件进行分类管理以及提供和内核交互的接口,就形成一定的目录结构也就是文件系统,文件系统是为用户反映系统的一种形式,为用户提供一个检测控制系统的接口,,,21,文件系统的配置与移植,根文件系统是linux启动时使用的第一个文件系统,没有根文件系统性,linux将无法正常启动 根文件系统由一系列目录组成,目录中包括了应用程序,C库以及相关的配置文件22,文件系统的配置与移植,Linux支持多种文件系统,常用的基于存储设备的文件系统类型包括:jffs2, yaffs, cramfs, 等本次设计采用的是yaffs2 yaffs2是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统与jffs2相比,它减少了一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小另外,它还是跨平台的文件系统,除了Linux和eCos,还支持WinCE, pSOS和ThreadX等。
23,文件系统移植过程,1.创建根文件系统的目录 2.创建设备文件 3.安装/etc 4.编译内核模块 5.安装内核模块 6.配置busybox 7.编译,安装busbox 8.制作yaffs 文件系统映象,,,24,Linux驱动开发,Led驱动的开发: mini2440 开发板上所用到的4 个LED 的硬件资源 要操作所用到的 IO 口,就要设置它们所用到的寄存器低电平亮,高电平灭25,Linux驱动开发,驱动程序在 Linux 内核里扮演着特殊的角色. 它们是截然不同的“黑盒子”, 使硬件的特殊的一部分响应定义好的内部编程接口. 它们完全隐藏了设备工作的细节. 用户的活动通过一套标准化的调用来进行, 这些调用与特别的驱动是独立的; 设备驱动的角色就是将这些调用映射到作用于实际硬件的和设备相关的操作上. 这个编程接口是这样, 驱动可以与内核的其他部分分开建立, 并在需要的时候在运行时“插入”26,Linux驱动开发,,,驱动的配置模块,27,Linux驱动开发,,,驱动开发,28,,主界面,,29,Thank You !,,。












