1、嵌入式系统,主讲教师: 田 茂E-MAIL:,第二章 开发平台构建,Linux 简介 FriendlyARM6410开发平台简介 宿主机和目标机 虚拟机VMware及操作系统Ubuntu的安装 建立交叉开发环境 开发板安装Linux系统 在Windows下进行FTP下载 简单的Hello word,Linux 简介,Linux特点 稳定的系统 免费 多任务、多用户 良好的用户界面 可靠的系统安全 适合需要小内核程序的嵌入式系统 ,稳定的系统,Linux 本来就是基于 Unix 概念而发展出来的操作系统,因此, Linux 具有与 Unix 系统相似的的程序接口跟操作方式,当然也继承了 Unix
2、 稳定并且有效率的特点。常听到安装 Linux 的主机连续运做一年以上而不曾当机、不必关机是稀松平常的事;,免费,由于 Linux 是基于 GPL 的基础下的产物,因此任何人皆可以自由取得 Linux , 至于一些安装套件的发行者, 他们发行的安装光盘也仅需要些许费用即可获得!不同于 Unix 需要负担庞大的版权费用,当然也不同于微软需要一而再、 再而三的更新你的系统,并且缴纳大量费用,多任务、多用户,与 Windows 系统不同的, Linux 主机上可以同时允许多人上线来工作, 并且资源的分配较为公平。你可以在一部 Linux 主机上面规划出不同等级的使用者,而且每个使用者登入系统时的工作
3、环境都可以不相同, 此外,还可以允许不同的使用者在同一个时间登入主机,以同时使用主机的资源,可靠的系统安全,【没有绝对安全的主机】但是 Linux 由于支持者,有相当多的热心团体、个人参与其中的开发, 因此可以随时获得最新的安全信息,并给予随时的更新,亦即是具有相对的较安全,适合需要小内核程序的嵌入式系统,由于 Linux 只要几百 KB 不到的程序代码就可以完整驱动整个计算机并成为一个完整的操作系统, 因此相当适合于目前家电或者是小电子用品的操作系统,即嵌入式系统。Linux 适合例如手机、数字相机、PDA、家电用品等等的微电脑操作系统! 此外,有不少硬件式的网络防火墙及路由器,其内部都是使
4、用Linux,并采用了操作系统提供的防火墙及路由功能。,Linux 与uC/OS-II的区别功能性,Linux 包含一整套的编译、调试等开发工具、内核源代码、各种文件系统、图形接口、各种协议、驱动程序以及丰富的应用程序。 而Uc/OS-II确切的来说只是一个微内核,仅仅包含多任务调度、简单内存管理等基本的多任务操作系统元素,且多任务调度算法和内存管理等都比较简单。对于想实现GUI、FS、协议等都必须另外购买或者移植,对于设备驱动程序没有提供专门统一的接口。,Linux 与uC/OS-II的区别开发工具,Linux 发布中包含了编译器和调试器等工具,他们都采用GCC编译器,汇编语法一致。uC/O
5、S-II没有指定编译器,在不同的平台下使用该平台的编译器,而各个编译器其汇编语法不同,因此,在不同类型平台下,汇编程序不一致。,Linux 与uC/OS-II的区别移植性,Linux 发布中包含了多种平台下的移植,可以通过配置内核选择体系结构和裁剪内核。uC/OS-II的不同平台下的移植通过不同的移植代码独立发布,没有一个统一的界面,通过宏定义进行内核裁剪。,Linux 与uC/OS-II的区别开发资源,在开发上,Linux采用统一的API调用,接口文档齐全,书籍、网上资料也比较多 uC/OS-II虽然没有标准的API接口,但是其内核非常简单、简洁,且书籍、网上资料也非常丰富。,Linux 与
6、uC/OS-II的区别实时性,Linux 内核不关心实时性问题,可以通过和RTLinux配合来实现实时。 RTLinux 处理实时任务,非实时任务任务由linux完成 RTLinux是为Linux 提供实时性的方法,同样也使用与Linux。通过RTLinux 的patch,可以满足Linux实时性的需求 uC/OS-II采用占先式内核,实时性好,Linux 与uClinux,uclinux表示micro-control linux.即“微控制器领域中的Linux系统”,是Lineo公司的主打产品,同时也是开放源码的嵌入式Linux的典范之作 。 uCLinux是针对控制领域的嵌入式linux操
7、作系统,它从Linux 2.0/2.4内核派生而来,沿袭了主流Linux的绝大部分特性。适合不具备内存管理单元(MMU)的微处理器/微控制器。 没有MMU支持是uClinux与主流Linux的基本差异。,Linux 与uClinux,标准Linux是针对有MMU的处理器设计的。在这种处理器上,虚拟地址被送到MMU,把虚拟地址映射为物理地址。通过赋予每个任务不同的虚拟物理地址转换映射,支持不同任务之间的保护。 uCLinux系统对于内存的访问是直接的,所有程序中访问的地址都是实际的物理地址。操作系统对内存空间没有保护,各个进程实际上共享一个运行空间。一个进程在执行前,系统必须为进程分配足够的连续
8、地址空间,然后全部载入主存储器的连续空间中。 有些内核系统调用也有差异,高效 稳定开源用户级的可裁减 支持多种网络协议,IBM宣布其四个系列的服务器全面支持Linux用J2EE及Oracle开发的应用程序也可以移植到Linux上面来运行 Borland公司也开发了在Linux下面运行的DelphiKylix SUN公司表示开放Sorlaris9的源代码,银行政府军队,嵌入式领域手持消费类设备,Linux 应用,Internet网络服务器的应用 网站、域名解析、FTP、邮件系统 中小企业内部服务器的应用 代理上网、网络防火墙、企业网关 DHCP动态地址分配、Samba文件共享 软件开发环境的应用
9、 支持C/C+、Perl、PHP、Java、Python 语言 桌面环境的应用 OpenOffice办公软件、Firefox浏览器 QQ/MSN即时通讯、RealPlayer、Mplayer播放器,Linux 在企业中应用,Linux赢得了大型数据库软件公司支持 IBM HP Dell Haier等厂商全面预装Linux操作系统,HP、SUN公司也将推出自己的桌面发行版本,SGI在开发大型Linux图形工作站 全球十大巨型机中,有四台在使用Linux操作系统2005年11月的top500超级电脑表列的操作系统里,采用Linux为操作系统的,占了371组(即74.2%),其中的前十位者,有7组是
10、使用Linux的。 当前, Linux赢得大量手机厂商的大力支持,比如Motorola等,虽然Linux具有如此多的好处,但是它先天上有一个足以致命的地方,使它的普及率受到很大的限制,就是Linux需要使用“命令行”的终端机模式进行系统的管理。虽然近年来有很多的图形界面在开发使用在Linux上面,但毕竟要熟悉Linux 还是以命令行来使用使比较好的,因此要接受Linux必须要熟悉对计算机下命令的行为,而不是只点鼠标。,目前已有大量各种各样基于 GNU/Linux 的操作系统,例如:Debian, SuSE, Gentoo, RedHat 和 Mandriva 。Ubuntu首个版本发布于200
11、4年9月,相对大多数Linux发行版来说,它的起步较晚,但是在朝着“易用”和“免费”方面不断发展的路途中,Ubuntu赢得了大家的喜爱,并成为数一数二的Linux发行版本。 Ubuntu 是基于 Debian 之上,旨在创建一个可以为桌面和服务器提供一个最新且一贯的 Linux 系统。Ubuntu 囊括了大量精挑细选自 Debian 发行版的软件包,同时保留了 Debian 强大的软件包管理系统,以便简易的安装或彻底的删除程序。与大多数发行版附带数量巨大的可用可不用的软件不同,Ubuntu 的软件包清单只包含那些高质量的重要应用程序。固定的发布周期(6个月);易于初学者学习;丰富的文档(包括官
12、方和用户贡献的 ),无论基于 GNU/Linux 的操作系统有多少,一个典型的Linux发行版应包括: Linux 内核,一些GNU程序库和工具,命令行 shell,图形界面的X Window系统和相应的桌面环境,如KDE或GNOME,并包含数千种从办公套件,编译器,文本编辑器到科学工具的应用软件。,FriendlyARM6410开发平台硬件配置,主板核心配置为CPU Samsung S3C6410A,主频533MHZ, 256M RAM , 2GB Nand Flash,底板资源包括 调试口 COM0 + JTAG + USB Slave USB Slave 1 x mini USB(底板没
13、有设计 OTG功能) USB Host 通过 USB HUB 芯片,实现 4 个 USB Host 接口 网络接口 10/100M MB以太网, RJ-45 接口,底板资源音频输入输出 3.5mm 标准双声道音频输入输出口 SD卡 普通 SD卡座 串口 4 x RS232 DB9 串口,4 x TTL 电平串口座 TV-OUT 1 x RCA输出口 SDIO2 接口座 主要用于接 SD WiFi 模块(还包括 SPI, I2C 接口) LCD接口 3 种 LCD接口引出座蜂鸣器 1 x PWM 控制蜂鸣器输出 红外 1 路红外接收头 温度传感器 1 路 DS18B02 温度传感器 ADC 转换
14、 1 个可调电阻,连接 CPU的 AD0 通道,FriendlyARM6410 开发平台底板,宿主机和目标机,由于嵌入式Linux的开发资源有限,不可能在开发板上运行开发和调试工具。通常需要交叉编译调试的方式进行-即“宿主机(可以运行Linux的PC 机)+目标机(开发板)”的形式。 目标机和宿主机一般采用串口连接,亦可同时通过网口连接,如下图所示。,宿主机是运行Linux的PC。可以是安装了Linux操作系统的本地机,亦可以是Linux服务器(模型假定其IP为192.168.0.10)。宿主机和目标机的处理器通常情况下都不会相同。宿主机需要建立适合于目标机的交叉编译环境。程序在宿主机上编译连
15、接定位,得到的可执行文件则在目标机运行。 在开发调试过程中,通常的操作界面如下图所示。,在宿主机上一般需要运行2个窗口:宿主机本机操作窗口和串口终端窗口。宿主机操作窗口可以是本机的操作终端(安装Linux的本地机),亦可以Windows下通过远程登录软件如Telnet登录到Linux服务器的操作界面。宿主机只能编译连接程序,不能运行程序)。串口终端,可以是Linux的minicom。亦可以是Windows的超级终端。目标机可以看成一台计算机,串口终端就相当于这台计算机的显示器,作为人机交互界面。在宿主机编译链接后得到的可执行文件,下载到目标机上运行。,虚拟机VMware及操作系统Ubuntu的
16、安装,虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统VMware 可以使你在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。与“多启动”系统相比,VMWare采用了完全不同的概念。多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。 VMWare是真正“同时”运行,多个操作系统在主系统的平台上,就像标准Windows应用程序那样切换。而且每个操作系统你都可以进行虚拟的分区、配置而不影响真实硬盘的数据,你甚至可以通过网卡将几台虚拟机用网卡连接为一个局域网,极其方便。,课程中演示所安装的V
17、Mware 版本 VMware-workstation-full-7.1.3-324285.exeUbuntu版本是 ubuntu-12.04-desktop_cp.iso(也可使用光盘安装),安装后界面,Linux 启动后有可以看到很多目录文件,这些目录存放文件、作用如下 /bin 存放常用命令 /boot 存放启动程序 /dev 存放设备文件 /etc 存放启动、关闭、配置程序文件 /home 用户工作根目录 /lib 存放共享链接库 /root 超级用户的工作目录 /sbin 系统管理员的常用管理程序 /tmp 存放临时文件 /lost+found 系统出现异常时,用于保存部分资料,建立
18、交叉开发环境,宿主机是运行Linux的PC或者服务器。由于Linux版本众多,各版本之间存在差异,我们这里使用的是Ubuntu12.04,安装在windows系统下的虚拟机(VMware-workstation-full-7.1.3)中。由于目标板平台处理器是ARM,因而需要安装针对ARM的GCC编译器。适用于ARM Linux的编译器为arm-linux-gcc。,arm-linux-gcc安装步骤,将arm-linux-gcc-4.5.1.tgz文件复制到/opt目录下解压文件。运行命令:#tar zxvf arm-linux-gcc-4.5.1.tgz -C /,解压之后就产生了目录/o
19、pt/FriendlyARM (tar zxvf 将目录或文件解压缩并解包)修改环境变量。执行命令: #vi /.bashrc (或者#gedit /etc/bash.bashrc )打开.bashrc文件,在文件末尾添加exportPATH = $PATH:/opt /FriendlyARM/toolschain/ 4.5.1/bin运行命令:arm-linux-gcc v 查看是否安装成功,开发板安装Linux系统,安装Linux系统主要有以下步骤: 准备好硬件连接,在PC机上配置超级终端把开发板设置为SD启动 对 Nand Flash 进行格式化,对应命令f 安装 Bootloader,
20、对应命令v 安装内核文件,对应命令k 安装目标文件系统(yaffs2或ubifs 格式),对 应命令y或u,在Windows下进行FTP下载,设置目标板的IP为192.168.1.1,保证与宿主机在同一 IP段(ifconfig eth0 192.168.1.1 netmask 255.255.255.0) 设置TFTP SERVER软件(设置input目录和output目 录 为PC机桌面) 在Windows的超级终端中执行文件传输命令 (tftp -g -r a.out 192.168.1.10)将文件发送到目标板 在Windows的超级终端中执行文件传输命令 (tftp -p -l a.
21、out 192.168.1.10)将文件发送到PC机,Tftp 指令,tftp -dignv主机名称或IP地址-g Get file(从宿主机获得文件)-r 文件名 remote file (远程文件 )-p Put file(发送文件到宿主机)-l 文件名 local file (本地文件),简单的hello word,创建一个名位hello.c的文件,代码如下 #include int main(void) printf(“Hello world!n“); return 0; ,将文件复制到ubuntu进行编译,执行命令:arm-linux-gcc hello.c 执行后会产生一个名为a.out的二进制文件将a.out文件复制到widows 系统桌面将文件传入到目标板在windows系统的超级终端执行a.out文件,