为microchip的ATSAMA5Dx系列mpu编译linux启动镜像

  • Post author:
  • Post category:linux


此教程是从



WebHome < Linux4SAM < TWiki



及一些官方英文视频教程归纳总结而来,如果急得看不进去英文,就来看看我这篇教程吧。



本教程会以一块atsama5d27的




开发板,




sd




卡启动为例,介绍怎么编译linux启动相关文件。

启动流程及所需编译项目

在芯片上电后,固化在芯片内部的一小段程序会在各存储介质(sd卡 ,nand flash,spi flash)中查找并将


bootloader


调出来运行。

1.



bootloader



使用microchip公司自己编写的at91bootstrap项目编译而成。功能是对芯片进行初始化,设置时钟外设、设置周围连接的PMIC和DDR芯片等。根据编译时的设置,在初始化完成后,会从存储介质中将uboot







linux




内核加载出来运行。

2.知名项目



uboot





。很多芯片都采用




uboot




来完成


at91bootstrap所做的初始化内容。


但在这时加载




uboot




出来,是贪他自带的一些实用的功能。比如用他可以方便的修改一些启动




linux




时的附加参数,通过网络下载




linux




内核文件并替换,开机时从串口控制台进入




uboot




调试模式等。



当然, uboot




最后也是要把




linux




内核文件找出来,将




rootfs




的位置及一些参数告诉它,最后芯片控制权交由




linux




内核。

3.

linux

内核,使用最伟大的开源项目linux编译而成,microchip没有搞出什么自己魔改过的系统,老老实实的适配着最伟大的Linux。

4.

rootfs

根文件系统,linux的“c盘”,是指一堆文件夹与文件的集合体,所以linux内要使用的软件都要编译后存进rootfs内。目前较常用的是buildroot项目来编译,microchip公司也有提供使用buildroot进行一站式编译的示例配置,可以从bootloader到rootfs一键编译并生成可烧录镜像。

如果使用的是sd卡来存储,则只需要编译好这4个项目,将相关文件改好名后直接放进sd卡。

如果使用nand flash或emmc 来存储,则需要去下载microchip的烧录工具sam-ba进行烧录,将相关文件用sam-ba烧录到指定地址。

安装所需软件

安装一些在后续可能会使用到的软件。


如果编译时遇到报错




xxx




命令




not found




,那就是对应的程序没安装,用




apt




指令安装即可。

sudo apt-get install net-tools ssh sed make binutils build-essential apt-utils gcc g++ ncurses-base libncurses5-dev python git bison flex nfs-kernel-server libssl-dev chrpath gawk texinfo minicom nano cvs file cpio w3m asciidoc dblatex asciidoc-dblatex graphviz python-matplotlib

安装一些电脑中可能会缺少的库,


如果编译时遇到报错




xxx.h




文件不能打开,那就是缺少




lib




库文件,用




apt




指令安装即可。

sudo apt-get install diffstat libsdl1.2-dev libc6-i386 lib32stdc++6 lib32z1 libssl-dev   libncurses5-dev  -y

安装交叉编译器

sudo apt-get install gcc-arm-linux-gnueabi gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf –y

sd卡分区

1 查找sd卡节点名称

要操作sd卡,需要先找到其在/dev路径下的节点名称。这里我通过插拔sd卡,查看插入后多出哪个sd*节点的方式来找

查找到这个/dev/sdb即是我的sd卡,只分了一个区,所以有个sdb1。

2 用fdisk分区

使用fdisk对/dev/sdb进行操作,按m可以查看所有可用操作命令

 sudo fdisk /dev/sdb

这里我先输入d,删除sd卡内原有的分区

然后将sd卡分为两个区,分区1为fat格式,20M, 设置为启动分区。分区2为默认的linux ext4格式,100M。

3 格式化分区

mkfs.vfat /dev/sdb1
mkfs.ext4 /dev/sdb2

4 查看sd卡

sudo fdisk –l

