梁力源:基于物联网技术的智能家居系统
示是不同的,上市时间和功能完善同样重要。Linux出现时间较早,现成资源较多。
(2)可移植性。也就是平台无关性。当进行嵌入式软件开发时,可移植性是要重点考虑的问题。良好的软件可移植性,可以在不同平台、不同系统上运行,跟操作系统无关。软件的通用性和软件的性能通常是矛盾的,即通常以损失某些特定情况下的优化性能为代价。很难设想开发一个嵌入式浏览器而仅能在某一特定环境下应用,反过来说,当产品与平台和操作系统紧密结合时,往往你的产品的特色就蕴含其中。
(3)可利用资源。产品开发不同于学术课题研究,它是以快速、低成本、高质量的推出适合用户需求的产品为目的的。集中精力研发出产品的特色,其他功能尽量由操作系统附加或采用第三方产品,因此操作系统的可利用资源对于选型是一个重要的参考条件,Linux和WinCE都有大量的资源可以利用,这是他们被看好的重要原因。其它有些实时操作系统由于比较封闭,开发时可以利用的资源比较少,因此多数功能需要自己独立开发,从而影响开发进度。近来的市场需求显示,越来越多的嵌入式系统,均要求提供全功能的Web浏览器。而这就要求有一个高性能、高可靠的GUI的支持。
(4)系统定制能力。信息产品不同于传统PC的Wintel结构的单纯性,用户的需求是千差万别的,硬件平台也都不一样,所以对系统的定制能力提出了要求。要分析产品是否对系统底层有改动的需求,这种改动是否伴随着产品特色。Linux由于其源代码开放的天生魅力,在定制能力方面具有优势。
(5)成本。成本是所有产品不得不考虑的问题。操作系统的选择会对成本有着重要的影响。Linux免费,WinCE等商业系统需要支付许可证使用费,但这都不是问题的答案。成本是需要综合权衡以后进行考虑的,选择某一系统可能会对其它一系列的因素产生影响,如对硬件设备的选型、人员投入、以及管理和与其它合作伙伴的共同开发之间的沟通等许多方面的影响。
(6)中文内核支持。国内产品必然需要对中文的支持。由于操作系统多数是采用西文方式,是否支持双字节编码方式,是否遵循GBK,GB18030等各种国家标准,是否支持中文输入与处理,是否提供第三方中文输入接口是针对国内用户的嵌入式产品的必需考虑的重要因素。
智能家居系统并不需要很严格的实时性,而且在本系统的设计中,关键任务将可以由可编程器件实现,仅向系统提供一个状态信息。操作系统的主要目的是方便开发友好的人机界面,缩短开发周期,提高系统的稳定性。嵌入式操作系统选择了嵌入式Linux[10]。Linux作为一款开源软件,具有功能强大,与硬件兼容性好,可任意裁减等诸多特点,同时在Linux系统下支持很多开源软件,在一定程度上减小了开发的难度。
18
2013届计算机科学与技术专业毕业设计(论文)
在版本方面,选择2.6.32.2内核的arm- linux,该内核在原有内核的基础上进行了一定程度的裁减,同时也是专门支持ARM系统芯片的Linux版本,这也为后期的进一步裁减做好了铺垫的工作。
在文件系统方面,目前FLASH上常用的文件系统主要有JFFS2、CRAMFS、Yaffs2、ROMFS以及ROMFS等。目前,Mini2440开发板支持Yaffs2。YAFFS2是第一个专门为Nandflash存储器设计的嵌入式文件系统,适用于大容量的存储设备;并且是在GPL(GeneralPublicLicense)协议下发布的,可在其网站免费获得源代码。CRAMFS文件系统是专门针对闪存(如NorFlash)设计的只读压缩的文件系统,采用实时解压缩方式,小巧且速度快。
本设计采用YAFFS2文件系统,可以读写保存。系统主要采用C语言作为基本开发语言,在嵌入式开发中,语言的可移植性很重要。因为Linux是用C语言编写的,对C语言有良好的函数库的支持,其编译出的代码精简,具有运行速度快和对底层开发支持好的特点。
2.6 本章小结
本章通过对智能家居的分析,确定了系统总体架构设计,然后针对其方案进行软硬件选型。首先确定了SAMSUNG公司的32位RISC处理器S3C2440作为微控制器芯片;其次是介绍本智能家居各模块所使用到的硬件设备,接着介绍几种嵌入式操作系统和选择嵌入式操作系统的依据,最后确定了适合CPU的最佳嵌入式操作系统。
19
梁力源:基于物联网技术的智能家居系统
第3章 建立Linux开发环境
3.1 搭建开发环境
3.1.1 安装虚拟机、Linux操作系统、源代码及其他工具
本设计是在虚拟机上安装Linux操作系统Fedora 9.0版本而进行。首先安装vmware并下载Fedora-9-i386-DVD.iso镜像,安装好Fedora 9.0操作系统。
在操作终端上创建工作目录/opt/FriendlyARM/mini2440,在此终端上解压安装源代码,此次用的是内核自带的内核源代码: linux-2.6.32.2-mini2440-20100106。此次设计用开发板自动的arm-qtopia设计qt运行界面。 3.1.2 建立交叉编译环境
在Linux平台下,要为开发板编译内核,图形界面Qtopia,bootloader,还有其他一些应用程序,均需要交叉编译工具链。
之前的系统,要使用不同的编译器版本才能正常编译各个部分,因此要在开发过程不断切换设置,这十分不利于初学者使用,也降低了开发的效率;自从Linux-2.6.2开始(Mini2440所配内核已为最新的Linux-2.6.32.2),我们把交叉编译器统一为arm-linux-gcc-4.4.3,下面是它的安装设置步骤。
(1)将arm-linux-gcc-4.4.3.tgz复制到某个目录下如tmp\\,然后进入到该目录,执行解压命令:
#cd /tmp
#tar xvzf arm-linux-gcc-4.4.3.tgz –C /
(2) Step2:把编译器路径加入系统环境变量,运行命令 #gedit /root/.bashrc
编辑/root/.bashrc文件,在最后一行添加:
export PATH=$PATH: /opt/FriendlyARM/toolschain/4.4.3/bin
保存退出,注销系统后,使设置生效,重新登录系统(不必重启机器,开始->logout 即可),在命令行输入arm-linux-gcc –v,若没有输出错误信息即表示建立交叉编译环境成功。
20
2013届计算机科学与技术专业毕业设计(论文)
3.1.3 配置网络文件系统NFS
NFS是Network File System 的简写,即网络文件系统,NFS允许一个系统在网络上与他人共享文件。通过使用NFS,用户和程序可以像访问本地文件一样访问别的系统上的文件。
在嵌入式开发环境中,通过NFS服务器,可以把NFS作为根文件系统来启动开发板,通过使用NFS作为根文件系统,不仅使开发板的“硬盘”变得很大,还可以减少程序烧写的次数,提供程序开发速度[11]。下面介绍NFS服务器的安装和配置。 ? 首先安装NFS服务器
一般情况下系统默认按照好NFS服务,系统不默认安装的话,只需要下载两个安装包安装即可:
? nfs-utils-*(包括基本的NFS命令与监控程序 ) ? portmap-*(支持安全NFS RPC服务的连接) ? 接着需要共享Linux系统和开发板目录。
必须解压安装好root_qtopia目标板文件系统包。接着在Fedora 9.0 的终端上运行命令 #gedit /etc/exports,编辑nfs服务的配置文件,添加以下内容/opt/FriendlyARM/mini2440/rootfs_qtopia_qt4 *(rw,sync,no_root_squash),其中/opt/FriendlyARM/**/rootfs_qtopia_qt4表示nfs共享目录。 ? 最后启动NFS服务。
在命令行下运行以下命令即可:/etc/init.d/nfs stop。
3.2 嵌入式软件开发层次
本设计的软件系统
一个嵌入式Linux系统从软件角度来看可以分为三个层次:
(1)引导加载程序,包括固化在固件中的boot程序(可选),和Bootloader部分两大部分。
(2)linux内核,特定于嵌入式平台的定制内核。
(3)文件系统,包括了系统命令和应用程序。一个同时装有BootLoader、内核的启动参数、内核映像和根文件系统映像的固态存储设备的典型空间分配结构图如图3.1
21
梁力源:基于物联网技术的智能家居系统
图3.1 空间分配结构图
3.2.1 BootLoader介绍
简单的说bootloader是一段程序,它的作用就是加载操作系统,BootLoader(引导加载程序)是系统加电后运行的第一段软件代码[12]。通过这段代码实现硬件的初始化,建立内存空间的映射图,为操作系统内核准备好硬件环境并引导内核的启动。bootloader位于最底层,首先被运行来引导操作系统运行,很容易可以看出bootloader是底层程序所以它的实现严重地依赖于硬件,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。尽管如此,一些功能强大、支持硬件环境较多的BootLoader也被广大的使用者和爱好者所支持,从而形成了一些被广泛认可的、较为通用的的bootloader实现。
此次开发板引导程序用的是Supervivi,它是友善之臂基于vivi改进的一个简单易用的Bootloader。在此不用自己来移植bootloader。 3.2.2 定制Linxu内核
Linux是最受欢迎的自由电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。Linux最早是由芬兰黑客LinusTorvalds为尝试在英特尔x86架构上提供自由免费的类Unix操作系统而开发的。该计划开始于1991年,在计划的早期有一些Minix黑客提供了协助,而今天全球无数程序员正在为该计划无偿提供帮助。技术上说Linux是一个内核。“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux。
Linux内核源代码很庞大,想要短时间内读懂大部分内核源代码几乎是不可能的,此次设计用的是开发板自带的内核,版本号是Linux-2.6.32.2。首先把内核代码解压安装在工作目录/opt/FriendlyARM/mini2440,进入内核代码根目录,执行“cp config_mini2440_t35 .config_t35‖使用缺省的配置文件。然后执行“make menuconfig‖,打开内核配置界面,配置好内核后通过执行“make zImage‖命令编译内核,编译结束后
22