ARM开发板编译----MYS-6ULX

记录一下之前烧ARM板的经历,本人第一次烧ARM板,欢迎大家评论探讨

刚毕业,一进公司就被安排的明明白白。望着手中崭新的板子,慢慢摸索呗

首先说一个惨痛的经历,由于没有经验,对Linux内核、系统等不熟悉,一开始就是自己在PC上装了一个虚拟机,分配了1G内存和50G硬盘(好吧,在学校的时候这种配置够我用了),然而多次耗时耗力的编译失败,让我开始怀疑人生。。。

重点!保证基本的软硬件环境要求:

强烈建议内存要2G以上(注意不包括2G,因为内存太小编译可能有问题),磁盘空间至少要80G以上,推荐120G,CPU至少双核。强烈不推荐虚拟机方式,直接在硬盘上安装Ubuntu,除非你的磁盘性能很高。

最后,我是在公司的服务器上编译完成的(分配了8G内存和足够的磁盘空间)

参照开发手册《MYS-6ULX-LinuxDevelopmentGuide_zh.pdf》

1、部署开发环境

新开一个窗口,安装必备软件包

sudo apt-get install build-essential git-core libncurses5-dev flex bison texinfo zip unzip zlib1g-dev gettext u-boot-tools g++ xz-utils mtd-utils gawk diffstat gcc-multilib python git make gcc g++ diffstat bzip2 gawk chrpath wget cpio texinfo

2、建立工作目录

建立工作目录,方便设置统一的环境变量路径。下载源码到工作目录下,同时设置DEV_ROOT变量,方便后续步骤的路径访问。

mkdir -p ~/MYS6ULx-devel

export DEV_ROOT=~/MYS6ULx-devel    //配置到/etc/profile文件中,使永久生效

在当前目录下解压文件,得到四个文件夹,并复制到工作目录下。

cp -r 01-Document $DEV_ROOT

cp -r 02-Images $DEV_ROOT

cp -r 03-Tools $DEV_ROOT

cp -r 04-Source $DEV_ROOT

3、配置编译工具

3.1 Linaro编译器

cd $DEV_ROOT

tar -xvf 03-Tools/Toolchain/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf.tar.xz

在/etc/profile文件中添加如下换环境

执行完上述命令后输入"arm-linux-gnueabihf-gcc -v",若有输出版本信息如下图,说明设置成功,以上设置只对当前终端有效。

3.2 Yocto编译工具链

Yocto提供的工具链有两种,一种是底层开发的meta-toolchain,另一种是用于应用开发的工具链。前者和Linaro类似,后者包含应用开发中的相关库,可以直接使用pkg-config工具来解决头文件或库文件的依赖关系。MYS-6ULX的资源包中有提供两种工具链。

包含Qt5相关库的应用工具链:

myir-imx-fb-glibc-x86_64-fsl-image-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh

不包含Qt5的应用工具链:

myir-imx-fb-glibc-x86_64-core-image-base-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh

meta-toolchain:

myir-imx-fb-glibc-x86_64-meta-toolchain-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh

Yocto编译器是以SDK工具包方式来提供,需要先安装SDK包后,才可以使用。安装方法如下:

以普通用户权限执行shell脚本,运行中会提示安装路径,默认在/opt目录下(自行建立目录,如下图),同时会提示输入用户密码以便有写入目录的权限。安装完成后,可以使用"source"或"."命令加载工具链环境到当前终端。

此处应先执行:

chmod +x myir-imx-fb-glibc-x86_64-fsl-image-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh

chmod +x myir-imx-fb-glibc-x86_64-meta-toolchain-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh

使两个文件拥有可执行权限。

验证SDK工具链是否安装正确,先使用"source"命令加载Yocto的环境配置文件,然后查看编译器版本。

source /opt/myir-imx6ulx-fb/4.1.15-2.0.1/environment-setup-cortexa7hf-neon-poky-linux-gnueabi  //加载环境

arm-poky-linux-gnueabi-gcc –v //显示版本如下图

同样方法安装底层开发的工具链meta-toolchain。安装两个工具链,需指定不同目录,请勿使用相同目录,出现文件相互覆盖情形。

执行:

source /opt/myir-imx6ulx-fb/meta-toolchain/environment-setup-cortexa7hf-neon-poky-linux-gnueabi       //加载环境

arm-poky-linux-gnueabi-gcc –v     //显示版本如下图

4、构建系统

主要介绍MYS-6ULX开发板上, Linux操作系统相关部件的编译和使用。MYS-6ULX的Linux系统包含以下部件:

U-Boot: 引导程序,支持不同方式启动内核。

Linux Kernel: 适用于MYS-6ULX开发板的Linux 4.1.15内核,同时包含支持板载外设的驱动。

Yocto: 一个开源协作项目,提供丰富的模板、工具和方法来支持构建出面向嵌入式产品的自定义Linux系统。

本部分中用到的代码存放在资源包04-Source目录下,部分软件包的文件名中有标识号。

