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 ...
随机推荐
- SQL Timeout超时的处理方法
第一步:修改Web.config配置文件.在数据库连接字符串中加上连接时间Connect Timeout,根据实际情况定时间. <!--连接数据库--> <connectionStr ...
- tomcat和java环境
mac tomcat http://blog.csdn.net/huyisu/article/details/38372663 mac jdk 1.8 http://wlb.wlb.blog.163. ...
- js如何创建JSON对象
js如何创建JSON对象 一.总结 一句话总结:直接创建js数组和js对象即可,然后JSON.stringify就可以获取json字符串,js中的一切都是对象,而且js中的对象都是json对象 js ...
- 微信小程序------MD5加密(支持中文和不支持中文)和网络请求(get和post)
开发中常常遇到MD5加密,最近做小程序也用到了,简单总结了一下: 这要有两个加密文件,一个不支持中文,一个支持,所以你选择支持的来用就行了: 也随便说说小程序的get和post网络请求. 来看看效果图 ...
- UVA-1220 Party at Hali-Bula (树的最大独立集)
题目大意:数的最大独立集问题.特殊在要求回答答案是否唯一. 题目分析:定义状态dp(i,1),dp(i,0)分别表示以i为根节点的子树选不选i最多可选的人数,f(i,1),f(i,0)分别表示以i为根 ...
- python 小练习 11
桌子上有一堆数量不超过20的果子,每个果子的重量都是不超过20的正整数,全部记录在列表 L 里面.小明和小红决定平分它们,但是由于他们都太自私,没有人愿意对方比自己分得的总重量更多.而果子又不能切开, ...
- JQuery $未定义
---恢复内容开始--- JQuery $未定义 转载▼ jquery是Yii集成的,利用jquery写的代码$(document).ready(function(){// 操作列表$('.ope ...
- mysql日常运维
一.Linux内核和发行版本 uname -a cat /etc/issue 二.glibc的版本 /lib/libc.so.6 ---没有man函数据的动态链接库 三.MySQL的版 ...
- CSS中的长度单位及颜色表示
CSS中的长度单位及颜色表示 长度单位: px:像素,绝对单位 em:相对单位,如果用于font-size属性本身,则是相对于父元素的font-size.若用于其他属性(width,height ...
- SQL Server 调优系列玩转篇二(如何利用汇聚联合提示(Hint)引导语句运行)
前言 上一篇我们分析了查询Hint的用法,作为调优系列的最后一个玩转模块的第一篇.有兴趣的可以点击查看:SQL Server调优系列玩转篇(如何利用查询提示(Hint)引导语句运行) 本篇继续玩转模块 ...