
 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
   ,即为 
  
 
  
   建立好的交叉编译环境。
  
 
  
  
 



















