嵌入式Linux操作系统启动模式及系统固化分析

561 阅读5分钟

1 NXP 操作系统启动模式

  • IM.MX6U 支持多种启动方式以及启动设备,比如可以从 SD/EMMC、NAND Flash、QSPI Flash等启动。用户可以根据实际情况,选择合适的启动设备。
  • BOOT 的处理过程是发生在 I.MX6U 芯片上电以后,芯片会根据 BOOT_MODE[1:0]的设置来选择 BOOT 方式。 image.png
  • 当 BOOT_MODE1 为 0,BOOT_MODE0 为 1 的时候此模式使能,串行下载通过 USB 或者UART 将代码下载到板子上的外置存储设备中,我们可以使用 OTG1这个USB口向开发板上的 SD/EMMC、NAND 等存储设备下载代码。我们需要将 BOOT_MODE1 拨到“OFF”,将 BOOT_MODE0 拨到“ON”。这个下载是需要用到 NXP 提供的一个软件,一般用来最终量产的时候将代码烧写到外置存储设备中。

image.png

  • 所有的 I.MX6U 开发板都是通过 GPIO来配置启动设备的。正如启动模式由BOOT_MODE[1:0]来选择一样,启动设备是通过BOOT_CFG1[7:0]、BOOT_CFG2[7:0]和 BOOT_CFG4[7:0]这 24 个配置 IO,这 24 个配置 IO 刚好对应着 LCD 的 24 根数据线 LCD_DATA0~LCDDATA23,当启动完成以后这 24 个 IO 就可以作为 LCD 的数据线使用。这 24 根线和 BOOT_MODE1、BOOT_MODE0 共同组成了 I.MX6U的启动选择引脚,如图 9.3.1 所示: image.png
  • BOOT_CFG1[7:0]和 BOOT_CFG2[7:0]这 16 个 IO 还能减少,只剥离主要模式。如下图所示: image.png image.png

2 NXP 系统固化

  • 固化系统方式
  • 第一种方式(NXP 官方提供的方法)是使用NXP官方的上位机工具 mfgtool。这种固化系统方式可以使用 PC 机在线直接固化系统。
  • 第二种方法需要制作 TF 卡系统卡,插卡的方式固化系统。

2.1 使用 NXP mfgtool上位机固化系统

image.png

  • 目前主流核心板类型只有两种,一种是 eMMC(8GB)核心板类型,DDR 大小为 512MB。另一种是 NandFlash(512MB),DDR 大小为 256MB。vbs 脚本解释如下: image.png
  • 固化系统到 TF image.png image.png
  • 测试从 SD 卡启动系统,拨码开关拨至 SD 卡启动方式 10000010,启动系统即可
  • 固化系统到 eMMC
  • 注:固化时不要插入 SD 卡
  • 用户核心板类型带 eMMC 存储介质。如果eMMC 核心板 ddr 大小是512MB。请双击 Mfgtool2-eMMC-ddr512-eMMC.vbs 这个 vbs 脚本文件进行固化。固化完成后,将拨码开关拨至 eMMC 启动方式 10100110,启动系统即可
  • 固化系统到 NAND FLASH
  • 注:固化时不要插入 SD 卡
  • 用户核心板类型带 NAND FLASH 存储介质。如果 NAND FLASH 核心板是ddr大小是 256MB。请双击 Mfgtool2-NAND-ddr256-NAND.vbs 这个 vbs 脚本文件进行固化。固化完成后,将拨码开关拨至 NAND 启动方式 10001001,启动系统即可

2.2 使用脚本固化系统

  • 脚本固化系统一般可用于批量固化与升级系统,不像 mfgtool 上位机那样还需要 PC 机和USB T 字口数据线,且每次只能打开一个 mfgtool 上位机,用户可以自行修改好固化系统脚本,进行自动化固化测试,那么可以无需专业人员参与,即可批量固化系统 image.png

  • 使用脚本固化系统到 TF

  • 使用 chmod 指令修改固化 TF 卡系统脚本 imx6mksdboot.sh 的权限

    chmod +x imx6mksdboot.sh

image.png

  • 输入如下指令查看 SD 卡挂载节点,如下图,编者的 SD 卡容量是 14.9GB(16GB),可以看到挂载的节点为/dev/sdb。
   sudo fdisk -l

image.png image.png

  • 在固化的过程中,会卸载 TF 卡,在脚本执行时,鼠标不要离开 Ubuntu 虚拟机,否则可能在脚本卸载 TF 卡时,TF 卡连接到 PC 主机上去了,这样脚本就无法找到 TF 卡执行,就会提示“mount: special device /dev/sdb1 does not exist”这样的错误。固化时有中英文结合提示固化的过程,固化完成如下图: image.png

  • 烧写完成后,打开ubuntu系统,会看到SD卡出现boot,rootfs两个文件夹,一个存放镜像和设备树,一个存放根文件系统。 image.png image.png

  • 按连接 TF 卡到 Ubuntu 的方法,再点击断开即可退出 TF 卡。固化完成后,将拨码开关拨至 TF 启动方式 10000010,启动系统即可

  • 使用脚本固化系统到eMMC

  • MFG_TOOL出厂固件烧录工具->mfgtool->Profiles->Linux->OS Firmware->files文件夹到制作好的TF系统启动卡里面的/home/root目录,如图示是files目录内容: image.png

  • 原SD卡内部rootfs文件夹是没有files烧录固件相关内容的,需要拷贝到SD内rootfs文件夹/home/root,操作过程在ubuntu烧录系统内进行。 image.png image.png

  • 将拨码开关拨至 TF 启动方式 10000010,启动系统,通过CRT 交互方式进入IMX6UL启动系统上,输入烧录命令: image.png

  • 修改 eMMC 固化脚本的权限

chmod +x imx6mkemmcboot.sh
  • 使用 fdisk 指令查看 eMMC 挂载节点,一般挂载节点为/dev/mmcblk1,测试的 eMMC 为 8GB存储容量的。可以看到下图/dev/mmcblk1 就是 eMMC 的挂载节点。
fdisk -l

image.png

  • 开始固化 image.png image.png

  • 固化完成后,将拨码开关拨至 eMMC 启动方式 10100110,启动系统即可

  • 使用脚本固化系统到NAND FLASH

  • MFG_TOOL出厂固件烧录工具->mfgtool->Profiles->Linux->OS Firmware->files文件夹到制作好的TF系统启动卡里面的/home/root目录

  • 使用 cat 指令查看 MTD 分区表,打印结果如下图表示存在 Nand Flash

cat /proc/mtd

image.png

  • 赋予 NandFlash 固化脚本的可执行权限 image.png
  • 固化系统完成如下图 image.png
  • 固化完成后,将拨码开关拨至 Nand Flash 启动方式 10001001,启动系统即可