第 1 章 嵌入式 Linux 开发应用
1.1
嵌入式 Linux 简介
嵌入式 Linux(Embedded Linux)是指对标准 Linux 经过小型化裁剪处理之后,能够固化 在容量只有几 KB 或者几 MB 字节的存储器芯片或者单片机中,是适合于特定嵌入式应用场合 的专用 Linux 操作系统。在目前已经开发成功的嵌入式系统产品当中,有近一半嵌入式使用的 是经过裁剪的嵌入式 Linux 操作系统。这与它自身的优良特性是分不开的。 1.1.1 嵌入式 Linux 特点 嵌入式 Linux 同 Linux 一样,具有低成本、多种硬件平台支持、优异的性能和良好的网络 支持等优点。另外,为了更好地适应嵌入式领域的开发,嵌入式 Linux 具有以下几方面特点: 1.模块化方面 Linux 的内核设计非常精巧,分成进程调度、内存管理、进程间通信、虚拟文件系统和网 络接口五大部分。其独特的模块机制可根据用户的需要,实时地将某些模块插入或从内核中移 出,使得 Linux 系统内核可以裁剪得非常小巧,很适合于嵌入式系统的需要。 2.实时性方面 由于现有的 Linux 是一个通用的操作系统,虽然它也采用了许多技术来提高内部系统的运 行和响应速度,但从本质上来说并不是一个嵌入式实时操作系统。因此,利用 Linux 作为底 层操作系统,在其上进行实时化改造,从而构建出一个具有实时处理能力的嵌入式系统, 3.硬件支持方面
Linux 能支持 X86、ARM、MIPS、ALPHA 和 PowerPC 等多种体系结构的微处理器。目 前已成功地移植到数十种硬件平台,几乎能运行在所有流行的处理器上。另外世界范围内有众 多开发者在为 Linux 的扩充贡献力量,所以 Linux 有着异常丰富的驱动程序资源,支持各种主 流硬件设备和最新的硬件技术,甚至可在没有存储管理单元 MMU 的处理器上运行,这些都 进一步促进了 Linux 在嵌入式系统中的应用。 4.安全性方面 Linux 内核的高效和稳定已在各个领域内得到了大量事实的验证。Linux 中大量网络管理、 网络服务等方面的功能,可使用户很方便地建立高效稳定的防火墙、路由器、工作站、服务器 等。为提高安全性,它还提供了大量的网络管理软件、网络分析软件和网络安全软件等。
5.网络支持方面 Linux 是首先实现 TCP/IP 协议栈的操作系统,它的内核结构在网络方面是非常完整的, 并提供了对包括十兆位、百兆位及千兆位的以太网,还有无线网络、Token ring(令牌环)和 光纤甚至卫星的支持,这对现在依赖于网络的嵌入式设备来说无疑是很好的选择。 1.1.2 嵌入式 Linux 应用领域 由于嵌入式 Linux 自身的优良特性,使得嵌入式应用涵盖的领域极为广泛,开发人员可以 使用嵌入式 Linux 这种模块化的实时操作系统在工业控制、医疗设备、消费类电子产品、网络 设备、智能家居、交通控制以及仪器仪表等领域方面开发各种高端嵌入式产品,如图 1-1 所示。 图 1-1 嵌入式 Linux 应用设备 (1)网络设备:在互联网日益昌盛的今天,人们对网络访问的要求也越来越高,随着 3G、 4G 网络的普及,越来越多的应用离不开网络,越来越多的设备加入网络的支持,世界因为网 络而改变已成为不争的事实。嵌入式 Linux 对于广域网、局域网、无线设备、有线设备的支持 都很强大,所以有如下被广泛应用于这个领域的各个设备: Internet 连接设备 家庭/建筑物自动化网关 移动服务点 联网式媒体设备 机顶盒 (2)消费类电子:这类产品应用极其广泛,很多产品大家都能随处可见,甚至已经在使 用。嵌入式 Linux 创建用户界面更具有个性化,浏览体验更丰富多彩。设备制造商可以快速、 高效地将其设备推向市场。嵌入式 Linux 在这方面的典型应用如下:
数字相框 电子阅读器设备 GPS 导航设备 便携式媒体播放器 移动手持终端 (3)工业控制仪器:嵌入式 Linux 以其高性能、高可靠性、强大的数据库和网络支持, 使其在工控、仪表仪器和医疗设备等方面也占有一席之地。 HMI 人机界面 遥测设备 智能装置 监控设备 (4)其他:嵌入式 Linux 还依靠其快速、高效开发的特点被广泛应用于其他领域: 条码和 RFID 扫描仪 媒体服务器
1.2 Linux
操作系统安装
用户要进行嵌入式 Linux 的应用开发,首先要搭建一个性能优良的主机开发环境,因为嵌 入式 Linux 下的大部分开发工作都是在 PC 机端开发完成的,一般嵌入式 Linux 开发环境有以 下几个方案: 基于 PC 机的 Windows 操作系统下的虚拟机。 在 Windows 下安装虚拟机后,再在虚拟机中安装 Linux 操作系统。 直接安装 Linux 操作系统。 如果用户的 PC 机硬件配置较好,那么建议在 Windows 环境下安装 VMWare 虚拟机软件, 然后再安装一个桌面版本的 Linux 系统,本书安装的是 Ubuntu10.04 版本。 1.2.1 Ubuntu操作系统简介Ubuntu 是一个以桌面应用为主的 Linux 操作系统,基于 Debian 发行版和 GNOME 桌面环 境,它是一个由全球化的专业开发团队建造的操作系统,内部包含了所有诸如浏览器、Office 套件、多媒体程序、即时消息等应用程序。Ubuntu 是一个 Windows 和 Office 的开源替代品。 与 Debian 的不同在于它每 6 个月会发布一个新版本。Ubuntu 的目标在于为一般用户提供一个 最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。Ubuntu 具有庞大的社区力 量,用户可以方便地从社区获得帮助。Ubuntu 系统有以下三方面特性:
1.安装速度
测,所以相对 Windows 系统速度上还是有绝对的优势。但相对于 Linux Mint 和 openSUSE, 其速度上的优势就不明显了,由于支持功能相对较多,所以安装过程相对复杂较慢,Ubuntu 运行界面如图 1-2 所示。 图 1-2 Ubuntu 运行界面 2.汉化方面 由于没有商业利益方面的驱动,在这方面 Linux 的各个版本可能跟 Windows 相比都要逊 色,但是相对于其他 Linux 版本,Ubuntu 在汉化方面则有很大优势,其图形界面方面汉化程 度要比其他版本有明显优势。 3.软件方面 Ubuntu 由社区开发,适用于笔记本电脑、桌面电脑和服务器。无论您是在家庭、学校还 是工作时使用,Ubuntu 几乎都包含了您所需的所有程序:无论是文字处理和电子邮件,还是 Web 服务和编程工具,这在很大程度上是基于其强大的软件库。 1.2.2 新建虚拟机
(1)运行 WMware Workstation,打开文件菜单,选择 New→Virtual Machine 命令,新建 一个虚拟机,如图 1-3 所示。
(2)选择自定义模式(Custom),单击 Next 按钮,如图 1-4 所示。
图 1-4 选择自定义模式
(3)由于本机上安装的 WMware Workstation 是 7.1 版本的,所以这里选择 WMware 版本 为 Workstation6.5-7.x,单击 Next 按钮,如图 1-5 所示。
(4)前面只是新建一个虚拟机,Ubuntu 操作系统将在后面进行安装,所以这里选择 I will install the operating system later.(稍后安装操作系统)选项,单击 Next 按钮,如图 1-6 所示。
图 1-6 选择“稍后安装操作系统”选项
(5)选择将要安装在虚拟机上的操作系统类型为 Linux,版本为 Ubuntu,单击 Next 按钮, 如图 1-7 所示。
(6)新建的虚拟机命名为 MyUbuntu,安装路径这里选择为 E:\My Documents\My Virtual Machines\MyUbuntu 目录下,单击 Next 按钮,如图 1-8 所示。 图 1-8 选择安装路径 (7)处理器的个数选择 1 个,由于处理器分为单核和多核,这里 PC 的处理器内核选择 2 个,单击 Next 按钮,如图 1-9 所示。 图 1-9 处理器的参数选择
(8)为了使虚拟机运行起来更加流畅一些,这里虚拟机内存设置为 1024MB,即 1GB, 单击 Next 按钮,如图 1-10 所示。
图 1-10 设置虚拟机内存
(9)这里选中 Use network address translation(NAT)(使用网络地址翻译)单选项,这 样只有宿主机可以上网,虚拟机不用特殊设置就可以共享宿主机的网络,单击 Next 按钮,如 图 1-11 所示。
(10)输入输出控制器保持默认选择,单击 Next 按钮,如图 1-12 所示。
图 1-12 输入输出控制器选择
(11)选中 Create a new virtual disk(新建一个虚拟硬盘)单选项,单击 Next 按钮,如图 1-13 所示。
(12)选择新建一个虚拟硬盘的类型为 SCSI 类型,单击 Next 按钮,如图 1-14 所示。
图 1-14 选择硬盘的类型
(13)将新建的硬盘最大容量设置为 20GB,同时选择把虚拟硬盘当做一个单独的文件, 这里不勾选 Allocate all disk space now.复选框,为的是在新建虚拟硬盘时,不马上直接分配 20GB 空间,而是在之后的使用过程中,慢慢增大这个空间,直到增大到设定的 20GB 为止, 单击 Next 按钮,如图 1-15 所示。
(14)将前面设定的 20GB 硬盘文件命名为 MyUbuntu.vmdk,单击 Next 按钮,如图 1-16 所示。 图 1-16 硬盘文件命名 (15)将前面各项参数设置完成之后,在如图 1-17 所示的界面上回显新建的虚拟机各项 参数,以确保用户设置正确,单击 Finish 按钮。 图 1-17 显示新建的虚拟机各项参数
1.2.3 安装 Ubuntu10.04 操作系统
安装 Ubuntu10.04 操作系统具体步骤如下:
(1)选择 CD/DVD(IDE)项,这里将 Ubuntu10.04 的安装镜像装载进行,如图 1-18 所示。
图 1-18 装载 Ubuntu10.04 的安装镜像
(2)单击 WMware Workstation 运行界面上的 Power on this virtual machine 选项,启动 Ubuntu 安装界面,如图 1-19 所示。
(3)用户可以根据自己的喜好选择相应版本的 Ubuntu,这里安装语言选择 English 版本, 单击 Install Ubuntu 10.04.1 LTS 按钮,如图 1-20 所示。
图 1-20 选择安装版本类型和语言
(4)在如图 1-21 所示的界面上,选中 Erase and use the entire disk(擦除和使用整个盘)单 选项,单击 Forward 按钮。
图 1-21 选择擦除和使用整个盘选项
(5)在如图 1-22 所示的界面上,设置登录 Ubuntu 系统的用户名和密码,输入正确之后, 单击 Forward 按钮。
图 1-22 输入用户名和密码
(6)当按照后面的安装向导完成 Ubuntu 系统的安装之后,登录 Ubuntu 系统,在如图 1-23 所示的登录界面上,输入前面设置的 wh 用户密码进行系统登录。
图 1-23 登录 Ubuntu 系统 1.2.4 Root用户参数设置
Ubuntu 系统的默认 root 密码是随机的,即每次开机都有一个新的 root 密码。用户可以在 终端输入命令 sudo passwd,然后输入当前 wh 用户的密码,回车之后,终端会提示我们输入 新的密码并确认,此时的密码就是 root 新密码。修改成功后,输入命令 su root,再输入新的 密码就可以了,如图 1-24 所示。
图 1-24 设置 root 用户参数 1.2.5 安装 VMware Tools 前面安装完 Ubuntu 系统之后,用户必须使用 Ctrl+Alt 组合键才能在虚拟和现实系统间进 行切换,这样使用起来极不方便。而 VMware Tools 用于解决虚拟机的分辨率问题、改善鼠标 的性能以及将虚拟机的剪贴板内容直接粘贴到宿主机中,VMware Tools 是通过光盘镜像的方 式加载到操作系统中运行安装的,下面详细介绍 VMware Tools 安装过程。
(1)打开 VMware Workstation,选择菜单 VM→Install VMware Tools 命令,如图 1-25 所示。
图 1-25 Install VMware Tools 选项
(2)在/media/VMware Tools/目录下显示如图 1-26 所示的 VMwareTools-8.4.5-324285.tar.gz 压缩文件。
(3)解压 VMwareTools-8.4.5-324285.tar.gz 文件。
首先将 VMwareTools-8.4.5-324285.tar.gz 文件拷贝至/home/wh/目录下,然后执行解压命令, 如图 1-27 所示,具体操作命令如下:
root@wh-desktop:~# cd /media/VMware\ Tools/
root@wh-desktop:/media/VMware Tools# cp VMwareTools-8.4.5-324285.tar.gz /home/wh/ root@wh-desktop:/home/wh/# tar xzvf VMwareTools-8.4.5-324285.tar.gz
图 1-26 生成 VMwareTools-8.4.5-324285.tar.gz 文件
图 1-27 解压 VMwareTools-8.4.5-324285.tar.gz 文件
(4)执行 VMwareTools-8.4.5-324285.tar.gz 文件的解压命令之后,生成 vmware-tools-distrib 文件夹,如图 1-28 所示。
(5)执行 vmware-tools-distrib 文件夹下的 vmware-install.pl 文件,如图 1-29 所示,具体 操作命令如下: root@wh-desktop:/home/wh/vmware-tools-distrib# ./vmware-install.pl 图 1-29 执行 vmware-install.pl 文件 (6)按照提示输入信息,推荐输入回车执行,最后成功完成 VMwareTools 的安装,如图 1-30 所示。 图 1-30 VMwareTools 的安装成功 1.2.6 vim编辑器安装
Ubuntu 默认安装的 vim 编辑器在编辑文本过程中存在很多问题,因此需要重新下载 vim。 用 root 账户登录 Ubuntu,命令行中输入 vim,如果未安装会得到如图 1-31 所示的提示, 这里按照提示输入 apt-get install vim 进行 vim 编辑器安装。
安装完成后,输入 vim 会进入 vim 的标准模式,这时按键盘上的 i 键进入插入模式,按 Esc 键退出插入模式,进入标准模式,在这个模式下有几个基本命令: :wq-保存退出。 i-进入插入模式。 x-删除当前光标的字符。 dd-删除当前行,并且保存当前行到剪切板。 p-粘贴。 help <command>-查看命令的帮助。 ↑、↓、←、→键:上、下、左、右移动光标。 :w filename-保存文件到当前目录。 :q-退出 vim 页面。 :wq!-强行退出 vim 页面。 1.2.7 设置 Linux 系统共享文件夹
(1)打开 VMware Workstation,选择 Options 选项卡,在 Folder sharing 区域中,选中 Always enabled 单选项,单击 Add 按钮,如图 1-32 所示。
图 1-32 选择 Options 选项
(2)在如图 1-33 所示的“新增共享文件夹”对话框中,路径选择 E:\Sharewhtc,名称设 置为 Sharewhtc,单击 Next 按钮,如图 1-33 所示。
图 1-33 设置共享文件夹属性
(3)当属性设置完成之后,会显示如图 1-34 所示的共享文件夹 Sharewhtc 的名称及路 径信息。
1.3 Linux
交叉编辑器安装
1.3.1 交叉开发环境特点 嵌入式系统通常是一个资源受限的系统,因此直接在嵌入式系统的硬件平台上编写软件 比较困难,有时候甚至是不可能的。目前一般采用的解决办法是首先在通用计算机上编写程序, 然后通过交叉编译生成目标平台上可以运行的二进制代码格式,最后再下载到目标平台的特定 位置上运行。 嵌入式应用软件开发时的一个显著特点就是需要交叉开发环境(Cross Development Environment)的支持,交叉开发环境是指编译、链接和调试嵌入式应用软件的环境,它与运 行嵌入式应用软件的环境有所不同,通常采用宿主机/目标机模式,如图 1-35 所示。 图 1-35 交叉开发环境 1.3.2 交叉开发环境组成要素 1.宿主机(Host) 宿主机(Host)是一台通用计算机(如 PC 机或者工作站),它通过串口或者以太网接口 与目标机通信。宿主机的软硬件资源比较丰富,不但包括功能强大的操作系统(如 Windows 和 Linux),而且还有各种各样优秀的开发工具(如 Qt Creator 和 Microsoft 的 Embedded Visual C++等),能够大大提高嵌入式应用软件的开发速度和效率。 2.目标机(Target) 目标机(Target)一般在嵌入式应用软件开发期间使用,用来区别与嵌入式系统通信的宿 主机,它可以是嵌入式应用软件的实际运行环境,也可以是能够替代实际运行环境的仿真系统, 但软硬件资源通常都比较有限。嵌入式系统的交叉开发环境一般包括交叉编译器、交叉调试器 和系统仿真器,其中交叉编译器用于在宿主机上生成能在目标机上运行的代码,而交叉调试器 和系统仿真器则用于在宿主机与目标机间完成嵌入式软件的调试。 在采用宿主机/目标机模式开发嵌入式应用软件时,首先利用宿主机上丰富的资源和良好 的开发环境开发和仿真调试目标机上的软件,然后通过串口或者用网络将交叉编译生成的目标 宿主机 目标机 RS232/Ethernet代码传输并装载到目标机上,并在监控程序或者操作系统的支持下利用交叉调试器进行分析和 调试,最后目标机在特定环境下脱离宿主机单独运行。 1.3.3 安装交叉编译器 (1)将 arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz 交叉编译器拷贝到前面构建的共享文件夹 Sharewhtc 目录下,如图 1-36 所示。 图 1-36 交叉编译器拷贝到共享文件夹 (2)执行如下命令进行解压 arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz 交叉编译器,如图 1-37 所示。
root@wh-desktop:/mnt/hgfs/Sharewhtc# tar xzvf arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz -C /
图 1-37 执行解压命令
(3)交叉编译器解压完成之后,在/opt/FriendlyARM/toolschain/4.5.1/bin/目录下生成各种 交叉编译器文件,如图 1-38 所示。
(4)设置交叉编译器环境变量。
为了一开机就自动设置 PATH,可修改/etc/profile 文件。执行命令:root@wh-desktop:/# vim /etc/profile,打开文件之后,添加如下内容,如图 1-39 所示。
export PATH=/opt/FriendlyARM/toolschain/4.5.1/bin:$PATH
图 1-38 生成交叉编译器文件
图 1-39 设置交叉编译器环境变量 (5)输入以下命令,使设置的环境变量生效。
root@wh-desktop:/# source /etc/profile
(6)检查交叉工具链版本,输入以下命令,如图 1-40 所示。
图 1-40 测试 arm-linux-gcc -v 版本
1.4 Linux
平台的 C 程序开发
1.4.1 Linux的 C 程序代码编写
用 vim 编辑文件 test.c,执行 root@wh-desktop:/home/wh# vim test.c 命令,C 程序代码内容 如下: #include <stdio.h> int sum(int m); int main() { int i , n=0; sum(50);
for(i=1; i<=50; i++) { n +=1; } printf("The sum of 1-50 is %d \n", n ); } int sum(int m) { int i ,n =0; for (i=1; i<m; i++)
n +=1;
printf("The sum of 1-m is %d\n", n); }
vim 编辑器中的 C 程序代码如图 1-41 所示。
图 1-41 C 程序代码 1.4.2 编译 PC 版的 C 程序
用 PC 版的 Linux 的 C 语言编译器 gcc 执行命令:root@wh-desktop:/home/wh# gcc -o pc-test test.c,编译完成之后生成 pc-test 可执行程序,然后执行./pc-test 文件,显示如图 1-42 所示的 运行结果。
图 1-42 编译运行 PC 版的 C 程序 1.4.3 编译 ARM 版的 C 程序
用交叉编译器 arm-linux-gcc 编译 test.c 文件。注意:直接从 Windows 下的 Word 文档中拷 贝程序到 vim 编缉器中,编译时可能会出现错误(可能是字库或换行符的不同)。
执行 root@wh-desktop:/home/wh# arm-linux-gcc -o Arm-test test.c 命令,生成文件 Arm-test。 输入 root@wh-desktop:/home/wh# file Arm-test 命令,查看生成的 test 文件的类型,Arm-test 的文件类型为 ARM 格式,说明 ARM 的交叉编译环境已经安装成功,如图 1-43 所示。
图 1-43 交叉编译 ARM 版本的 C 程序
1.5 Linux
平台的 minicom 串口安装配置
为了能够顺利进行后面的项目开发测试,这里需要安装 Linux 下的串口调试工具 minicom。 Linux 下 Minicom 的功能与 Windows 下的超级终端功能相似,可以通过串口控制外部的硬件 设备,适于在 Linux 对嵌入式设备管理。
1.5.1 设置虚拟机串口参数
(1)打开 VMware Workstation,选择 Hardware 选项,单击 Add 按钮,弹出如图 1-44 所 示的“新增串口设备”对话框,选择 Serial Port 项,单击 Next 按钮。
(2)在如图 1-45 所示的“新增串口设备”对话框中,选择宿主机上的实际物理串口设备。 图 1-45 选择宿主机串口设备 (3)在如图 1-46 所示的“新增串口设备”对话框中,选择 Auto detect 选项,表示自动检 测物理串口设备。 图 1-46 选择自动检测物理串口设备 1.5.2 安装与配置 minicom 1.安装 minicom
2.配置 minicom
(1)执行 root@wh-desktop:/# minicom -s 命令配置 minicom 串口,如图 1-47 所示。
图 1-47 配置 minicom 串口 (2)选择 Serial port setup 项进入如图 1-48 所示的界面。
图 1-48 串口参数设置
(3)将“A - Serial Device:”由原来的/dev/ttyS0 设置为为/dev/ttyS1,具体参数请根据宿 主机系统设置,回车退出,然后选择 Save setup as dfl 项,回车保存更改设置,再选择 Exit 项 退出 minicom,接着 minicom 开始初始化,链接上串口设备,如图 1-49 所示。