OK335xS-Android mkmmc-android-ubifs.sh hacking
#/*******************************************************************************
# * 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的更多相关文章
- AM335x Android eMMC mkmmc-android.sh hacking
# AM335x Android eMMC mkmmc-android.sh hacking # # . 有空解读一下android的分区文件. # . 代码来源:https://github.com ...
- Android Mokoid Open Source Project hacking
/***************************************************************************** * Android Mokoid Open ...
- OK335xS psplash make-image-header.sh hacking
/***************************************************************************** * OK335xS psplash mak ...
- Android开发过程中在sh,py,mk文件中添加log信息的方法
Android开发过程中在sh,py,mk文件中添加log信息的方法 在sh文件中: echo "this is a log info" + $info 在py文件中: print ...
- Android编译执行envsetup.sh,产生工具命令m、mm、mmm、mmma、tapas 、croot、cgrep、jgrep、 resgrep、godir
一般来说编译一个sdk或者一个比较大的工程项目,第一步都是执行 envsetup.sh这个脚本,比如编译android,qt源码以及其他一些嵌入式的sdk. 而且执行的时候需要特别注意使用 sourc ...
- OK335xS-Android pack-ubi-256M.sh hacking
#/******************************************************************************* # * OK335xS-Androi ...
- I.MX6 mkuserimg.sh hacking
/*********************************************************************** * I.MX6 mkuserimg.sh hackin ...
- android.mk android源码编译
http://www.cnblogs.com/chenbin7/archive/2013/01/05/2846863.html Android.mk简单分析 2013-01-05 22:51 by . ...
- 〖Android〗Android源代码所有目录生成的Target(编译生成文件反查)
=> build/tools/zipalign: out/host/linux-x86/bin/zipalign (host) => build/tools/atree: out/host ...
随机推荐
- java中的值传递和引用传递用法详解
值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参 数的值. 引用传递:也称为传地址.方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对 ...
- marquee 跑马灯公告
1.原始 marquee 2.自定义 marquee .tops { color: #fff; height: 23px; margin: 0 0 0 20px; min-height: 23px; ...
- python3.6 ImportWarning: can't resolve package from __spec__ or __package__, falling back on __name__ and __path__
Cython emulates Python 2-style implicit relative imports on Python 3 Cython的锅(也就是绝大多数下载安装的python)新的i ...
- CSS#Flex-box, border-size, onresize() event, Media Queries
Flexbox Pseudo-classes box-sizing: border-box HTML DOM event resize() @media Queries: 根据一些css条件,触发一 ...
- Sasha and Interesting Fact from Graph Theory CodeForces - 1109D (图论,计数,Caylay定理)
大意: 求a->b最短路长度为m的n节点树的个数, 边权全部不超过m 枚举$a$与$b$之间的边数, 再由拓展$Caylay$定理分配其余结点 拓展$Caylay$定理 $n$个有标号节点生成k ...
- hdu 6299 Balanced Sequence (括号序列,贪心)
大意: 记$f(t)$表示字符串$t$的最长括号匹配子序列, 给定n个括号序列, 求它们重排后的最大f(t). 首先可以注意到一个括号序列中已经匹配的可以直接消去, 一定不会影响最优解. 那么这样最终 ...
- 『PyTorch』第四弹_通过LeNet初识pytorch神经网络_下
『PyTorch』第四弹_通过LeNet初识pytorch神经网络_上 # Author : Hellcat # Time : 2018/2/11 import torch as t import t ...
- WebSocket教程(二)
运行环境:jdk8 tomcat8 无须其他jar包. package com.reach.socketController; import java.io.IOException; import j ...
- EBS R12使用接口表往已存在的供应商地址下创建新的地点
在供应商 "测试供应商A" 下已经有了两个地址,分别为 "地址A","地址B",现在由于某些原因,需要在地址A下面创建新的地点. 由于业务需 ...
- Python简单网页爬虫——极客学院视频自动下载
http://blog.csdn.net/supercooly/article/details/51003921