OK335xS-Android mkmmc-android-ubifs.sh hacking

简介: 1 #/******************************************************************************* 2 # * OK335xS-Android mkmmc-android-ubifs.
  1 #/*******************************************************************************
  2 # *            OK335xS-Android mkmmc-android-ubifs.sh hacking
  3 # * 声明:
  4 # *     通过分析该源代码,可以知道常说的自动烧写软件的工作原理
  5 # *     参考:sfidsk创建可启动分区问题--http://segmentfault.com/a/1190000002493628
  6 # *                                2015-6-4 晴 深圳 南山平山村 曾剑锋
  7 # ******************************************************************************/
  8 #!/bin/bash
  9 
 10 # 如果命令行参数等于1,则告知用户如何使用该软件,第一个参数为mmc设备节点
 11 EXPECTED_ARGS=1                        
 12 if [ $# == $EXPECTED_ARGS ]
 13 then
 14         echo "Assuming Default Locations for Prebuilt Images"
 15         $0 $1 Boot_Images/MLO Boot_Images/u-boot.img Boot_Images/uImage Boot_Images/uEnv.txt Filesystem/ubi.img Media_Clips START_HERE Boot_Images/boot.scr
 16         exit
 17 fi
 18 
 19 # 判断参数字符串是否为空,从这里我们可以知道参数长度为6
 20 if [[ -z $1 || -z $2 || -z $3 || -z $4 || -z $5 || -z $6 ]]
 21 then
 22     echo "mkmmc-android-ubifs.sh Usage:"
 23     echo "    sudo ./mkmmc-android-ubifs.sh <device> <MLO> <u-boot.img> <uImage> <uEnv.txt> <ubi.img> <Optional_Media_Clips_Folder> <Optional_Start_Here_Folder> "
 24     echo "    Example: sudo ./mkmmc-android-ubifs.sh /dev/sdc MLO u-boot.img uImage uEnv.txt ubi.img Media_Clips START_HERE"
 25     exit
 26 fi
 27 
 28 # 检查参数传入的文件是否存在
 29 if ! [[ -e $2 ]]
 30 then
 31     echo "Incorrect MLO location!"
 32     exit
 33 fi
 34 
 35 if ! [[ -e $3 ]]
 36 then
 37     echo "Incorrect u-boot.img location!"
 38     exit
 39 fi
 40 
 41 if ! [[ -e $4 ]]
 42 then
 43     echo "Incorrect uImage location!"
 44     exit
 45 fi
 46 
 47 if ! [[ -e $5 ]]
 48 then
 49     echo "Incorrect uEnv.txt location!"
 50     exit
 51 fi
 52 
 53 if ! [[ -e $6 ]]
 54 then
 55     echo "Incorrect ubifs location!"
 56     exit
 57 fi
 58 
 59 # 提醒用户,如果继续,mmc中数据将丢失
 60 echo "All data on "$1" now will be destroyed! Continue? [y/n]"
 61 read ans
 62 if ! [ $ans == 'y' ]
 63 then
 64     exit
 65 fi
 66 
 67 echo "[Unmounting all existing partitions on the device ]"
 68 
 69 umount $1*                                      # 卸载可能挂载的mmc设备节点
 70 
 71 echo "[Partitioning $1...]"                     # 提示开始对mmc设备重新分区
 72 
 73 # 开始擦除分区表,每次擦除1024字节,一共擦除1024次,也就是相当于擦除:
 74 #     1024字节 * 1024 次 = 1M 字节
 75 DRIVE=$1
 76 dd if=/dev/zero of=$DRIVE bs=1024 count=1024    
 77      
 78 SIZE=`fdisk -l $DRIVE | grep Disk | awk '{print $5}'`   # 获取mmc的总大小
 79      
 80 echo DISK SIZE - $SIZE bytes                            # 显示mmc的总大小
 81  
 82 # mmc为1G所以CYLINDERS=1024*1024*1024/255/63/512=130,63为扇区数,255磁头数,
 83 # 其他的参数目前没搞懂,反正这里就是计算一共有多少个CYLINDER
 84 CYLINDERS=`echo $SIZE/255/63/512 | bc`                   
 85  
 86 echo CYLINDERS - $CYLINDERS                             # 显示柱面的多少
 87 
 88 # 这里分了4个区,目前没有完全理解这里的分区原理:
 89 #     1. 第一分区:
 90 #         1. 可用地址开始(不进行指定则为第一可用柱面);
 91 #         2. 占用40个柱面;
 92 #         3. 分区ID: 0x0C(FAT32(LBA)分区);
 93 #         4. *:从man文档感觉是代表可启动分区.
 94 #     2. 第二分区:
 95 #         1. 可用地址开始;
 96 #         2. 占用1个柱面;
 97 #         3. 分区ID: 0x0C(FAT32(LBA)分区);
 98 #         4. -:从man文档感觉是代表非启动分区.
 99 #     3. 第三分区:
100 #         1. 可用地址开始;
101 #         2. 占用($CYLINDERS / 4)个柱面;
102 #         3. 分区ID: 未指定(默认貌似是Linux);
103 #         4. -:同上
104 #     4. 第四分区:
105 #         1. 可用地址开始;
106 #         2. 剩余柱面(不进行指定则指全部柱面);
107 #         3. 分区ID: 未指定(默认貌似是Linux);
108 #         4. -:同上
109 {
110 echo ,40,0x0C,*
111 echo ,1,0x0C,-
112 echo ,$(expr $CYLINDERS / 4),,-
113 echo ,,,-
114 } | sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE
115 
116 echo "[Making filesystems...]"          # 提示开始制作文件系统
117 
118 if [[ ${DRIVE} == /dev/*mmcblk* ]]
119 then
120         DRIVE=${DRIVE}p                 # 获取设备节点模板
121 fi
122 
123 # 格式化各个分区
124 mkfs.vfat -F 32 -n boot ${DRIVE}1 &> /dev/null
125 mkfs.vfat -F 32 -n dummy ${DRIVE}2 &> /dev/null
126 mkfs.ext4 -L usrdata ${DRIVE}3 &> /dev/null
127 mkfs.vfat -F 32 -n data ${DRIVE}4 &> /dev/null
128 
129 echo "[Copying files...]"              
130 
131 # 将各个文件拷贝进入对应的分区,结果绝大部分拷入了boot分区 @__@
132 mount ${DRIVE}1 /mnt
133 echo "[Copying boot files...]"
134 cp $2 /mnt/MLO
135 cp $3 /mnt/u-boot.img
136 cp $4 /mnt/uImage
137 cp $5 /mnt/uEnv.txt
138 cp $9 /mnt/boot.scr
139 echo "[Copying ubifs image...]"
140 cp $6 /mnt/ubi.img
141 if [ "$8" ]
142 then
143         echo "[Copying start-here folder to boot partition...]"
144         cp -r $8 /mnt/START_HERE
145 fi
146 echo "[syncing...]"
147 sync                        # flush file system buffers
148 umount ${DRIVE}1
149 
150 if [ "$7" ]
151 then
152         echo "[Copying all media clips to data partition...]"
153         mount ${DRIVE}4 /mnt
154         cp -r $7/* /mnt/
155         umount ${DRIVE}4
156 fi
157 
158 echo "[Done]"

 

目录
相关文章
|
Linux SoC
I.MX6 mfgtool2-android-mx6q-sabresd-emmc.vbs hacking
/******************************************************************** *   I.MX6 mfgtool2-android-mx6q-sabresd-emmc.vbs hacking * 说明: * 以前用的mfgtool2是直接执行MfgTool2.exe就行了,现在的NXP将其封 * 装在vbs文件内,这是左栋告诉我的,这里记录一下命令行参数的本质。
1033 0
|
Android开发 Perl Shell
AM335x Android eMMC mkmmc-android.sh hacking
# AM335x Android eMMC mkmmc-android.sh hacking # # 1. 有空解读一下android的分区文件。 # 2.
1185 0
|
Unix Android开发 机器学习/深度学习
Android development tools line_endings hacking
/******************************************************************** * Android development tools line_endings hacking * 说明: * 本文主要是对android源代码中的line_endings开发工具进行了解读, * 目的是为了知道传说中的dos,unix文件之间转换的工作机制。
675 0
|
Java Android开发 Linux
I.MX6 android BatteryService jni hacking
/**************************************************************************** * I.MX6 android BatteryService jni hacking * 声明: * 本文主要是为了知道Android的获取的电源管理的数据的jni是从Linux系统的 * 什么位置获取的,获取的机制是什么。
738 0
|
Android开发
Android ashmem hacking
/********************************************************************** * Android ashmem hacking * 声明: * 最近有些东西涉及到binder,而binder又涉及到ashmem,于是先跟一下这 * 部分的内容。
795 0
|
Android开发 编解码
mokoid android open source HAL hacking in a picture
/************************************************************************** * mokoid android HAL hacking in a picture * 声明: * 之前已经对mokoid开源项目源代码进行跟踪分析,但是总感觉对其中的工作 * 机制运行理解不到位,所以索性这次采用更直观的分析方式,用图来表示她的工 * 做原理,调用机制。
880 0
|
前端开发 Android开发
Android custom View AirConditionerView hacking
package com.example.arc.view; import android.content.Context; import android.graphics.Canvas; import android.
644 0
|
定位技术 Android开发
Android GPS GPSBasics project hacking
一、参考源码:   GPS Basic Example - Android Example     http://androidexample.com/GPS_Basic__-__Android_Example/index.
642 0
|
Shell C++ Android开发
I.MX6 Manufacturing Tool V2 (MFGTool2) Emmc mksdcard-android.sh hacking
#!/bin/bash # 参考文章: # 1. Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数 # http://c.biancheng.
1065 0
|
Android开发
OK335xS-Android pack-ubi-256M.sh hacking
1 #/******************************************************************************* 2 # * OK335xS-Android pack-ubi-256M.
811 0