查看: 4251|回复: 3

[原创] NXP-i.MX6UL开发板linux简易编译手册(好东西!!!)

[复制链接]

该用户从未签到

发表于 2017-11-23 11:02:16 | 显示全部楼层 |阅读模式
分享到:
先来简介下i.MX6UL这款芯片   
  i.MX 6UL是飞思卡尔第一款搭载ARM Cortex-A7内核的处理器,其能耗比A9内核的CPU低50%以上。它采用先进的电源管理架构,改变了以往与MCU相比CPU是“电老虎”的状况。i.MX 6UL以14x14 和9x9 MAPBGA形式封装,适合低功耗和空间受限的应用场合。具有硬件加密引擎、篡改检测和动态DRAM加密/解密等内置功能,可以使客户面向高度安全的应用进行设计。i.MX 6UL起价不到4美元,性价比极高!

微信图片_20171115140248.png


  大家可以简单的了解下这个块芯片!



  这一次使用的就是盈鹏飞嵌入式公司基于i.MX6UL处理器的推出的开发板(EVB-P6UL)!开发板就不详情介绍了,大家可去自行去官网(http://www.embedall.com/)查看资料!只给大家贴几张官网提供的图!

开发板(EVB-P6UL)

(接口功能还是十分丰富的!!!)

微信图片_20171115140336.png

核心板( CoM-P6UL)

p6ul-NAND.png

接下来就要切入正题了!


概述

  本文适用于COM-P6UL模块,内核使用Device Tree的情况下。主要讲解如何安装交叉编译链,如何编译U-BooT,如何编译内核和dtb文件,如何制作根文件系统等!



1.安装交叉编译工具链

说明:搭建Linux开发环境其实有更为简便的方法(解压交叉编译工具链到tools目录下即可),安装只为提供多一种选择,选用哪种方法用户根据自己情况而定。
      安装用于编译u-boot、linux内核、应用程序和制作根文件系统的交叉工具编译链,该文件位于光盘的/ fsl-release-bsp/tools 目录下。步骤如下:
       a、解压交叉编译工具链到linux PC机的/opt目录
$ sudo tar -jxvf gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux-C /opt

       b、设置环境变量
              1)使用vi打开个人主目录下bashrc文件
              $ sudo vi ~/.bashrc
              2)在末尾加入,如下图所示:expoRTPATH=$PATH:/opt/gcc-linaro-arm-linux-gnueabihf-4.           9-2014.07_linux/bin

1.png

3)保存、退出,执行以下命令使环境变量生效
              $ sudo source ~/.bashrc
              注:不执行source,则需重启系统。

       c、查看交叉编译工具链是否正确配置,输入以下命令。正确配置则在终端打印gcc版本信息,如图所示。
       $ arm-linux-gnueabihf-gcc -v
2.png
注:本文档图片仅供参考,可能与实际情况有些差别,但差别不会太大)

特别说明:安装本编译器到opt目录,主要是为了编译buildroot,我们提供了buildroot的软件包,编译器的环境变量设为/opt目录。

编译系统镜像本章介绍存储媒介地址空间分布,及dtb、uboot、内核编译。
1FLASH的空间分配(QSPI NOR 和nand FLASH)
       EVB-P6UL的启动媒介有Nand Flash、QSPI Nor Flash、 emmc三种,每一种的容量相差较大,地址空间分布不尽相同。


3.png

注:rootfs的size根据Nand大小而定,其值为Nand大小减去0x1480000,即减去前面kernel等分区所占用的空间后剩余空间大小。如表格中所示为256MB的Nand中rootfs分区的size:0x10000000-1480000=0xeb80000,其中0x10000000=256M。512mB的Nand的rootfs分区大小为:0x20000000-0x1480000=0x1eb80000此外Nand存在坏块,实际大小小于或等于理论值。
4.png
说明:EVB-P6UL包含2片32MB的QSPI NorFlash,一片做为系统启动媒介,一片用于数据储存。由于容量有限,系统镜像文件要充分考虑存储空间是否足够。
编译准备
  为了编译更为简便,在出厂的光盘中整理好编译所需的文件,您只需将编译器解压到指定目录,再执行Makefile中的相关编译指令。此外,您还可以自行搭建编译环境。光盘中的文件如下图所示:
