嵌入式软件开发(三)——嵌入式linux系统
前言:
上一节聊到裸机程序开发,虽然通过一些操作系统的思想可以有条件的实现受限多任务,但裸机程序仍然无法高效的实现多任务处理。操作系统引入可以很好的解决这个问题,不止如此,操作系统还可以管理处理器资源、管理系统存储资源、管理系统外设及提供操作系统与用户之间的接口。综合来说操作系统就是管理系统的软、硬件资源,向下驱动硬件设备,向上为用户提供调用接口的一套管理机制。本节主要介绍嵌入式linux系统的组成。
一、嵌入式linux系统的启动流程
通过前面章节我们了解到,CPU的运行过程就是获取软件指令并执行的过程,操作系统本质上也是一种软件,所以操作系统的启动过程也是CPU启动、运行的过程。此处以AARCH64架构CPU为例,嵌入式Linux启动流程主要分3部分:CPU片内firmware、boot loader(此处以u-boot为例)、linux系统,见下图:
firmware一般为CPU厂家在出厂时烧写的固件程序,其功能主要是CPU的初始化及CPU启动方式功能的实现,此部分视CPU厂家不同,实现的功能也不尽相同,有的CPU厂家就没有这部分,但有些NXP的CPU,通过CPU管教配置决定开发板是通过什么方式启动(Flash启动、SD卡启动、USB启动甚至网络启动),这个firmware就是要实现相应启动方式的硬件设备驱动及程序代码的拷贝。
U-boot是boot loader的一种,是操作系统的引导程序,其主要作用可以分为三部分:CPU初始化、板级设备初始化、引导操作系统内核。U-boot本质上是一段裸机程序,按流程依次实现上述功能。
Linux系统主要有两部分组成:linux kernel、filesystem,启动时先要启动内核,然后挂载根文件系统rootfs,然后再运行一系列应用进程。嵌入式系统中根文件系统的制作可以采用busybox。
二、嵌入式Linux系统架构
嵌入式linux系统相对于通用计算机系统的桌面linux系统,其基本架构一致,但组件比桌面系统要少,前面我们了解嵌入式系统是软、硬件可裁剪,Linux系统的可裁剪特性完美切合了嵌入式系统的需求,所以在嵌入式系统中选择嵌入式Linux系统在系统裁剪方面有着先天优势,同时linux的系统调用遵循posix规范,方便Linux系统的应用在嵌入式系统中移植、适配。下图是嵌入式linux系统的整体结构图: