操作系统也是嵌入式系统的重要组成部分。当今的嵌入式操作系统各种各样,有VxWorks、QNX、Palm OS,Windows CE、Linux, uClinux,ucos ii等,每种操作系统都有其与众不同之处,本文移植的嵌入式操作系统为Linux。广泛开放源代码的Linux应用已经被移植到嵌入式的运行环境中,可以任意剪裁和修改后将其移植入自己的硬件平台上,因此使用Linux开发嵌入式操作系统,可以加快嵌入式系统的开发速度,缩短产品进入市场的时间。
本文的工作主要包括Boot loader实现,Linux内核移植、文件系统的实现三个部分。
搭建交叉开发环境
在移植操作系统之前,首先要在一台装有Linux的PC机上搭建好开发环境,例如我们的宿主机为Ubuntu10.04,为获得所有操作权限,以root身份登录宿主机Linux系统。在 usr/local/目录下建立arm路径,下载交叉编译工具arm-linux-gcc-4.3.2.tgz,将之复制到文件夹/usr/local/arm/下,并将其解压;最后需要修改环境变量,设置默认交叉编译工具为arm-linux-gcc-4.3.2。利用Linux下编辑工具(如vim)打开/root/.bashrc文件,在文件末尾添加如下代码:
if
[ -d /usr/local/arm ] ;
then PATH=/usr/local/arm/4.3.2/bin:"${PATH}"
fi
到此交叉编译工具搭建完毕,为验证交叉编译工具是否搭建成功,可以在终端下输入命令 arm-linux-gcc -v,搭建成功后会在终端下显示arm-linux-gcc的版本。注意此处必须注销用户,重新登录系统后设置才会生效。
引导程序
系统上电之后,需要一段程序来进行初始化:关闭看门狗、改变系统时钟、初始化存储控制器、将更多的代码复制到内存中等,这段程序被称为Boot loader。简言之Boot loader就是在系统上电后开始执行,初始化硬件设备、准备好软件环境、最后调用操作系统内核。Boot loader的实现非常依赖与具体的硬件,在嵌入式系统中硬件配置千差万别,即使是相同的CPU,外设资源也不尽相同,因此需要根据特定的硬件进行移植。
Boot Loader包含两种不同的操作模式:启动加载模式和下载模式。上电后,Boot loader从板子上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程没有用户的介入,一般用于最终产品。下载模式下则在开发过程中使用,开发人员可以使用各种命令,通过串口或网络等通信手段从宿主机下载文件(比如内核映像,文件系统映像),将它们直接放入内存或是烧入flash类固态存储设备中。
为了在AT91SAM9G20上实现嵌入式操作系统运行,AT91SAM9G20采用了三.级引导方式,其Boot Loader程序由三部分组成,即RomBoot、Bootstrap和U-Boot,三.级引导程序的流程如图1所示。
第一级引导程序Romboot固化在AT9lSAM9G20内部,上电或复位后先运行这段引导代码,其作用是将存储于外部FLASH第二级引导程序Bootstrap加载到CPU内部的SRAM中执行。Bootstrap存储在外部FLASH的前4KB空间,其功能包括初始化时钟、SDRAM控制器以及DEBUG串口等硬件资源,并将第三 级引导程序U-Boot从FLASH加载到SDRAM执行。U-Boot将嵌入式Linux操作系统从FLASH引导和加载到SDRAM中,并将CPU的控制权交给Linux。
本次移植使用的U-boot的版本为1.3.4,限于篇幅,本文不做详细的介绍。
内核的裁剪编译
1.准备工作
从Linux官网下载linux内核源码linux-2.6.30.tar.bz2,并从Atmel官网下载at91sam9g20的补丁文件(2.6.30-at91.patch.gz 和2.6.30-at91-exp.3.tar.gz)。在宿主机Linux开发环境下,建立自己的工作目录,例如工作目录为home/work/,将上述三个文件拷贝至工作目录下,解压Linux2.6.30,并将2.6.30-at91.patch.gz和2.6.30-at91-exp.3.tar.gz拷贝至Linux2.6.30根目录下,同时解压2.6.30-at91-exp.3.tar.gz。完成此部分工作如下图2所示。
上一篇:基于安卓的非标准驱动程序设计
下一篇:基于MCGS的充电站监控系统设计
推荐阅读最新更新时间:2024-03-16 13:29