编译at91bootstrap

1clone项目并进入

git clone https://github.com/linux4sam/at91bootstrap.git

2找找自带的配置文件

位于

at91bootstrap /configs

路径下,这些配置都是基于microchip官方开发板的。

配置文件的名称由3个信息组成:开发板名称,所用存储介质,接下来引导谁

存储介质:

qspi表示qspi flash

sd表示sd卡

nf表示nand flash

引导:

uboot表示下一步要引导uboot

linux_image_dt 表示下一步要引导linux内核和设备树

特殊:

名称带bkptnone的是用于裸机开发的

比如我用的开发板是sama5d2_xplained,我使用sd卡,接下来需要引导uboot。所对应的配置文件是sama5d2_xplainedsd_uboot_defconfig。

3加载对应配置文件

下面命令要在at91bootstrap目录下运行。因为make命令后带的参数具体对应什么操作,是由当前目录下的makefile文件来解析控制的。

首先,清除旧的目标文件和配置

make mrproper

然后加载configs路径下的配置文件sama5d2_xplainedsd_uboot_defconfig

make sama5d2_xplainedsd_uboot_defconfig

4 手动配置界面

输入以下指令就可以进入配置界面,但我用的是官方开发板,什么都不需要改,只是进来看一眼有啥。

make menuconfig

本界面的操作方法与后面linux、buildroot的menuconfig界面的操作方法相同:

上下方向键,在列表中上下移动

左右方向键,会在下面的select exit help三个选项中移动

按回车,会执行下方3个选项中所选择的功能

按两下esc返回

遇到前面有[ ]的选项,按空格可以选择是否启用

这里能设置很多硬件相关东西,比如时钟频率,配套pmic的控制,外接什么存储介质在哪个接口上等。讲两个与初始化完下一步操作有关的。


Next Software Type

可以设置当芯片初始化完了,下一个要调谁出来运行


Next Software Image File Name

选项设置了下一个要启动的程序的文件名称,在sd卡内查找文件是以文件名而不是地址。 这里默认被设置为u-boot.bin。

5 编译

首先运行下面指令,以声明要使用的交叉编译器。

由于交叉编译器有多种类型,很多项目(后面编译linux和uboot时也是)都会在编译脚本通过CROSS_COMPILE这个环境变量来控制要调用哪个交叉编译器。在编译脚本内会将CROSS_COMPILE的内容和”gcc”这个字符串相拼接,作为最终使用的编译器。

我们这里使用最基本的嵌入式交叉编译器arm-linux-gnueabi-gcc ,命令如下

export CROSS_COMPILE=arm-linux-gnueabi-

然后运行以下命令即可开始编译

make

题外话:注意一下电脑的用户权限问题,比如本目录下有用管理员权限创建修改过的文件,make时使用普通用户权限,因权限问题导致编译失败。

6目标文件

在上一步make编译,完成后会提示最后编译出的文件名称。位于

build/binaries/

路径下

这里我的文件名称是sama5d2-sdcardboot-uboot-4.0.0.bin。这个文件要改名为boot.bin放进sd卡分区1内。

mount /dev/sdb1 /mnt/
cp build/binaries/sama5d2-sdcardboot-uboot-4.0.0.bin /mnt/boot.bin
umount /mnt/

uboot

uboot比较有名,网上使用教程较多,所以这里只展示一下怎么编译microchip的配置。

1 clone项目

这里我们下载存储在microchip公司的GitHub账号的uboot项目,其实下载uboot官方的也可以,相关配置都贡献进去了。

git clone https://github.com/linux4sam/u-boot-at91.git

2 找找默认配置文件

自带的配置文件位于

configs/

路径下,由于有非常多的芯片都在使用uboot,所以这个路径下的配置文件极多