5.png
dts:/fsl-release-bsp/imx6ul/arch/arm/boot/dts/
       uboot:/ fsl-release-bsp/uboot-imx
       kernel:/fsl-release-bsp/imx6ul
       filesystem:/fsl-release-bsp/rootfs_qt
注:以上文件编译完成后,都会复制到/fsl-release-bsp/image。
              

      所有的镜像文件都依赖于“/fsl-release-bsp/Makefile”,编译前先检查Makefile的规则,尤其是路径和文件名。列出Makefile的内容,如下图所示:
6.png
7.png

Makefile中包含了“Rules.make”文件 ,查看Rules.make的内容。
8.png

Rules.make指定了相关的路径,特别注意“DIR_TOOLS”,该参数指定编译器的路径。默认的环境变量为/fsl-release-bsp/tools/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/bin/arm-linux-gnueabihf-将“gcc-linaro-arm-linux-gnueabihf-4.9.tar.bz2”文件解压至“/fsl-release-bsp/tools目录,交叉编译链安装完成。若您需要更改编译器的路径,更改Rules.make文件即可。

       安装交叉编译工具链到指定路径之后,还需对编译的脚本 Env.sh做简单了解,在编译前先执行该脚本。脚本的内容下图所示:
9.png

编译uboot
在EVB-P6UL上,编译u-boot可用两种方法实现,分别为简易编译和单步编译。
简易编译uboot
本小结按照Makefile中的规则,介绍如何编译uboot。
       a、解压交叉编译工具链

       $ tar -jxvf gcc-linaro-arm-linux-gnueabihf-4.9.tar.bz2
10.png
注意:如“编译准备”中所述,交叉编译工具链必须安装到/fsl-release-bsp/tools目录。
       b、解压uboot源码

       $ tar -jxvf uboot-imx.tar.bz2
11.png
c、解压完成后,在fsl-release-bsp目录执行 . Env.sh:
       $ . Env.sh

12.png

       注意:执行 . Env.sh 后,终端提示符发生变化。环境变量在当前console下有效,即dtb、内核亦可在当前终端编译,而不需要再执行 . Env.sh。下文中的操作均在当前console中进行,不需再运行 Env.sh脚本。
d、执行makeu-boot.imx,编译uboot

       $ makeu-boot.imx
13.png
编译的好的uboot自动复制到fsl-release-bsp/image目录下,文件名为u-boot.imx。

单步编译uboot
安装交叉编译链、Uboot源码与简易编译uboot的步骤一样,请参考上文,不再累述。
       a、进入uboot源码目录,生成配置文件。
       $ cduboot-imx
       $ makemx6ul_14x14_ddr3_arm2_nand_defconfig
14.png
注:EVB-P6UL一共有三种配置,区别在于存储媒介不同,分别有eMMC、Nand、QSPI Nor,配置文件如下:
l  mx6ul_14x14_ddr3_arm2_emmc_defconfig           // eMMC的配置文件
l  mx6ul_14x14_ddr3_arm2_nand_defconfig             //Nand的配置文件
l  mx6ul_14x14_ddr3_arm2_qspi1_defconfig                    //QSPI Nor Flash的配置文件
       需要编译不同的uboot,根据存储媒介生成配置,make 配置文件名即可。执行以上指令后,在当前目录会生成一个 .config 的隐藏文件,如下图所示:
15.png
b、编译uboot。
       $ make

       执行make后,在当前目录生成 u-boot.imx,至此uboot编译完成。
16.png

编译内核
在EVB-P6UL上,编译内核可用两种方法实现,分别为简易编译和单步编译。

简易编译内核
本小结按照Makefile中的规则,介绍如何编译内核。
      uboot编译完成后,将uboot-imx/tools目录下的mkimage复制到PC的/usr/sbin目录,编译内核生成内核镜像时用到此工具。
       $ sudo cp mkimage /usr/sbin/
       a、解压内核源码

       $ tar -jxvf imx6ul.tar.bz2
17.png

b、编译内核镜像
       $ make zImage
18.png
编译的好的kernel自动复制到fsl-release-bsp/image目录下,文件名为zImage。

