eMMC的空间一般比较大,如果直接生成一个eMMC大小的镜像,则烧写比较慢,本文使用Linux系统来对eMMC进行操作,分别写入Android各个分区,从而提高了烧写的速度。

phyCORE-i.MX6 emmc支持Android  这个文档中有写到i.mx6 emmc android镜像是通过gen_sd_flash.sh 这个脚本来制作一个完整的sdcard镜像,

gen_sd_flash.sh 脚本可以指定参数制作不同大小的sdcard镜像文件,执行./gen_sd_flash.sh 4 可以制作出4GB大小的sdcard镜像,./gen_sd_flash.sh 8 制作出8GB大小的sdcard镜像,使用这个方法制作的镜像可以刚好设配emmc设备容量,但是会导致一个问题,烧写这个镜像的时候选择从sd卡拷贝到emmc时,sd卡fat32格式下无法存放大于4GB的文件,而如果选择从tftp拷贝到emmc的话,由于镜像文件太大,可能导致传输不成功。

所以推荐使用另外一种方式来烧写emmc android镜像,先做一个带有linux系统的SD卡,设置核心板从SD卡启动,进入到linux之后执行gen_sd_flash.sh 脚本直接写入emmc的设备文件。

SD卡镜像制作

镜像地址:ftp://ftp.phytec.cn/file_exchange/images/phytec-headless-image-phyboard-mira-imx6-5.sdcard 这个镜像已经增加了gen_sd_flash.sh 执行所需的所有应用软件,

这个镜像也可以通过编译LINUX BSP包得到的,在Linux BSP 包的build/conf/local.conf 文件中增加以下软件 即可

IMAGE_INSTALL_append = " mtools util-linux dosfstools tftp-hpa coreutils"

参考 制作SD卡启动盘 / how to make bootable sd card 教程来制作SD卡。

制作SD卡后,开发板设置从SD卡启动,进入barebox 中修改环境

barebox$ nv linux.bootargs.mmcblk=mmcblk.perdev_minors=18
barebox$ saveenv

默认的Linux系统只能辨认到7个分区,传入mmcblk.perdev_minors=18 这个参数可以辨别最多到18区,而android 镜像中需要将emmc分成8个区。

修改barebox后进入Linux系统,首先需要对SD卡文件系统扩大,参考 http://www.phytec.de/documents/l-814e-3-imx6-bsp-manual/#Resize_the_ext4_Root_Filesystem

SD卡文件系统扩大后,在/home/root/目录下新建mx6q_emmc目录,进入mx6q_emmc目录下可以通过tftp传输android系统所需的镜像文件barebox.bin, zImage, oftree,system.img, 

root@phyboard-mira-imx6-5:~/mx6q_emmc# tftp 192.168.1.253
tftp> get barebox.bin
tftp> get imx6q-phytec-mira-rdk-emmc.dtb
tftp> get zImage
tftp> get system.img
tftp> q

主机tftp服务器配置参考:https://wiki.phytec.com/pages/viewpage.action?pageId=66489092#id-开发板从网络启动/bootboardfromnetwork-主机安装配置tftp服务器

然后也是通过tftp下载emmc镜像的执行脚本:gen_sd_img.sh ,这个脚本对emmc设备做了相应的修改,直接写emmc设备,而不是生成镜像文件。

DEST=/dev/mmcblk3                            #这里已经是对应操作emmc设备了

下载脚本后执行

chmod +x gen_sd_img.sh
./gen_sd_img.sh 8                           # 8GB emmc
./gen_sd_img.sh 4							# 4GB emmc

脚本执行完成后,设置从emmc启动,可以看到emmc已经写入了android系统,并且文件系统已经达到最大容量。