微操控器制造商的开发板,以及他们与开发板一同供给的软件项目例程,在工程师着手一个新规划时能够供给很大协助。但在规划项目完结其前期阶段后,进一步规划时,制造商供给的软件也或许会导致一些问题。
运用实时操作体系作为运用程序代码渠道的规划还面临着许多应战,比方怎么将功用分配给不同的并行使命、怎么规划高牢靠的进程间通讯、以及怎么在硬件上测验整个软件包等问题。
越来越多的OEM厂商发现,防止上述两个问题的最好方法,是运用依据开源、经过验证、可扩展、可运行在不同硬件渠道的操作体系Linux开端新的规划。就现已被移植到各种计算机硬件渠道的操作体系的数量来说,Linux名列前茅。Linux的衍生版别已运行在十分广泛的嵌入式体系中,包含:网络路由器、移动电话、修建主动化操控、电视机和视频游戏操控台。
尽管Linux被成功运用,但并不意味着它很简单运用。Linux包含的代码超越一百万行,其运作带有明显的Linux方法论滋味,初学者或许难以敏捷把握。
因而,本文的宗旨是为运用Linux的嵌入式操作体系版别——μClinux,开端一个新的规划项目,该攻略共分为五个进程。为了阐明该攻略,本文介绍了介意法半导体的STM32F429微操控器(ARMCortex-M4内核,最高180MHz)上的一个μClinux项目完结,运用了Emcraft 的STM32F429DiscoveryLinux板支撑包(BSP)。
进程1:Linux东西和项目布局
每个嵌入式软件规划都从挑选适宜的东西开端。
东西链是一组衔接(或链接)在一同的软件开发东西,它包含比如GNU编译器调集(GCC)、binutils(一组包含衔接器、汇编器和其它用于方针文件和档案东西的开发东西)和glibc(供给体系调用和根本函数的C函数库)等组件;在某些情况下,还或许包含编译器和调试器等其它东西。
用于嵌入式开发的东西链是一个穿插东西链,更常见的叫法是穿插编译器。
GNUBinutils是嵌入式Linux东西链的第一个组件。GNUBinutils包含两款重要东西:
●“as”,汇编器,将汇编代码(GCC所生成)转换成二进制代码
●“ld”,衔接器,将离散方针代码段衔接到库或构成可执行文件
编译器是东西链的第二个重要组成部分。在嵌入式Linux,它被称为GCC,支撑许多种微操控器和处理器架构。
接下来是C函数库。它完结Linux的传统POSIX运用编程接口(API),该API可被用来开发用户空间运用。它经过体系调用与内核对接,并供给高阶服务。
工程师有几种C函数库挑选:
●glibc是开源GNU项目供给的可用C函数库。该库是全功用、可移植的,它契合Linux规范。
●嵌入式GLIBC(EGLIBC)是一款针对嵌入式体系优化的衍生版。其代码是精简的,支撑穿插编译和穿插测验,其源代码和二进制代码与GLIBC的兼容。
●uClibc是另一款C函数库,可在闪存空间有限、和/或内存占用有必要最小的情况下运用。
调试器一般也是东西链的一部分,由于在方针机上调试运用程序运行时,需求一个穿插调试器。在嵌入式Linux范畴,GDB是常用调试器。
上述东西是如此地不可或缺,但当它们各自为战时,会花太长时刻来编译Linux源代码并将其整组成终究映像(image)。走运的是,Buildroot(主动生成穿插编译东西的东西)会主动完结构建一个完好嵌入式体系的进程,并经过发生下述任一或一切使命,简化了穿插编译:
●穿插编译东西链
●根文件体系
●内核映像
●引导映像
对嵌入式体系规划师来说,还能够方便地运用一种东西(utility)聚合东西,如BusyBox,这种东西将一般最需求的东西整合在一同。依据 BusyBox的信息页面介绍,“它将许多常用UNIX东西的微型版别整组成一个小的可执行文件。它供给了对大多数你一般会在GNUfileutils和 shellutils等东西中看到的东西的代替。BusyBox里的东西一般比其全功用GNU对应版别的挑选少;但所包含选项所供给的预期功用和行为则与对应的GNU所供给的几无差别。对任何小或嵌入式体系来说,BusyBox供给的环境都是适当完好的。”
最终一个重要东西是一款BSP,是为搭载了项目方针MCU或处理器的主板专门做的。
BSP包含预先装备的东西,以及将操作体系加载到主板的引导加载程序。它还为内核和器材驱动器供给源代码(见图1)。
图1:用于STM32F429Discovery板的EmcraftBSP的首要部件