I.mx6烧录流程

时间:2022-12-04 09:21:18


平台:mx6q-sabresd

BSP版本:android-6.0.1_r22

Mfgtool版本:android_m6.0.1_2.1.0_tool.tar

mfgtools操作流程

编译并下载流程其实在文档Android_Quick_Start_Guide.pdf中都有讲解,这里根据自己理解了解了一下mfgtool运行流程。

1.      将BSP编译好的镜像文件放入mfgtools\Profiles\Linux\OS Firmware\files\android目录下

 

2.      将板子上SW6 (boot) 拨到 00001100 (from 1-8 bit) 下载模式。

3.      给板子上电连接USB线到OTG上,连接PC和开发板,同时连接上UART。

Tip:简单说明下mfgtool下cfg.ini文件

(1)      芯片的操作系统平台

(2)      板子的类型

(3)      烧录方式(SD/eMMC等)

(4)      变量

此文件由于没有相关说明配置,网上也无法找到,但是在其目录下有很多.vbs文件,这些文件的作用就是配置好fmg.ini文件的,无需我们手动配置。

常见的烧录方式有两种,如下:

(1)      SD卡烧录,我们根据自己板子的型号找到对应文件.vbs文件并双击打开,如我使用的就是mfgtool2-android-mx6qp-sabresd-sd.vbs,文件。

(2)      eMMC烧录,找到mfgtool2-android-mx6q-sabresd-emmc.vbs并打开。

如下图:

 

4.      ucl2.xml代码分析

点击start后工具会根据cfg.ini文件中的配置进入ucl2.xml中,其路径是mfgtools\Profiles\Linux\OSFirmware,根据cfg.ini中的LIST name,假设我们烧录eMMC(<LIST name=eMMC-Android),则代码将定位到下图:

<CMDstate="BootStrap" type="boot" body="BootStrap"file ="firmware/u-boot-imx6q%plus%%board%_sd.imx"ifdev="MX6Q">Loading U-boot</CMD>

 以下是对其中内容详细的说明:

state="BootStrap"指明其为启动,对比参照下面程序烧写时的state="Updater"

type="boot"type="load",加载或启动,对比参照下面程序烧写时的 type="push" 

file指明要操作的文件, address指明了加载的地址。  

下面介绍一下几个重要的地方:

 (1)<CMD state="Updater" type="push"body="$ sh mksdcard-android%data_type%.sh /dev/mmcblk%mmc%">Partitioning...</CMD>

此命令的意思是对/dev/mmcblk进行分区,用的是mfgtools\Profiles\Linux\OSFirmware目录下的mksdcard-android.sh脚本。

BOOT   : ${boot_rom_sizeb}MB                     kernel + ramdisk

RECOVERY:${RECOVERY_ROM_SIZE}MB       recovery

SYSTEM :${SYSTEM_ROM_SIZE}MB                 filesystem

CACHE  : ${CACHE_SIZE}MB                                      cache

DATA   : ${data_size}MB                                   data

MISC   : ${MISC_SIZE}MB                                 ?

DEVICE : ${DEVICE_SIZE}MB                              ?

DATAFOOTER :${DATAFOOTER_SIZE}MB       

查阅Android_User’s_Guide.pdf中关于分区说明如下:

根据以上信息得知有这么多个分区,每个分区的意思如上,kernel在boot里。

(2)<CMD state="Updater" type="push"body="$ dd if=$FILE of=/dev/mmcblk%mmc%boot0 bs=512 seek=2">writeU-Boot to sd card</CMD>

上述命令是烧录android目录下的u-boot-imx6q.imx。

(3)<CMD state="Updater"type="push" body="$ dd if=$FILEof=/dev/mmcblk%mmc%p1">write boot.img</CMD>

上述命令是烧录android目录下的boot-imx6q.img。

(4)<CMD state="Updater"type="push" body="send"file="files/android/%folder%/system.img" >Sendingsystem.img</CMD>

烧录文件系统system.img。

(5)<CMD state="Updater" type="push" body="$mkfs.ext4  -E nodiscard /dev/mmcblk%mmc%p5">Formattingsystem partition</CMD>

上述代码表明将eMMC快速格式化成ext4文件系统。

         当我们看到log中出现echoUpdate Complete!,表示已经全部烧录好了。

升级完成之后,改变拨码开关位置如下:

Change "Boot Switch(SW6)" to 11100110 (from 1 bit to 8 bit) toswitch the board back to eMMC 4-bit boot mode.

Change "Boot Switch(SW6)" to 11010110 (from 1 bit to 8 bit) toswitch the board back to eMMC 8-bit boot mode.

Change "BootSwitch(SW6)" to 01000010 (from 1-8 bit) to switch the board back to SD Card boot mode.

dd命令操作流程

         其实当我们kernel能启动的时候,完全没有必要使用mfgtools进行烧录,这样既麻烦又费时间,其实一条简单的dd命令就能解决。

        我们先将要升级的img镜像拷贝到存储设备中了,并接到板子上,板子成功读取文件并生成文件节点,在下载之前要确保要使用的MMC/SD/TF卡已经分区。创建分区可以MFGTool,也可以用预生成目录的格式工具。具体分区步骤在文档Android_User_Guide.pdf中的4.1.1中有详细介绍。

所有的分区Linux计算机都可以识别,将所有的images下载到卡中,用以下命令:

下载u-boot image:

sudo dd if=u-boot.bin of=/dev/sdxbs=1K skip=1 seek=1; sync

如果用no padding uboot image(根据文档,主要用于sd卡启动的)的话也可以是:

sudo dd if=u-boot-no-padding.binof=/dev/sdx bs=1K seek=1; sync

下载boot image:

sudo dd if=boot.img of=/dev/sdx1;sync

下载android system rootimage:

sudo dd if=system.img of=/dev/sdx5;sync

下载android recovery image:

sudo dd if=recovery.imgof=/dev/sdx2; sync

将所有的image 下载到卡中,下一步就是启动开发板。

需要实际操作,做练习,多感受。

 

 

 

 

 

 

 

 

 

疑问:

1.

用df命令看分区信息,不是很明白/storage和下面几个是怎么分出来的。

2.怎么单独用dd命令烧录uImage.

后续再整理整理问题。