这里我们使用ls configs/*sama5d2* 命令来查看有哪些和sama5d2相关的配置文件

配置文件的命名是以开发板名+存储介质的方式,我的开发板是sama5d2_xplained,sd卡在这里被命名为mmc(很多芯片负责驱动sd卡的外设就命名为mmc)。所以我们要使用的配置文件是sama5d2_xplained_mmc_defconfig

3 配置

使用以下命令调用对应配置文件

make sama5d2_xplained_mmc_defconfig

配置文件内已经写好了bootcmd和bootargs的参数:

bootcmd=fatload mmc 1:1 0x21000000 at91-sama5d2_xplained.dtb; fatload mmc 1:1 0x22000000 zImage; bootz 0x22000000 – 0x21000000

bootargs=console=ttyS0,115200 earlyprintk root=/dev/mmcblk1p2 rw rootwait

bootcmd设置了下一步要从sd卡中查找名为at91-sama5d2_xplained.dtb与zImage的文件。

bootargs设置了控制台是串口0,rootfs位置是sd卡分区2。

当然这两个参数可以随便改,uboot的相关教程网上很多,都是通用的,这里不解释了。

4 编译

export CROSS_COMPILE=arm-linux-gnueabi-
make

5目标文件

在当前目录下会生成一个u-boot.bin,这个就是我们要的目标文件了。刚好和在at91bootstrap内设定的文件名相同。只要存放到sd卡分区1内即可。

mount /dev/sdb1 /mnt/
cp u-boot.bin /mnt/
umount /mnt/

linux kernel

只简单走一遍编译流程,编译linux内核的教程都是通用的

1 clone项目

这里我们下载存储在microchip公司的GitHub账号的linux内核项目。

git clone https://github.com/linux4sam/linux-at91.git

2.配置文件

microchip只提供了两个配置文件,都位于arch/arm/configs。


at91_dt_defconfig

: 适用于内核为ARM926的SAM9 系列芯片,,


sama5_defconfig

:用于内核为Cortex-A5的SAMA5系列芯片,

我使用的芯片是sama5d2所以使用后面这个配置

make ARCH=arm sama5_defconfig

3.开始编译

export CROSS_COMPILE=arm-linux-gnueabi-
make ARCH=arm

4.目标文件

位于

arch/arm/boot/

路径下的zImage文件

位于

arch/arm/boot/dts

的at91-sama5d2_xplained.dtb设备树文件

将这两个文件存放到sd卡分区1即可,上一步uboot内的bootcmd参数设置的文件名刚好跟这俩相同。

mount /dev/sdb1 /mnt/
cp arch/arm/boot/zImage /mnt/
cp arch/arm/boot/dts/at91-sama5d2_xplained.dtb /mnt/
umount /mnt/

rootfs(buildroot)

1 clone项目

这里我们直接下载buildroot官方项目

git clone https://github.com/buildroot/buildroot.git

2 进入配置

由于rootfs的通用性较强,只需要编译时配置的处理器架构类型相同即可使用。这里我就不载入microchip提供的示例配置,从一个空工程开始,展示一遍怎么修改那部分不通用的部分。

首先运行命令进入menuconfig配置功能

make menuconfig

3.修改关于处理器架构部分

进入Target options选项

关于处理器架构的部分就只有下面这几个必选的


Target Architecture

设置为ARM(littile endian)  ,ARM小端模式


Target Architecture Variant

设置选A5,sama5系列都是cortex-A5内核


Enable VFP extension support

启用,VFP指硬件浮点计算单元,sama5系列都带


Target ABI

选择EABIhf,带浮点计算的

设置完成后按两下esc退出,提示是否保存时记得选yes

4 开始编译

make

这个步骤耗时较长,编译过程中还会上github下载大量东西,最少半小时起步。

5 目标文件

位于

output/images/

路径下的rootfs.tar。我们要将其解压至sd卡分区2

mount /dev/sdb2 /mnt/
tar -xvf output/images/rootfs.tar -C /mnt/
umount /mnt/

启动

至此,将sd卡插到嵌入式开发板上,即可启动



版权声明:本文为weixin_43850980原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。