单步编译内核
拷贝内核制作工具mkimage、解压源码,请参考简易编译uboot 当中的介绍,以下简单介绍单步编译内核。
       a、生成配置文件
       在/fsl-release-bsp/imx6ul目录有一个EVB-P6UL的配置文件,文件名为“imx6ul_config”,此配置为出厂默认配置。执行以下命令,将默认配置设为本次编译内核的配置。

       $ cpimx6ul_config .config     //在内核源码目录(/fsl-release-bsp/imx6ul)下执行
19.png
同时,您亦可定制符合自己配置文件,执行以下命令。
       $ make xxx_defconfig            //在内核源码目录(/fsl-release-bsp/imx6ul)下执行,defconfig        标志值来至/fsl-release-bsp/imx6ul/arch/arm/configs/xxx_defconfig,在此不做介绍。
      
       b、编译内核

       $ makezImage -j4           // -j4,表示使用4线程编译zImage
20.png

编译dtb
编译dtb的方法亦有两种,简易编译和单步编译。执行简易编译前,先查看Makefile中的dtb文件与 “/fsl-release-bsp/imx6ul/arch/arm/boot/dts”目录下的文件是否同名(文件名相同,后缀不同)。
简易编译dtb
本小结按照Makefile中的规则,介绍如何编译dtb。


a、执行 make dtb
21.png

编译的好的dtb自动复制到fsl-release-bsp/image目录下,文件名为*.dtb。
说明:如果您想使用自己开发dtb ,按以下步骤实现。
       a、将dts文件复制到/fsl-release-bsp/imx6ul/arch/arm/boot/dts目录下
       b、在sdk目录(fsl-release-bsp)打开Makefile文件,在此使用vi打开
       $ viMakefile

       c、下图红线标注部分改为与dts一致的文件名
22.png
注意:Makefile中的文件名后缀为.dtb,而/fsl-release-bsp/imx6ul/arch/arm/boot/dts目录的文件为*.dts,两者要对应。图片中存放在dts目录的文件为evbp6ul-nand-res-4uarts-csi.dts

单步编译dtb
a、将目标dts文件拷贝至 /fsl-release-bsp/imx6ul/arch/arm/boot/dts目录,以evbp6ul-nand-res-4uarts-csi.dts为例。
       $ cp evbp6ul-nand-res-4uarts-csi.dts/fsl-release-bsp/imx6ul/arch/arm/boot/dts
       b、编译dtb
       $ make evbp6ul-nand-res-4uarts-csi.dtb //在内核源码目录(../fsl-release-bsp/imx6ul)下执行

完成后,在../fsl-release-bsp/imx6ul/arch/arm/boot/dts目录下生成与dts名对应的dtb文件。

制作UBFS根文件系统
使用脚本制作UBIFS根文件系统
Makefile依赖于rootfs_qt目录下./build脚本,在制作文件系统之前先进行相关配置。先单步制作烧录镜像,确认没问题之后在使用脚本。ubi工具可自行移植或使用光盘提供的。
      
       a、生成ubifs镜像
(注:此操作需安装mtd-utils工具,在光盘fsl-release-bsp\rootfs_qt下有提供fedora/ubuntu编译好的相关工具,可拷贝到PC机的linux系统下使用.也可自己编译mtd-utils生成mkfs.ubifs,具体编译过程见附录1)

$mkfs.ubifs -F -r rootfs -m 2048 -e 126976 -c 2047 -o ubifs_256.img
23.png
参数说明:
-F       特殊标志位,使第一次挂载文件系统时修整Nandflash剩余空间,以防文件系统认为ECC错误;
-r rootfs 制定镜像的源文件(rootfs);
-m 2048页面大小,由Nandflash属性决定(evbp6l使用的nangdflash为MT29F2G08,其page                      大小为2048,2KB);
-e 126976逻辑擦除块大小。MT29F2G08的block size为131072(128KB),但每个block前两个                       page分别用来存放ubi的EC Header和VID header,因此逻辑擦除块大小为:
131072-2*2048=126976;
-c 2047用于ubi的最大逻辑擦除块数量。
-o ubifs_256.img生成的镜像文件名可自定义
       b建立ubinize.cfg文件文件内容如下
