i.MX8 Yocto 环境搭建与镜像编译

关键字 :i.MX8Yocto镜像

一 、主机( HOST )构建

           

         本次 Yocto 环境搭建基于的主机是 Ubuntu 16.04 ,基于的硬件平台是 i.MX8MQ。

         主机构建分成主机软件包(host  packages)安装和 repo 工具安装两部分。

 

  • 执行以下指令,安装主机软件包。

$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev

         注 :这里只是安装必要的主机包,需要其他主机包需另外安装。

  • 执行以下指令,安装 repo 工具。

$ mkdir ~/bin

$ cd bin

$ curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo

$ chmod a+x repo

$ export PATH=~/bin:$PATH


二、 Yocto Project BSP 环境搭建

 

  • 执行以下指令,搭建 Yocto Project BSP 环境。

$ mkdir imx-yocto-bsp

$ cd imx-yocto-bsp

$ repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-sumo -m imx-4.14.98-2.0.0_ga.xml --repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo

$ repo sync

 注 :在执行这些指令前,确保已经安装 Git 工具并且对 Git 进行配置。

        在imx-yocto-bsp 目录下主要生成了两个脚本和一个 sources 目录。

        sources 目录 —— 主要存放着下载的配方文件和各种脚本,作为 bitbake 时的原材料。

        fsl-setup-release.sh 脚本 —— 在 bitbake编译前进行配置时使用该脚本。

        setup-environment 脚本 —— 当主机重启或开启新终端时,在重新 bitbake 前需要使用该脚本进行配置,然后可以继续上一次的编译。

三、 编译镜像

 

          此次镜像编译基于的硬件平台为 i.MX8MQ ,选择的图形后端为 wayland ,支持 GUI ,不支持 QT 。

          编译镜像一般分成编译前的配置和镜像编译两部分。

           

  • 执行以下指令,进行编译前的配置。

$ DISTRO=fsl-imx-wayland MACHINE=imx8mqevk source fsl-setup-release.sh -b imx8mqevk_wayland

 注 :指定的硬件平台为 i.MX8MQ ,图形后端为 wayland 。

  • 执行以下指令,开始编译镜像。

$ bitbake fsl-image-validation-imx

    注 :编译的镜像不支持 QT 。第一次编译镜像,需要下载的文件较多,花费的时间会较长。可以通过手动拷贝已下载好的文件到 downloads 文件夹下,可省去下载时间。

           编译结束后,在 /tmp/deploy/images 目录下可以看到编译生成的文件。

四、 Linux Image 组成

 

  1. Bootloader : 包括 U-Boot 、ATF 、SCFW 、SECO 、SPL 等。在MX8MQ 中,SPL初始化 DDR 并将 U-Boot 、ATF 等从引导设备加载到内存中,然后执行ATF,之后再执行 U-Boot 。

        

  1. kernel image : 如 zImage 、Image 。

        

  1. 设备树文件(DTB): 树数据结构,描述了硬件配置(特定于 board),通过其配置,允许不同 board 使用相同的 kernel 。
     
      4. 根文件系统(Rootfs): 包含 busybox 、公共库和其他元素,定义了要使用的图形后端,文件名为 ext3 或 ext4 。

        

四、 SD card 的分区

     

  1. 准备一个 SD card 读卡器,如可通过 USB 读卡器连接到虚拟机。
      2.  使用如下命令查看系统分配给插入的 SD Card 的设备节点名。

cat /proc/partitions


  1. 使用如下命令查看 SD card 的挂载情况。

df

       4. 使用如下命令卸载 /dev/sdb1 。

umount /dev/sdb1


      5.使用如下命令进入分区工具 fdisk 。

sudo fdisk /dev/sdb


使用 fdisk 的命令完成 SD card 的分区:

         (1) 按 p + Enter 查看当前分区情况。

         (2) 按 d + Enter 删除分区。

              注:如果有多个分区,要重复删除,直到所有不必要的分区都删除干净。

         (3) 按 n + Enter 新建分区并设置分区的参数。

              设置分区模式为 primary;分区号为 1;起始 sector 为 20480;

              大小为 +1024000 个 sector,即 1024000 * 512 = 500 MB;    

              新建第二个分区,将剩余的空间都分配给它。

              分区号为 2;起始 sector 为 1228800;默认大小,即剩余的所有空间。          

         (4) 按 w + Enter 保存分区表,完成分区。

       

四、 烧录 image 到 SD card

 

       根据文档,依序烧录 bootloader、kernel 和 rootfs 的 image 到 SD card 中。   



  1. 烧录 bootloader image 。

 

      ① 使用如下命令找到 build-wayland 目录下名为 flash.bin 的bootloader image 。

cd  tmp/work/imx8mqevk-poky-linux/imx-boot/0.2-r0/git/iMX8M

       

         ② 使用如下命令烧录 bootloader 。

sudo dd if= of=/dev/sdb bs=1k seek= conv=fsync

sudo dd if=flash.bin of=/dev/sdb bs=1k seek=33 conv=fsync

         注:i.MX8MQ 对应的 seek offset 是 33 。

 

  1. 烧录 kernel image 和 dtb 。

 

         ① 使用如下命令找到 build-wayland 目录下文件名为 Image 的 kernel image 。

cd  tmp/work/imx8mqevk-poky-linux/linux-imx/4.14.98-r0/build/arch/arm64/boot/

       

         ② 使用如下命令格式化待烧录 kernel image 的分区 sdb1 。

sudo mkfs.fat  /dev/sdb1

       

         ③ 使用如下命令挂载待烧录 kernel image 的分区 sdb1 。

sudo mount  /dev/sdb1  ~/mountpoint/

       

         ④ 使用如下命令复制 kernel image 的 Image 文件到已挂载的分区 sdb1 。

sudo  cp  Image  ~/mountpoint/

         

         ⑤ 使用如下命令找到 build-wayland 目录下的设备树文件 fsl-imx8mq-evk.dtb 。

cd  tmp/work/imx8mqevk-poky-linux/linux-imx/4.14.98-r0/build/arch/arm64/boot/dts/freescale/

       

       ⑥ 使用如下命令复制 fsl-imx8mq-evk.dtb 设备树文件到已挂载的分区 sdb1 。

sudo cp  fsl-imx8mq-evk.dtb  ~/mountpoint/

       

         ⑦ 使用如下命令卸载分区 sdb1,完成烧录。

sudo  umount  ~/mountpoint/

sync

       

  1. 烧录 rootfs image 。

 

      ① 使用如下命令格式化待烧录 rootfs image 的分区 sdb2 。

sudo  mkfs.ext4 /dev/sdb2

       

      ② 使用如下命令挂载待烧录 rootfs 的分区 sdb2 。

mkdir  /home/f/mountpoint

sudo  mount /dev/sdb2  /home/f/mountpoint

     

         ③ 使用如下命令解压 Yocto 生成的rootfs 压缩包到当前目录下的 rootfs 文件夹。

tar  -xjf build/fsl-image-validation-imx-imx8mqevk-20190829100239.rootfs.tar.bz2 -C rootfs/

注:Yocto 生成的rootfs 存放在 build 目录下的 tmp/deploy/images/imx8mqevk/ 。

 

         ④ 使用如下命令复制 rootfs 的所有内容到挂载目录下。

sudo  cp -a ./*  ~/mountpoint/

       

         ⑤ 使用如下命令卸载分区 sdb2,完成烧录。

sudo  umount  ~/mountpoint/

sync

        

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论