ARM AT91SAM9260 移植Linux-2.6.30流程

来源:互联网 发布:知乎 礼节 编辑:程序博客网 时间:2024/05/29 15:27

标签: ARM Linux SAM9260 移植 抵岸科技

概述

本文的目的在于帮助AT91SAM9g20(以下简称为SAM9g20)的软件开发工程师从零开始,为SAM9g20建立Linux运行环境。

在进行SAM9g20 Linux开发之前,需要建立开发环境。

本文选用的目标板为:timll SBC6020上。

本文涉及到的一些linux基础知识,若无相关介绍,则请自行至网络搜索补充。

本文的部分内容来源于网络。

SAM9g20 Linux的基本组成:

·       Bootstrap

·       U-boot

·       Kernel

·       Rootfs

·       Bootstrap在Windows PC上编译,其余的在Linux PC上编译。

各部分组成如下图:

ARM AT91SAM9260 移植Linux-2.6.30流程 - 抵岸科技 - 抵岸科技的博客

 

开发环境

·       一台Linux PC(可以是虚拟机,以下简称为Linux开发机)

·       可以安装主流的Linux发行版本,比如 ubuntu, Fedora等等。在此推荐用ubuntu-10.4。

·       ubuntu-10.4标准的发行版本可能并没有包括所有开发中需要的组件。开发过程中可以根据需要通过网络安装。

·       如果采用虚拟机方式,可以选择虚拟机软件如 Virtual PC, VMware, VirtualBox等。在此推荐用VMware v6.5.2

·       安装完成后需要”打通”虚拟机与宿主机的共享通道,可以使用Linux的samba或者使用虚拟软件提供的第三方工具。

·       可用的网络

·       基于两个原因:

·       1. 开发初期使用NFS会比较方便。

·       2. Linux开发机安装组件。

·       开发机上所需要的基本程序开发工具

·       比如gcc( GCC-HOWTO)等。

·       目标板所用的交叉编译器

·       所谓交叉编译器,就是指在开发机上运行,编译结果在另外架构的平台上运行。

·       这里的交叉编译器指的就是ARM交叉编译器。编译器在Linux x86上将源代码编译成ARM体系结构适用的可执行文件。

·       Linux下可以使用的ARM交叉编译器很多,经过测试,推荐使用arm-linux-gcc 4.3.2工具。

·       交叉编译工具的搭建,详见:

      (链接)

·       目标烧写工具

·       有了编译的输出,还需要编程工具将其固化到SAM9g20的板子上运行。这个过程就是编程的过程。

·       由于SAM9g20提供了SAM-BA工具,所以最基本的方式就是通过USB口利用SAM-BA软件下载。

 

SAM9g20 Linux 启动流程

本文主要讲述从Data Flash上启动的过程,NAND flash启动,NOR Flash启动请参考相关文档。

1.     BOOTROM - 检查一个有效的Bootstrap是在FLASH中,如果Bootstrap存在,则将它加载到内部SRAM中,并将控制权交给Bootstrap。

2.     AT91Bootstrap - 开始分管硬件配置,从FLASH当中加载U-Boot程序到SDRAM,并将控制权交给U-boot。

3.     U-boot - 它是一个引导加载程序,在从FLASH,网络,USB等设备中加载内核到SDRAM中,并将控制权交给内核。

4.     Linux kernel - 操作系统内核。

5.     Rootfs - 根文件系统。

ARM AT91SAM9260 移植Linux-2.6.30流程 - 抵岸科技 - 抵岸科技的博客

 

1.     处理器复位,根据BMS引脚的设置,选择从内部ROM启动(NOR Flash启动方式不在本文的讨论范围)。

2.     BOOTROM开始运行,初始化CPU和内存控制器,比如DBGU,USB device port。它还建立了为内核使用的格式是一致的跨平台的内存映射,然后跳转到Bootstrap运行。

3.     如果Bootstrap存在,ROMBOOT将其复制到内部SRAM并跳转到Bootstrap运行。如果没有,则等待DBGU或者USB口的连接,这部分内容请参考SAM-BA手册。

4.     Bootstrap将初始化一些设备,主要是Data Flash与SDRAM,然后从Data Flash特定位置(在Bootstrap源代码中指定)将U-boot复制到SDRAM的指定位置,然后跳转到U-boot开始位置运行。

5.     U-boot根据环境变量(bootcmd)加载Linux Kernel的image。加载完成后跳转到Kernel运行,并传递启动参数(bootargs)。

6.     Linux Kernel开始运行,init读取/ etc / inittab文件,以执行相应的运行从/ etc / rc.d中,其中一开始就执行初始化脚本和其他网络系统服务控制脚本,加载相关驱动,并加载rootfs。

Data Flash Boot Mem Map

ARM AT91SAM9260 移植Linux-2.6.30流程 - 抵岸科技 - 抵岸科技的博客

 

 

*内部集成FLASH的AT91系列,Bootstrap存储于AT91内部FLASH当中,而不存储于DATAFLASH或NANDFLASH中。

 

Nand Flash Boot Mem Map

ARM AT91SAM9260 移植Linux-2.6.30流程 - 抵岸科技 - 抵岸科技的博客

 

*内部集成FLASH的AT91系列,Bootstrap存储于AT91内部FLASH当中,而不存储于DATAFLASH或NANDFLASH中。

 

Bootstrap移植流程

U-boot移植流程

Linux kernel移植流程

Rootfs移植流程

 

 

 

文件历史记录

版本            编制                    日期                        更改内容

-----------------------------------------------------------------------------------

V1.0           抵岸科技              2010-6-26              首发

 

V1.1           抵岸科技              2010-7-23              更改:*Bootstrap存储于AT91内部FLASH当中...