#/*******************************************************************************
# * OK335xS-Android mkmmc-android-ubifs.sh hacking
# * 声明:
# * 通过分析该源代码,可以知道常说的自动烧写软件的工作原理
# * 参考:sfidsk创建可启动分区问题--http://segmentfault.com/a/1190000002493628
# * 2015-6-4 晴 深圳 南山平山村 曾剑锋
# ******************************************************************************/
#!/bin/bash # 如果命令行参数等于1,则告知用户如何使用该软件,第一个参数为mmc设备节点
EXPECTED_ARGS=
if [ $# == $EXPECTED_ARGS ]
then
echo "Assuming Default Locations for Prebuilt Images"
$ $ 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
exit
fi # 判断参数字符串是否为空,从这里我们可以知道参数长度为6
if [[ -z $ || -z $ || -z $ || -z $ || -z $ || -z $ ]]
then
echo "mkmmc-android-ubifs.sh Usage:"
echo " sudo ./mkmmc-android-ubifs.sh <device> <MLO> <u-boot.img> <uImage> <uEnv.txt> <ubi.img> <Optional_Media_Clips_Folder> <Optional_Start_Here_Folder> "
echo " Example: sudo ./mkmmc-android-ubifs.sh /dev/sdc MLO u-boot.img uImage uEnv.txt ubi.img Media_Clips START_HERE"
exit
fi # 检查参数传入的文件是否存在
if ! [[ -e $ ]]
then
echo "Incorrect MLO location!"
exit
fi if ! [[ -e $ ]]
then
echo "Incorrect u-boot.img location!"
exit
fi if ! [[ -e $ ]]
then
echo "Incorrect uImage location!"
exit
fi if ! [[ -e $ ]]
then
echo "Incorrect uEnv.txt location!"
exit
fi if ! [[ -e $ ]]
then
echo "Incorrect ubifs location!"
exit
fi # 提醒用户,如果继续,mmc中数据将丢失
echo "All data on "$" now will be destroyed! Continue? [y/n]"
read ans
if ! [ $ans == 'y' ]
then
exit
fi echo "[Unmounting all existing partitions on the device ]" umount $* # 卸载可能挂载的mmc设备节点 echo "[Partitioning $1...]" # 提示开始对mmc设备重新分区 # 开始擦除分区表,每次擦除1024字节,一共擦除1024次,也就是相当于擦除:
# 1024字节 * 次 = 1M 字节
DRIVE=$
dd if=/dev/zero of=$DRIVE bs= count= SIZE=`fdisk -l $DRIVE | grep Disk | awk '{print $5}'` # 获取mmc的总大小 echo DISK SIZE - $SIZE bytes # 显示mmc的总大小 # mmc为1G所以CYLINDERS=**///=,63为扇区数,255磁头数,
# 其他的参数目前没搞懂,反正这里就是计算一共有多少个CYLINDER
CYLINDERS=`echo $SIZE/// | bc` echo CYLINDERS - $CYLINDERS # 显示柱面的多少 # 这里分了4个区,目前没有完全理解这里的分区原理:
# . 第一分区:
# . 可用地址开始(不进行指定则为第一可用柱面);
# . 占用40个柱面;
# . 分区ID: 0x0C(FAT32(LBA)分区);
# . *:从man文档感觉是代表可启动分区.
# . 第二分区:
# . 可用地址开始;
# . 占用1个柱面;
# . 分区ID: 0x0C(FAT32(LBA)分区);
# . -:从man文档感觉是代表非启动分区.
# . 第三分区:
# . 可用地址开始;
# . 占用($CYLINDERS / )个柱面;
# . 分区ID: 未指定(默认貌似是Linux);
# . -:同上
# . 第四分区:
# . 可用地址开始;
# . 剩余柱面(不进行指定则指全部柱面);
# . 分区ID: 未指定(默认貌似是Linux);
# . -:同上
{
echo ,,0x0C,*
echo ,,0x0C,-
echo ,$(expr $CYLINDERS / ),,-
echo ,,,-
} | sfdisk -D -H -S -C $CYLINDERS $DRIVE echo "[Making filesystems...]" # 提示开始制作文件系统 if [[ ${DRIVE} == /dev/*mmcblk* ]]
then
DRIVE=${DRIVE}p # 获取设备节点模板
fi # 格式化各个分区
mkfs.vfat -F 32 -n boot ${DRIVE}1 &> /dev/null
mkfs.vfat -F 32 -n dummy ${DRIVE}2 &> /dev/null
mkfs.ext4 -L usrdata ${DRIVE}3 &> /dev/null
mkfs.vfat -F 32 -n data ${DRIVE}4 &> /dev/null echo "[Copying files...]" # 将各个文件拷贝进入对应的分区,结果绝大部分拷入了boot分区 @__@
mount ${DRIVE}1 /mnt
echo "[Copying boot files...]"
cp $2 /mnt/MLO
cp $3 /mnt/u-boot.img
cp $4 /mnt/uImage
cp $5 /mnt/uEnv.txt
cp $9 /mnt/boot.scr
echo "[Copying ubifs image...]"
cp $6 /mnt/ubi.img
if [ "$8" ]
then
echo "[Copying start-here folder to boot partition...]"
cp -r $8 /mnt/START_HERE
fi
echo "[syncing...]"
sync # flush file system buffers
umount ${DRIVE}1 if [ "$7" ]
then
echo "[Copying all media clips to data partition...]"
mount ${DRIVE}4 /mnt
cp -r $7/* /mnt/
umount ${DRIVE}4
fi echo "[Done]"

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

  1. AM335x Android eMMC mkmmc-android.sh hacking

    # AM335x Android eMMC mkmmc-android.sh hacking # # . 有空解读一下android的分区文件. # . 代码来源:https://github.com ...

  2. Android Mokoid Open Source Project hacking

    /***************************************************************************** * Android Mokoid Open ...

  3. OK335xS psplash make-image-header.sh hacking

    /***************************************************************************** * OK335xS psplash mak ...

  4. Android开发过程中在sh,py,mk文件中添加log信息的方法

    Android开发过程中在sh,py,mk文件中添加log信息的方法 在sh文件中: echo "this is a log info" + $info 在py文件中: print ...

  5. Android编译执行envsetup.sh,产生工具命令m、mm、mmm、mmma、tapas 、croot、cgrep、jgrep、 resgrep、godir

    一般来说编译一个sdk或者一个比较大的工程项目,第一步都是执行 envsetup.sh这个脚本,比如编译android,qt源码以及其他一些嵌入式的sdk. 而且执行的时候需要特别注意使用 sourc ...

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

    #/******************************************************************************* # * OK335xS-Androi ...

  7. I.MX6 mkuserimg.sh hacking

    /*********************************************************************** * I.MX6 mkuserimg.sh hackin ...

  8. android.mk android源码编译

    http://www.cnblogs.com/chenbin7/archive/2013/01/05/2846863.html Android.mk简单分析 2013-01-05 22:51 by . ...

  9. 〖Android〗Android源代码所有目录生成的Target(编译生成文件反查)

    => build/tools/zipalign: out/host/linux-x86/bin/zipalign (host) => build/tools/atree: out/host ...

随机推荐

  1. java日期获取前一天和后一天

    import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import j ...

  2. 百度echart如何动态生成图表

    百度echart如何动态生成图表 一.总结 一句话总结: clear hideloading setOption 主要是下面三行代码: myChart.clear(); //清空画布myChart.h ...

  3. [Java学习] 再谈Java包

    在Java中,为了组织代码的方便,可以将功能相似的类放到一个文件夹内,这个文件夹,就叫做包. 包不但可以包含类,还可以包含接口和其他的包. 目录以"\"来表示层级关系,例如 E:\ ...

  4. consensus sequence

    consensus sequence:称为一致序列.一些遗传元件(如启动子)中反复出现且很少有改变的DNA序列.不同种生物编码同一种蛋白质的基因也会有共有序列.通过序列比较发现相似但不一定完全相同的核 ...

  5. Android之封装好的异步网络请求框架

    1.简介  Android中网络请求一般使用Apache HTTP Client或者采用HttpURLConnection,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使 ...

  6. python-day53--前端js

    一.基本语法(ECMA) 单行注释 // /* 多行注释 */ 变量赋值 默认以换行符作为结束符,有分好以分号作为结束符号 JS的引入方式: 1. <script> </script ...

  7. ubuntu mysql主从库的搭建

    1,首先我们要确定一个从库一个主库,紧记从库只能读取不能有其他的操作,如果操作写那主从就失效了,那就看看我们这么搭建主从吧! 2. 环境:Ubuntu,Mysql (主从的数据库版本必须保持一致) 主 ...

  8. zzuli303(奇葩26进制转换)

    序号互换 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 Dr.Kong设计了一个聪明的机器人卡多,卡多会对电子表格中的单元格坐标快速计算出来.单元格的行坐标是由数字 ...

  9. oracle进行字符串拆分并组成数组

    CREATE OR REPLACE TYPE CUX_STR_SPLIT_TYPE IS TABLE OF VARCHAR2 (4000); CREATE OR REPLACE PACKAGE cux ...

  10. 数据库故障诊断(Troubleshooting)之性能问题导致的数据库严重故障案例之一

    好久不来这里写东西,今天有点时间,来这里写点最近遇到的事情.前段时间,某电信业务用户因某核心生产库最近多次宕机重启,多方人员介入无果后,给我发来了邮件,大概意思就是现在该问题已经造成了比较严重的后果, ...