基于AT91SAM9G20构建嵌入式Linux系统

标签:Atmel
分享到:

       本文中使用的目标平台AT91SAM9G20是Atmel公司使用ARM926EJ-S处理器内核开发的一块SoC嵌入式微处理器,主频达到400MHz,具有Atmel 先进的外设DMA 和分布式存储器架构,连同6层总线矩阵,可实现存储器、外设和外部接口之间的多重数据同时传送,而无需耗费CPU的时钟周期。与引脚兼容的200 MHz AT91SAM9260相比,AT91SAM9G20提供多达4倍的高速缓存和片上 SRAM 内存,并具有增强的外接 NAND 闪存错误校正功能,以及更大的以太网 FIFO,能够减少传输延迟。其外部总线接口(EBI)的时钟频率为133 MHz,用于片外存储器的高速数据传送。这些特性使得开发人员可以将WindowsCE和Linux等操作系统移植到基于这块微处理器的目标系统中。

       操作系统也是嵌入式系统的重要组成部分。当今的嵌入式操作系统各种各样,有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所示。


图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所示。


图2:准备工作完成

继续阅读
开源门禁系统设计项目—基于ATmega328

门禁系统设计要求:基于atmega328单片机设计,具有通话、振铃、摘机、通话、开锁功能,还要有键盘和显示电路。

sam4s16c的片内flash读写

最近一直在玩sam4s16c,网上的所有论坛基本找不到atmel的资料,真心的不喜欢,但是工作需要,没办法。只能静下心来仔细研究Datasheet,别无他径。

把握MCU发展轨迹 正确选择MCU完成产品创新

面对缤纷多彩的 MCU 世界,如何在新品设计,老产品更新换代中正确的选择芯片和供应商将是要面临的一个重要的题目,因为无论是产品的更新还是 MCU 的更新速度都远远超出设计者预想,正确把握 MCU 发展趋势,利用 MCU 帮助产品创新是电子设计者正在考虑的问题。

SAM4L8教程之USB复合设备的实现

大家用usb数据线连接开发板的DEBUG USB,打开设备管理器会发现主机识别出有3个设备,这就是usb多功能的复合设备。下面是我探索将MSC,usb mouse和usb keyboard集合于1个设备的教程。

可视化的调试助手FreeRTOS+Trace

在AS开发库中,除了直接用于程序嵌入的库和内核以外,还有用来调试的工具。对于FreeRTOS而言,相对的线程和任务调度是比较难于用普通的设置断点,进行参数跟踪来实现的。因此,一种可视化的调试工具就被引入到AS中——FreeRTOS+Trace。

©2019 Microchip Corporation
facebook google plus twitter linkedin youku weibo rss