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

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

        本教程会以一块atsama5d27的开发板,sd卡启动为例,介绍怎么编译linux启动相关文件。

启动流程及所需编译项目

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

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

         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卡内原有的分区

为microchip的ATSAMA5Dx系列mpu编译linux启动镜像_第1张图片

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

为microchip的ATSAMA5Dx系列mpu编译linux启动镜像_第2张图片

 为microchip的ATSAMA5Dx系列mpu编译linux启动镜像_第3张图片

 

3 格式化分区

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

为microchip的ATSAMA5Dx系列mpu编译linux启动镜像_第4张图片

 

4 查看sd卡

sudo fdisk –l

 

编译at91bootstrap

1clone项目并进入

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

2找找自带的配置文件

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

为microchip的ATSAMA5Dx系列mpu编译linux启动镜像_第5张图片

配置文件的名称由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

为microchip的ATSAMA5Dx系列mpu编译linux启动镜像_第6张图片

4 手动配置界面

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

make menuconfig

为microchip的ATSAMA5Dx系列mpu编译linux启动镜像_第7张图片

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

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

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

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

按两下esc返回

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

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

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

为microchip的ATSAMA5Dx系列mpu编译linux启动镜像_第8张图片

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

为microchip的ATSAMA5Dx系列mpu编译linux启动镜像_第9张图片

5 编译

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

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

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

export CROSS_COMPILE=arm-linux-gnueabi-

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

make

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

6目标文件

为microchip的ATSAMA5Dx系列mpu编译linux启动镜像_第10张图片

在上一步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相关的配置文件

为microchip的ATSAMA5Dx系列mpu编译linux启动镜像_第11张图片

         配置文件的命名是以开发板名+存储介质的方式,我的开发板是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

为microchip的ATSAMA5Dx系列mpu编译linux启动镜像_第12张图片

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,带浮点计算的

为microchip的ATSAMA5Dx系列mpu编译linux启动镜像_第13张图片

设置完成后按两下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卡插到嵌入式开发板上,即可启动

为microchip的ATSAMA5Dx系列mpu编译linux启动镜像_第14张图片

你可能感兴趣的:(为linux开发板编译,linux,运维,服务器)