OK335xS-Android mkmmc-android-ubifs.sh hacking

  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]"

 

时间: 2024-10-03 10:58:11

OK335xS-Android mkmmc-android-ubifs.sh hacking的相关文章

AM335x Android eMMC mkmmc-android.sh hacking

# AM335x Android eMMC mkmmc-android.sh hacking # # 1. 有空解读一下android的分区文件. # 2. 代码来源:https://github.com/hendersa/bbbandroid-external-ti_android_utilities/blob/master/am335x/mk-mmc/mkmmc-android.sh # # 2016-9-8 深圳 南山平山村 曾剑锋 #!/bin/bash # 如果参数只有一个,这里就会使

Android Mokoid Open Source Project hacking

/***************************************************************************** * Android Mokoid Open Source Project hacking * * 声明: * 1. 本文主要是为了了解Android HAL工作机制,从而决定分析mokoid开源项目: * 2. 源代码URL:https://code.google.com/p/mokoid/source/checkout: * 3. 本文通

OK335xS psplash make-image-header.sh hacking

/***************************************************************************** * OK335xS psplash make-image-header.sh hacking * 说明: * 移植的时候想知道移植psplash中./make-image-header.sh Screenshot.png POKY * 最后的POKY为什么要指定,觉得只要解读这份代码就能知道为什么了. * * 2016-4-18 深圳 南山

OK335xS-Android pack-ubi-256M.sh hacking

1 #/******************************************************************************* 2 # * OK335xS-Android pack-ubi-256M.sh hacking 3 # * 声明: 4 # * 1. 本文解析仅仅是为了知道pack-ubi-256M.sh自动生成ubi文件系统的原理 5 # * 2. 本文在网页上可能不好阅读,最好cp一份在其他文本编辑器中阅读 6 # * 2015-6-4 晴 深

I.MX6 mkuserimg.sh hacking

/*********************************************************************** * I.MX6 mkuserimg.sh hacking * 说明: * 上次发现Android源码使用mkuserimg.sh来打包Android文件系统,现在来 * 跟踪一下其内部的工作机制. * * 2016-6-28 深圳 南山平山村 曾剑锋 ***************************************************

[Android 泥水匠] Android基础 之一:浅谈Android架构到HelloWorld案例的剖析

1.1前言   泥瓦匠又和大家见面了,在移动平台干过原生态开发,也干过hybrid应用.可以看看相关的文章 Android UI .所以多多少少在这块还是有点了解.现在很多高级语言可以开发app程序,包括Android,到我觉得目前Java语言开发Android程序还是很火,很重要的.自然,Java的底子不可少.可以看看泥瓦匠写的不少基础 Java Basic .   我们生活在一个通讯的时代,我经历过得2.5G时代,也就是GPRS等的时代,前面还有2G(GSM等).1G,后面则大家熟悉的3G

android studio android:text=&amp;amp;quot;@string/button_send&amp;amp;quot;

问题描述 android studio android:text="@string/button_send" android studio新建button这句话不懂:android:text="@string/button_send" 请教个问题:android studio里面新建button里面有一句:android:text="@string/button_send".在string.xml里面有一句:Send 能不能这样理解:button

【Android】Android动态代理为SurfaceHolder添加Hook

本博客将会介绍动态代理在Android应用中的一种使用场景 代理模式 代理模式的作用是为其它对象提供一种代理以控制对这个对象的访问.比如用户调用了一个"吃饭"的方法,如果不依靠代理,用户可能自己拿碗饭吃就行,而如果通过代理的话,可能连碗都不需要用户自己拿,用户只需要张开嘴,代理来喂就行了,需要注意的是,这里代理除了负责拿碗和喂饭外还可以做其他的任何事情,比如说帮你把饭吹凉一些,或者担心你的体重而偷偷帮你倒掉了一半的饭,又或者是往饭里加点什么奇奇怪怪的东西,谁知道呢,这就是代理干的活.实

【Android】Android自定义带board的圆角控件

介绍 圆角控件常用于头像,按钮,图标等,用途十分广泛,而且常常配合board使用. 在IOS中,UIVIew的CALayer层已经提供了圆角和board的方法,所以圆角控件的制作非常简单,只需要类似以下简单代码即可实现: view.layer.cornerRadius = 20; view.layer.borderColor = [UIColor yellowColor].CGColor; view.layer.borderWidth = 10; view.clipsToBounds = YES