[ubifs]
mode=ubi
image=ubifs_256.img           //上一步生成的根文件系统镜像
vol_id=0
vol_size=200MiB
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
(注ubifs_256.img和ubinize_256.cfg须放到同一文件夹下)
24.png
c、生成烧录镜像

$ ubinize -o rootfs_256.ubi -m 2048 -p128KiB -s 512 -O 2048 ubinize_256.cfg
25.png
参数说明:
-o root.bin生成的根文件系统烧录镜像文件(名称可自定义,但用SD卡自动烧录时u-boot默认                           文件名为root.bin
-m 2048 页面大小,由Nandflash属性决定(evb335x使用的nangdflash为K9F2G08,其页面大小             为2048B,2KB);
-p 128KiB物理擦除块大小,由Nandflash属性决定(K9F2G08每个block大小为128KB);
-s 512   sub-page大小,由Nandflash属性决定(K9F2G08每个page包含4个sub-page,每个
sub-page为512B);
-O 2048 存放VID header的起始位置,(每个block第0个page存放EC header,第1个page
存放VIDheader,每个page大小为2048B,因此VID header的起始位置为2048)。


单步制作UBIFS根文件系统
a、进入根文件系统目录
       $ cd rootfs_qt
       b、生成ubifs镜像
       $ mkfs.ubifs -F-r rootfs -m 2048 -e 126976 -c 2047 -o ubifs_256.img
       注:若使用脚本(例如,build_256)生成ubifs镜像,脚本必须具有可执行权限,或使用bash执行。
       c建立ubinize.cfg文件文件内容如下
[ubifs]
mode=ubi
image=ubifs_256.img           //上一步生成的根文件系统镜像
vol_id=0
vol_size=200MiB
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
(注ubifs_256.img和ubinize_256.cfg须放到同一文件夹下)
       c、生成烧录镜像
       $ ubinize -o rootfs_256.ubi -m 2048 -p128KiB -s 512 -O 2048 ubinize_256.cfg

制作JFFS2根文件系统
       QSPI Nor Flash的容量小,且其特性更适合使用jffs2格式的文件系统,因此采用jffs2。下面jffs2介绍jffs2根文件系统的制作方法。mkfs.jffs2工具可自行移植或使用光盘提供的。
a、解压根文件系统源文件
$ tar -jxvf rootfs_mini_qspi.tar.bz2
26.png
b、生成根文件系统镜像
$ mkfs.jffs2 -s 0x1000 -e 0x10000 -p 0x1600000 -d rootfs_mini_qspi/ -n-l -o rootfs.jffs2
27.png
执行以上指令后,在当前目录生成 rootfs.jffs2 ,至此jffs2镜像制作完毕。
mkfs.jffs2参数说明:
-s 0x1000 页大小,由Nor Flash属性决定(N25Q256A的每个pagesize为4KB,-s参数的默认值为4KB)
-e 0x10000 擦除块大小,由Nor Flash属性决定(N25Q256A的eraseblock大小为64KB)
-p 0x1600000 指定jffs2文件的大小,若目标文件大小小于指定值,则以0xFF填充。若不指定目标文件大小,则用0xFF填充所有的擦除块。
-d rootfs_mini_qspi/指定制作jffs2根文件系统的目录
-n 清除标识
-l 存储模式(字节顺序),此处为小端模式(little-endian)。若不指定存储模式,则与制作jjffs2的主机相同。
-o rootfs.jffs2 生成镜像的文件名
制作jffs2根文件系统的指令在光盘资料有对应的脚本,执行脚本能更快速地生产目标文件。同时,您可以根据自身需求更改脚本。

回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2017-12-8 15:13:34 | 显示全部楼层
欢迎关注盈鹏飞嵌入式公众号,第一时间为您推送最新产品资讯,技术文章,板卡试用活动!!
盈鹏飞二维码.jpg

回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2018-8-25 16:46
  • 签到天数: 28 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2017-12-12 00:08:36 | 显示全部楼层
    支持一下,手册里的东西好像,辛苦啦
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2017-12-13 10:43:54 | 显示全部楼层
    sjqlwy 发表于 2017-12-12 00:08
    支持一下,手册里的东西好像,辛苦啦

    谢谢支持!!!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2025-1-12 16:18 , Processed in 0.144136 second(s), 22 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.