解析freescale的MfgTool中的脚本,了解imx6, android系统的分区情况。

配置文件

  1. cfg.ini

  1. [profiles]
  2. chip = MX6DL Linux Update
  3. # 指定平台名称
  4. [platform]
  5. board = SabreSD
  6. # 根据name名称指定ucl2.xml中运行的命令
  7. [LIST]
  8. name = Android-SPI_NOR-EMMC

  2. UICfg.ini

  用于配置同时烧写的主板个数,MfgTool的说明文档中指出,支持同时烧写多个主板。

  1. [UICfg]
  2. PortMgrDlg=1

emmc分区

  android分区脚本mksdcard-android.sh

  1. #!/bin/bash
  2. # 运行 sh mksdcard-android.sh /dev/mmcblk0
  3. # partition size in MB
  4. BOOTLOAD_RESERVE=8 # bootloader
  5. BOOT_ROM_SIZE=8
  6. SYSTEM_ROM_SIZE=512 # system.img
  7. CACHE_SIZE=512 # cache
  8. RECOVERY_ROM_SIZE=8 # recovery
  9. VENDER_SIZE=8 # vendor
  10. MISC_SIZE=8
  11. #显示帮助信息
  12. help() {
  13. bn=`basename $0`
  14. cat << EOF
  15. usage $bn <option> device_node
  16. options:
  17. -h displays this help message
  18. -s only get partition size
  19. -np not partition.
  20. -f flash android image.
  21. EOF
  22. }
  23. # check the if root?
  24. userid=`id -u`
  25. if [ $userid -ne "0" ]; then
  26. echo "you're not root?"
  27. exit
  28. fi
  29. # parse command line
  30. moreoptions=1
  31. node="na"
  32. cal_only=0
  33. flash_images=0
  34. not_partition=0
  35. not_format_fs=0
  36. while [ "$moreoptions" = 1 -a $# -gt 0 ]; do
  37. case $1 in
  38. -h) help; exit ;;
  39. -s) cal_only=1 ;;
  40. -f) flash_images=1 ;;
  41. -np) not_partition=1 ;;
  42. -nf) not_format_fs=1 ;;
  43. *) moreoptions=0; node=$1 ;;
  44. esac
  45. [ "$moreoptions" = 0 ] && [ $# -gt 1 ] && help && exit
  46. [ "$moreoptions" = 1 ] && shift
  47. done
  48. if [ ! -e ${node} ]; then
  49. help
  50. exit
  51. fi
  52. # node /dev/mmcblk0
  53. # call sfdisk to create partition table
  54. # get total card size
  55. seprate=40
  56. # 查看分区大小,字节数
  57. total_size=`sfdisk -s ${node}`
  58. # 将字节转为M
  59. total_size=`expr ${total_size} / 1024`
  60. boot_rom_sizeb=`expr ${BOOT_ROM_SIZE} + ${BOOTLOAD_RESERVE}` # 16M
  61. extend_size=`expr ${SYSTEM_ROM_SIZE} + ${CACHE_SIZE} + ${VENDER_SIZE} + ${MISC_SIZE} + ${seprate}`
  62. data_size=`expr ${total_size} - ${boot_rom_sizeb} - ${RECOVERY_ROM_SIZE} - ${extend_size} + ${seprate}`
  63. # 这一部分只是显示计算的大小
  64. # create partitions
  65. if [ "${cal_only}" -eq "1" ]; then
  66. cat << EOF
  67. BOOT : ${boot_rom_sizeb}MB
  68. RECOVERY: ${RECOVERY_ROM_SIZE}MB
  69. SYSTEM : ${SYSTEM_ROM_SIZE}MB
  70. CACHE : ${CACHE_SIZE}MB
  71. DATA : ${data_size}MB
  72. MISC : ${MISC_SIZE}MB
  73. EOF
  74. exit
  75. fi
  76. # 删除分区表
  77. # destroy the partition table
  78. dd if=/dev/zero of=${node} bs=1024 count=1
  79. # 创建分区
  80. # sfdisk 命令 man 文档中有记录。
  81. # Id is given in hex, without the 0x prefix, or is [E|S|L|X],
  82. # where L (LINUX_NATIVE (83)) is the default, S is LINUX_SWAP (82),
  83. # E is EXTENDED_PARTITION (5), and X is LINUX_EXTENDED (85).
  84. # 指定分区大小,以及分区的类型,83,LINUX_NATIVE,5:扩展分区
  85. # 查案每种文件系统类型,可以通过命令 sfdisk -T 查看
  86. sfdisk --force -uM ${node} << EOF
  87. ,${boot_rom_sizeb},83 # boot_rom_sizeb
  88. ,${RECOVERY_ROM_SIZE},83
  89. ,${extend_size},5
  90. ,${data_size},83
  91. ,${SYSTEM_ROM_SIZE},83
  92. ,${CACHE_SIZE},83
  93. ,${VENDER_SIZE},83
  94. ,${MISC_SIZE},83
  95. EOF
  96. # adjust the partition reserve for bootloader.
  97. # if you don't put the uboot on same device, you can remove the BOOTLOADER_ERSERVE
  98. # to have 8M space.
  99. # the minimal sylinder for some card is 4M, maybe some was 8M
  100. # just 8M for some big eMMC 's sylinder
  101. # 将/dev/mmcblk0分区之后的第一个分区进行调整
  102. sfdisk --force -uM ${node} -N1 << EOF
  103. ${BOOTLOAD_RESERVE},${BOOT_ROM_SIZE},83
  104. EOF
  105. # For MFGTool Notes:
  106. # MFGTool use mksdcard-android.tar store this script
  107. # if you want change it.
  108. # do following:
  109. # tar xf mksdcard-android.sh.tar
  110. # vi mksdcard-android.sh
  111. # [ edit want you want to change ]
  112. # rm mksdcard-android.sh.tar; tar cf mksdcard-android.sh.tar mksdcard-android.sh

烧写镜像

  烧写的过程就记录在ucl2.xml中,根据cfg.ini中指定的LIST的name值选择运行的命令,将系统镜像烧写到emmc的分区中。

  1. <!--
  2. * Copyright (C) 2010-2013, Freescale Semiconductor, Inc. All Rights Reserved.
  3. * The CFG element contains a list of recognized usb devices.
  4. * DEV elements provide a name, class, vid and pid for each device.
  5. *
  6. * Each LIST element contains a list of update instructions.
  7. * "Install" - Erase media and install firmware.
  8. * "Update" - Update firmware only.
  9. *
  10. * Each CMD element contains one update instruction of attribute type.
  11. * "pull" - Does UtpRead(body, file) transaction.
  12. * "push" - Does UtpWrite(body, file) transaction.
  13. * "drop" - Does UtpCommand(body) then waits for device to disconnect.
  14. * "boot" - Finds configured device, forces it to "body" device and downloads "file".
  15. * "find" - Waits for "timeout" seconds for the "body" device to connect.
  16. * "show" - Parse and show device info in "file".
  17. -->
  18. <UCL>
  19. <CFG>
  20. <STATE name="BootStrap" dev="MX6D" vid="15A2" pid="0061"/>
  21. <STATE name="Updater" dev="MSC" vid="066F" pid="37FF"/>
  22. </CFG>
  23. <!--
  24. The following Lists are for i.MX6Solo/DualLite chips
  25. -->
  26. <LIST name="MYZR-I.MX6-SPI_NOR & eMMC" desc="Choose SPI-NOR/eMMC as media">
  27. ......
  28. </LIST>
  29. <LIST name="MYZR-I.MX6-SPI_NOR & SD card" desc="Choose SPI-NOR/SD as media">
  30. ......
  31. </LIST>
  32. <LIST name="MYZR-I.MX6-UBUNTU-SPI_NOR & eMMC" desc="Choose eMMC as media">
  33. ......
  34. </LIST>
  35. <LIST name="Android-SPI_NOR-eMMC" desc="Choose SPI-NOR and SD Rootfs as media">
  36. <!-- 按照官方文档说明更改的uboot,用于MfgTool烧写程序的时候使用 -->
  37. <CMD state="BootStrap" type="boot" body="BootStrap" file ="myzr_u-boot.bin" >Loading U-boot</CMD>
  38. <CMD state="BootStrap" type="load" file="uImage" address="0x10800000"
  39. loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" >Loading Kernel.</CMD>
  40. <CMD state="BootStrap" type="load" file="initramfs.cpio.gz.uboot" address="0x10C00000"
  41. loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" >Loading Initramfs.</CMD>
  42. <CMD state="BootStrap" type="jump" > Jumping to OS image. </CMD>
  43. <!--
  44. Please use "cat /proc/mtd" to check the right partitions for NAND
  45. ,mtd0 and mtd1 are for SPI-NOR; mtd2 - mtd6 are for NAND
  46. -->
  47. <!-- <CMD state="Updater" type="push" body="mknod class/mtd,mtd0,/dev/mtd0"/>
  48. <CMD state="Updater" type="push" body="mknod block,mtdblock0,/dev/mtdblock0,block"/> -->
  49. <!----
  50. <CMD state="Updater" type="push" body="$ flash_erase /dev/mtd0 0 0">Erasing Boot partition</CMD>
  51. <CMD state="Updater" type="push" body="send" file="files/android/u-boot.bin">Sending U-Boot</CMD>
  52. <!-- 将u-boot.bin写到/dev/mtd0,每次读写的大小是512-->
  53. <CMD state="Updater" type="push" body="$ dd if=$FILE of=/dev/mtd0 bs=512">write U-Boot to SPI-NOR</CMD>
  54. --->
  55. <CMD state="Updater" type="push" body="send" file="mksdcard-android.sh.tar">Sending partition shell</CMD>
  56. <CMD state="Updater" type="push" body="$ tar xf $FILE "> Partitioning...</CMD>
  57. <CMD state="Updater" type="push" body="$ sh mksdcard-android.sh /dev/mmcblk0"> Partitioning...</CMD>
  58. <!-- 使用脚本将/dev/mmcblk0进行分区-->
  59. <CMD state="Updater" type="push" body="$ ls -l /dev/mmc* ">Formatting sd partition</CMD>
  60. <!-- burn the uboot: -->
  61. <CMD state="Updater" type="push" body="send" file="files/android/u-boot.bin">Sending U-Boot</CMD>
  62. <!-- 将/dev/mmcblk0清0,每次操作512字节,操作次数200次,操作位置,从偏移2block的地方开始输出-->
  63. <CMD state="Updater" type="push" body="$ dd if=/dev/zero of=/dev/mmcblk0 bs=512 seek=2 count=2000">Clean U-Bootenvironment</CMD>
  64. <!-- 将u-boot.bin写道/dev/mmcblk0,每次写512字节,从uboot偏移地址是2 block的地方开始读取,从/dev/mmcblk0偏移2block的地方开始输出 -->
  65. <CMD state="Updater" type="push" body="$ dd if=$FILE of=/dev/mmcblk0 bs=512 seek=2 skip=2">write U-Boot to sdcard</CMD>
  66. <!-- burn the uImage: -->
  67. <CMD state="Updater" type="push" body="send" file="files/android/boot.img">Sending kernel uImage</CMD>
  68. <!-- 将boot.img写入到/dev/mmcblk0p1 -->
  69. <CMD state="Updater" type="push" body="$ dd if=$FILE of=/dev/mmcblk0p1">write boot.img</CMD>
  70. <CMD state="Updater" type="push" body="frf">flush the memory.</CMD>
  71. <!-- 将/dev/mmcblk0p4格式化位ext4文件系统,并指定卷标名称为data-->
  72. <CMD state="Updater" type="push" body="$ mkfs.ext4 -L data /dev/mmcblk0p4">Formatting sd partition</CMD>
  73. <!-- 将/dev/mmcblk0p5格式化位ext4文件系统,并指定卷标名称为system-->
  74. <CMD state="Updater" type="push" body="$ mkfs.ext4 -L system /dev/mmcblk0p5">Formatting system partition</CMD>
  75. <!-- 将/dev/mmcblk0p6格式化位ext4文件系统,并指定卷标名称为cache-->
  76. <CMD state="Updater" type="push" body="$ mkfs.ext4 -L cache -O^extent /dev/mmcblk0p6">Formatting cache partition</CMD>
  77. <!-- 将/dev/mmcblk0p7格式化位ext4文件系统,并指定卷标名称为vender-->
  78. <CMD state="Updater" type="push" body="$ mkfs.ext4 -L vender /dev/mmcblk0p7">Formatting data partition</CMD>
  79. <CMD state="Updater" type="push" body="frf">flush the memory.</CMD>
  80. <CMD state="Updater" type="push" body="$ mkfs.ext4 /dev/mmcblk0p8">Formatting misc partition</CMD>
  81. <!-- 将system.img些到/dev/mmcblk0p5中,由于文件比较大,所以是通过读取管道再写入-->
  82. <CMD state="Updater" type="push" body="pipe dd of=/dev/mmcblk0p5 bs=512" file="files/android/system.img">Sending and writting system.img</CMD>
  83. <CMD state="Updater" type="push" body="frf">flush the memory.</CMD>
  84. <!-- Write userdata.img is optional, for some customer this is needed, but it's optional. -->
  85. <!-- Also, userdata.img will have android unit test, you can use this to do some auto test. -->
  86. <!-- <CMD state="Updater" type="push" onError="ignore" body="pipe dd of=/dev/mmcblk0p7" file="file/android/userdate.img"> Sending userdata.img(optional) </CMD>
  87. <CMD state="Updater" type="push" body="frf">flush the memory.</CMD> -->
  88. <CMD state="Updater" type="push" body="pipe dd of=/dev/mmcblk0p2 bs=512" file="files/android/recovery.img">Sending and writting recovery.img</CMD>
  89. <CMD state="Updater" type="push" body="frf">Finishing rootfs write</CMD>
  90. <CMD state="Updater" type="push" body="$ echo Update Complete!">Done</CMD>
  91. </LIST>
  92. </UCL>

Author

Tony Liu

2016-8-2, Shenzhen

imx6 MfgTool分析的更多相关文章

  1. imx6 fec分析

    /***************************************************************************** * imx6 fec分析 * 本文主要分析 ...

  2. imx6 framebuffer 分析

    分析imx6 framebuffer设备和驱动的注册过程. Tony Liu, 2016-8-31, Shenzhen 相关文件: arch/arm/mach-mx6/board-mx6q_sabre ...

  3. imx6 spi分析

    /************************************************************************** *本文主要跟踪imx6 spi设备和驱动的注册过 ...

  4. imx6 i2c分析

    本文主要分析: 1. i2c设备注册 2. i2c驱动注册 3. 上层调用过程参考: http://www.cnblogs.com/helloworldtoyou/p/5126618.html 1. ...

  5. imx6 uart分析

    本文主要记录: 1.uart设备注册 2.uart驱动注册 3.上层应用调用有些地方理解的还不是很透彻,希望指正. 1.uart设备注册过程 MACHINE_START(MX6Q_SABRESD, & ...

  6. imx6 gpio分析

    本文主要介绍如何配置IOMUX寄存器,设置IO复用寄存器,配置为GPIO功能.参考: http://www.jianshu.com/p/3c2053508342 http://www.embest-t ...

  7. imx6 MFG TOOL 分析

    之前分析过mfgtool的内容,最近从官网下载,返现新版的mfgtool工具将imx6各种版本的linux/android都使用一个工具进行烧录.所以从新分析一下. 新版与旧版的一个区别是烧写使用的u ...

  8. [IMX6]Android6.0移植和分析

    0. 知识点 中断(设备树) [IMX6]设备树分析--dts 1. 编译 Android6.0内核移植(1):分析编译日志 Android6.0内核移植(2):kernel编译内核 单独烧录kern ...

  9. imx6 uboot启动流程分析

    参考http://blog.csdn.net/skyflying2012/article/details/25804209 这里以imx6平台为例,分析uboot启动流程对于任何程序,入口函数是在链接 ...

随机推荐

  1. Python 3 解析 html

    资料:https://docs.python.org/3/library/html.parser.html python 自带了一个类,叫 HTMLParser. 我们用的时候需要自己定义一个类,继承 ...

  2. Android—构建安全的Androidclient请求,避免非法请求

            今天通过实例来介绍一下怎样构建安全的Android客户端请求.避免非法请求:         server端代码:         代码1-工具类: package com.ghj.p ...

  3. [MSP430]入门之中的一个 总体认识

    这是由TI公司推出的一款比較单片机, 相对stm32来说简单些, 由于它是16位的,  所以我们在学习中可能也会像51一样,  直接操纵寄存器. TI设计这款单片机的初衷是, 让它用于低功耗的嵌入式设 ...

  4. cpu_test

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  5. 17、Cocos2dx 3.0游戏开发找小三之内置的经常使用层:三剑客LayerColor、LayerGradient、Menu

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30477587 为了方便游戏开发人员.Cocos2d- ...

  6. Android 应用开发实例之情景模式

    2013-07-01 Android 应用开发实例 1. 情景模式 使用TabHost来实现主界面的布局. 设置一组RadioButton来切换不同的情景模式. 对比普通情景模式,定时情景模式需要加上 ...

  7. Android画图之抗锯齿

    在画图的时候,图片如果旋转或缩放之后,总是会出现那些华丽的锯齿.其实Android自带了解决方式.    方法一:给Paint加上抗锯齿标志.然后将Paint对象作为参数传给canvas的绘制方法. ...

  8. DotNet Core 2.0使用MySql实现Code First

    本教程使用vs2017 + dotnet core2.0 + MySql5.7.19 1.打开vs2017,文件>新建>项目,选择Asp.Net Core Web应用程序. 2.项目名称可 ...

  9. 利用optparse模块解析指令的字符串

    optparse模块主要用来为脚本传递命令参数,采用预先定义好的选项来解析命令行参数. 使用方法: 生成OptionParser对象,为对象添加option,用parse_args方法解析文字 具体实 ...

  10. map集合的循环示例

    /** * 报警状态下拉列表信息 * @return * @throws Exception */ public String alarmStatusList() throws Exception { ...