编前u-boot和Linux内核代码前,请先安装meta-toolchain并加载环境变量到当前shell。

4.1 编译U-Boot

进入Bootloader目录,解压U-boot源码:

cd $DEV_ROOT/04-Source/

tar -xvf MYiR-iMX-uboot.tar.gz

cd MYiR-iMX-uboot

开始编译:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- <config>

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

这里的是配置选项名称,不同的启动模式需使用不同的配置选项,MYS-6ULX开发板四种选项:

启动模式                               编译选项

MYS-6ULX-IND NAND Flash        mys_imx6ul_14x14_nand_defconfig

MYS-6ULX-IND eMMC Flash        mys_imx6ul_14x14_emmc_defconfig

MYS-6ULX-IoT NAND Flash        mys_imx6ull_14x14_nand_defconfig

MYS-6ULX-IoT eMMC Flash        mys_imx6ull_14x14_emmc_defconfig

此处选择mys_imx6ul_14x14_nand_defconfig。

mkimage工具是在u-boot的tools目录下,u-boot编译完成后,mkimage也会被编译出来,直接使用即可。

4.2 Linux Kernel

进入04-Source目录,解压内核源码:

cd $DEV_ROOT/ 04-Source

tar -xvf MYiR-iMX-Linux.tar.gz

cd MYiR-iMX-Linux

开始编译:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mys_imx6_defconfig

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage dtbs modules

编译完成后在"arch/arm/boot"目录会生成内核镜像文件zImage,在"arch/arm/boot/dts"目录会生成DTB文件。

mys-imx6ul-14x14-evk-emmc.dtb        

mys-imx6ul-14x14-evk-gpmi-weim.dtb       

mys-imx6ul-14x14-evk-emmc-myb6ulx.dtb    

mys-imx6ul-14x14-evk-gpmi-weim-myb6ulx.dtb  

mys-imx6ull-14x14-evk-emmc.dtb           

mys-imx6ull-14x14-evk-gpmi-weim.dtb         

mys-imx6ull-14x14-evk-emmc-myb6ulx.dtb      

mys-imx6ull-14x14-evk-gpmi-weim-myb6ulx.dtb 

5、构建文件系统

Linux系统平台上有许多开源的系统构建框架,这些框架方便了开发者进行嵌入式系统的构建和定制化开发,目前比较常见的有Buildroot, Yocto,OpenEmbedded等等。其中Yocto项目使用更强大和系统化的方法,来构建出适合嵌入式产品的Linux系统。

Yocto不仅仅是一个制做文件系统工具,同时提供整套的基于Linux的开发和维护工作流程,使底层嵌入式开发者和上层应用开发者在统一的框架下开发,解决了传统开发方式下零散和无管理的开发形态。

Yocto是一个开源的“umbrella”项目,意指它下面有很多个子项目,Yocto只是把所有的项目整合在一起,同时提供一个参考构建项目Poky,来指导开发人员如何应用这些项目,构建出嵌入式Linux系统。它包含Bitbake,OpenEmbedded-Core, 板级支持包,各种软件包的配置文件。通过Poky,可以构建出不同类需求的系统,如最小的系统core-image-minimal、带GUI的图形系统fsl-image-gui、带Qt5图形库的fsl-image-qt5。

NXP i.MX6UL/i.MX6ULL芯片提供符合Yocto的构建配置文件,通过这些文件可以构建出NXP定制的镜像文件。我们提供了符合MYS-6ULX的配置文件,帮助开发者构建出可烧写在MYS-6ULX板上的Linux系统镜像。

5.1 Yocto构建Linux系统

本节适合需要对文件系统进行深度定制的开发者,希望从Yocto构建出符合MYS-6ULX系列开发板的文件系统,同时基于它的定制需求。初次体验使用或无特殊需要的开发者可以直接使用MYS-6ULX已经提供的文件系统。

由于Yocto构建前需要下载文件系统中所有软件包到本地,为了快速构建,MYS-6ULX已经把相关的软件打包好,可以直接解压使用,减少重复下载的时间。

这里提供了两种方式使用Yocto:

使用由MYS-6ULX资源包中的Yocto和相关文件

从NXP官网下载Yocto

初次使用Yocto的用户,推荐使用第一种方式。

注意:构建Yocto不需要加载工具链环境变量,请创建新shell或打开新的终端窗口。

MYS-6ULX提供的Yocto:

解压Yocto源码包,同时解压Yocto-downloads.tar.xz软件包至Yocto目录下。

cd $DEV_ROOT

tar xvf 04-Source/fsl-release-yocto.tar.gz

tar xvf 04-Source/Yocto-downloads.tar.xz -C fsl-release-bsp

cd fsl-release-bsp

还需要将Linux内核和U-Boot代码放在用户家目录下,方便开发和Yocto编译。

cd $DEV_ROOT

tar xvf $DEV_ROOT/04-Source/ MYiR-iMX-Linux.tar.gz -C ~/

