平台: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.
后续再整理整理问题。