4.1
系统软件的总体设计
基于龙芯
CPU
的气井控制器的设计需要开发测试硬件模块的测试软件,主要对
RTC
模块、存储器模块、
4G
通信、以太网通信、
UART
串口以及
AI
模块进行了驱动程序和
应用程序设计。将各个模块设计为不同的任务,龙芯
RTU
软件设计流程图如图 4-1 所示。
4.2
嵌入式
Linux
开发环境
4.2.1
嵌入式
Linux
系统的构建
随着微处理器的迅速发展,各种成本低廉、结构紧凑的
CPU
与外围连接形成了稳定
可靠的硬件架构。二十世纪八十年代末以来,
Vxwork
、
pSOS
、
Neculeus
和
Windows CE
等嵌入式操作系统相继出现逐步成熟起来。然而,对于成本要求尽可能低廉的嵌入式领
域的产品,此类针对商用而专门研发的操作系统的价格相对高昂,难以接受。此外,嵌
入式领域的产品研发对操作系统的源代码是否开源也有较高的需求,开源的操作系统代
码更能激发嵌入式领域研究人员的创造激情。而且,从上层应用程序开发人员的角度考
虑,做嵌入式系统的开发的操作系统的简洁程度、界面是否友好、价格是否低廉、系统
移植性高不高等都是非常关键的因素。随着
1991
年引入
Linux
系统,
Linux
系统已发展
成为在计算机行业发挥核心作用的项目,除了在台式机和服务器系统上使用外,
Linux
系
统还构成了
Android
操作系统的基础,该操作系统几乎已在
15
亿移动设备上应用
[37]
。究
其原因,
Linux
操作系统以其代码开源、高稳定性、软件免费、易于裁剪和移植等得天独
厚的优势
[38]
,在嵌入式系统打开了新的发展局面,因而,嵌入式
Linux
系统成为了众多
开发设计人员的首要选择
[39]
。
在嵌入式系统中,
Linux
是一种应用最为广泛的开发环境。代码生成工具、项目管理
工具、版本控制工具、调试工具等是其重要的组成部分。在开发工具中,代码生成工具
是开发的重要组成部分,用于生成嵌入式可执行程序。其他工具可以帮助完成嵌入式开
发并加快开发过程。
对于
Linux
操作系统很多人都只是简单的认为是
linux
内核源码构成的操作系统,其
实,
linux
系统应该包含
linux
内核、由
shell
程序、程序库、编译器及工具等组成的
GNU
软件工具包、文件系统和系统库等。这些东西才构成了完整的
Linux
系统,缺一不可。
使用
Linux
作为嵌入式操作系统具有以下优势:
(
1
)适用于多种硬件平台,开发人员通过在硬件平台上研发出原型设计图,再将硬
件设计图移植到实物,目前,
Linux
已经被移植到各种硬件平台上。站在开发任务重、时
间紧迫的开发项目和团队的角度来看,
Linux
系统降低了软件和硬件的开发复杂度、节
约了研发资金,加快了工作速度,因而
Linux
以其独特的魅力吸引了众多研究开发人员。
(
2
)
Linux
可以在没有许可证或商业合作的情况下任意配置
Linux
。配置工程十分
自由。
(
3
)免费、源代码开源这是
Linux
操作系统最吸引嵌入式研发人员的目光的优点。
毫无疑问,相对于其他收费高昂的操作系统,使用
Linux
操作系统的开发成本会大大降
低。
(
4
)
Linux
内部设有网络支持,网络功能相当强大。
(
5
)
Linux
模块化程度较高,易于添加各种小部件。
基于
Linux
操作系统的以上优势,开发者在实际运用系统的过程中,可根据开发需
求对
Linux
系统展开裁剪或者移植等工作,以便于该系统获得稳定的运行环境,系统间
良好的兼容性。嵌入式
Linux
系统通过其出色的性能、易于裁剪和开发的优势支持各类
架构的
CPU
和硬件平台的研究开发。
嵌入式
Linux
操作系统主要由
BootLoader
、内核以及根文件系统组成
[39]
。如图
4-2
所示。
PMON
是一个主要用于嵌入式系统的开源软件,具备基本输入输出系统(
BIOS
)和
引导程序(
BootLoader
)的某些功能
[40,41]
。此外,
PMON
支持
BIOS
启动配置,内核加
载,程序调试,内存寄存器显示、设置和内存反汇编等功能
[42]
。基于龙芯的系统在
PMON
上做了大量的改进工作,使得作为基本输入输出系统和引导程序的替代系统的
PMON
更
加完善。
对于
Linux
应用软件的开发人员来说,基于设计需求,首先要对复杂的
Linux
内核
进行配置,即可裁剪出满足设计需求的量身定制的内核,然后对内核进行编译,将编译
好的内核移植到硬件目标板中进行操作。
Linux
内核的编译过程主要分为两步:第一要
进行根据需求配置内核。第二进要行内核编译。
Linux
内核启动之后,因系统要实现最基本的一些功能,所以首先必须加载根文件
系统。根文件系统制作完成后,再使用各类文件系统镜像制作工具制作根文件系统目录
对应类型的文件系统镜像。
4.2.2
在主机搭建
Linux
环境
在嵌入式
Linux
系统开发过程中,毕竟硬件电路板上的支持软件的开发和调试的各
类系统资源有限,往往无法进行软件开发和调试,因此本文将
PC
机上装有
Linux
的发
行版本
Ubuntu
的
VMware Workstation
虚拟机作为交叉编译环境的主机
[41]
,进而采用串
口通信或者以太网通信等通信方式进行软件开发与调试工作。
(
1
)安装虚拟机
在没有虚拟机出现之前,开发嵌入式
Linux
系统通常会在一台机子上安装双操作系
统,当进入程序编辑、程序编译、程序调试时要进入到
PC-Linux
系统中,当进行调试或
配置、文档编写时要进入到
Windows
。双系统的切换就是启动计算机再启动计算机或者
是将
Linux
系统或
windows
系统分装到两台计算机上,两者之间通过共享的方式进行数
据传输。虚拟机出现后,双系统就犹如一台电脑上的两个软件或两个磁盘而已。通常是
在
Win10
系统中通过虚拟机软件模拟
PC
机,再在虚拟机软件中搭建
Linux
系统
[43]
。
VMware Workstation
是一个虚拟
PC
的软件,由于我们的日常使用的大多数计算机
都安装了
Windows
操作系统,
VMware workstation
虚拟机可以在现有的
Windows
操作系
统上创建一个甚至多个新的硬件环境,即模拟一台甚至多台
PC
机。
Linux
操作系统即可
在搭建好的虚拟的
PC
机上运行。本文安装的是
VMware Workstation 15.5 Pro
版本的虚
拟机。如图
4.3
所示是安装后的虚拟机界面。
(
2
)安装
Ubuntu
系统
桌面环境、数据库、媒体播放器、办公套件等是目前
Linux
的发行版本必不可少的
应用程序。目前,
Ubuntu
作为一款相当完善的
Linux
操作系统发行版本,以其出色的桌
面应用环境和便于开发等优势备受嵌入式系统开发人员的青睐。本文安装的
Ubuntu16.04
LTS
版本,安装好后的
Ubuntu
桌面环境如图
4-4
所示。
要开发嵌入式
Linux
的应用软件,由于该开发过程是要通过跨平台开发,所以应该
搭建一个交叉开发环境
[44]
。进行应用软件开发的通用计算机一般为装有
Windows
操作系
统的
PC
机。在
windows
平台上开发应用程序的很多程序并不了解交叉编译器,因为它
已经集成到很多的
IDE
软件中。交叉编译器是在一个计算机环境中运行并生成在另一个
环境中可以运行的代码的独立的编译工具。这个编译过程就叫交叉编译。通俗点讲,即
需要在
A
平台上编译生成
B
平台上的可执行程序。如果要运行在嵌入式
Linux
开发平台
上的为嵌入式目标板上编写的源代码,则需要在运行前使用交叉编译器对其进行编译。
要进行交叉编译,我们必须在宿主平台上安装相应的交叉编译工具链,我们编写的源代
码经过交叉编译工具链编译后,即可在相应的目录找到在嵌入式目标板中可运行的程序。
我们目前采用的是针对平台编译好的二进制工具包为
buildroot-2016.02-glibc-gcc-4.7.x
mips32-nofpu.tar.bz2
,把制作好的交叉工具解压至
Linux
系统的根目录下,此外,还要设
置工具链的路径到系统环境变量。如图
4-5
所示,我们可看到
gcc
版本号为
4.7.4
,即为
建立好的交叉编译环境。