tar xvf $DEV_ROOT/04-Source/ MYiR-iMX-uboot.tar.gz -C ~/

6、初始化Yocto构建目录

进入/home/ieslab-ubuntu/MYS6ULx-devel/fsl-release-yocto目录,使用NXP提供的fsl-setup-release.sh脚本,会创建一个工作空间,然后在此空间下构建镜像。执行脚本后会先要求阅读并同意版权声明后才会进入构盡过目录。同时,脚本会默认创建并进入build目录。如果需要特定目录名称,可以使用-b参数,如"-b myir"。 这里的MACHINE参数有两种设备,"mys6ull14x14"对应于MYS-6ULX-IoT和"mys6ul14x14"对应于MYS-6ULX-IND版本。

DISTRO=myir-imx-fb MACHINE=mys6ul14x14 source fsl-setup-release.sh -b build

tree conf/

build/conf目录下是当前构建的配置文件。

7、构建GUI Qt5版的系统

在build目录下执行:

bitbake fsl-image-qt5

第一次构建时,会需要很长时间,而且一般会有几十个警告,请耐心等待。8G的内存大概花了6小时。

构建完成后会在"tmp/deploy/images/mys6ul14x14/"目录下生成不同的文件。

8、构建非GUI版的系统

此处不做描述。

9、Yocto构建SDK工具

Yocto提供可构建出SDK工具的功能,用于底层或上层应用开发者使用的工具链和相关的头文件或库文件,免去用户手动制做或编译依赖库。SDK工具有两种,一种是适合底层开发的工具链,用于编译u-boot和linux内核代码,另外一种是应用开发工具链,附带目标系统的头文件和库文件,方便应用开发者移植应用在目标设备上。两种SDK工具都是shell自解压文件,执行后,默认安装在/opt目录下。

9.1 构建底层工具连

bitbake meta-toolchain

构建完成后,在"tmp/deploy/sdk"目录下有三个文件:

这里有两个manifest文件,host.manifest是工具链中包含主机端的软件包的列表,target.manifest是包含目标设备端的软件包列表。

9.2 构建应用层工具链

应用层工具链是和Image名称是统一的,这里可以使用"fsl-image-qt5"和"core-iamge-base"两种参数。

bitbake -c populate_sdk <image name>,此处我选择了"fsl-image-qt5"。

构建完成后,同样在"tmp/deploy/sdk/"目录下有三个文件:

".host.manifest"文件表示工具链中包含主机端的软件包列表,".target.manifest"表示工具链中包含目标设德端的软件包列表。"myir-imx6ulx-fb-glibc-x86_64-fsl-image-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh"文件是构建出的SDK工具链,可以直接安装在其他Linux系统中,开发和编译目标端设备的二进制程序。

 

到此,所需要烧写的Uboot、Linux内核、基于QT的文件系统、设备树以及交叉开发的工具链均完成了。

一定要注意环境的加载

欢迎探讨指正

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
编译 gdb 和 gdbserver for arm-linux-gnueabihf 可以按照以下步骤进行: 1. 下载 gdb-9.2 源代码包,可以从官网 http://www.gnu.org/software/gdb/ 或者其他镜像站点下载,也可以使用 wget 命令从命令行下载: ``` wget https://ftp.gnu.org/gnu/gdb/gdb-9.2.tar.gz ``` 2. 解压源代码包: ``` tar -zxvf gdb-9.2.tar.gz ``` 3. 进入源代码目录: ``` cd gdb-9.2 ``` 4. 创建编译目录: ``` mkdir build-arm cd build-arm ``` 5. 运行 configure 脚本生成 Makefile: ``` ../configure --target=arm-linux-gnueabihf --host=x86_64-linux-gnu ``` 注意:需要根据所使用的交叉编译工具链修改 target 参数,例如 arm-linux-gnueabi、arm-linux-gnueabihf 等。 6. 编译: ``` make ``` 7. 安装 gdb: ``` sudo make install ``` 注意:需要将编译出的 gdb 文件复制到 ARM 开发板上使用。 8. 进入 gdbserver 目录: ``` cd ../gdbserver ``` 9. 创建编译目录: ``` mkdir build-arm cd build-arm ``` 10. 运行 configure 脚本生成 Makefile: ``` ../configure --host=arm-linux-gnueabihf ``` 11. 编译 gdbserver: ``` make ``` 12. 安装 gdbserver: ``` sudo make install ``` 注意:需要将编译出的 gdbserver 文件复制到 ARM 开发板上使用。 13. 可以使用 arm-linux-gnueabihf-gdb 命令测试 gdb 是否安装成功,使用 arm-linux-gnueabihf-gdbserver 命令测试 gdbserver 是否安装成功。 注意:编译 gdb 和 gdbserver 需要安装一些依赖库,例如 libncurses、libexpat、libreadline 等,可以使用包管理器安装或者手动编译安装,并且需要安装对应的交叉编译工具链。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xumingyifrend

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值