博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OK335xS-Android mkmmc-android-ubifs.sh hacking
阅读量:6910 次
发布时间:2019-06-27

本文共 4095 字,大约阅读时间需要 13 分钟。

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  
" 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 $DRIVE115 116 echo "[Making filesystems...]" # 提示开始制作文件系统117 118 if [[ ${DRIVE} == /dev/*mmcblk* ]]119 then120 DRIVE=${DRIVE}p # 获取设备节点模板121 fi122 123 # 格式化各个分区124 mkfs.vfat -F 32 -n boot ${DRIVE}1 &> /dev/null125 mkfs.vfat -F 32 -n dummy ${DRIVE}2 &> /dev/null126 mkfs.ext4 -L usrdata ${DRIVE}3 &> /dev/null127 mkfs.vfat -F 32 -n data ${DRIVE}4 &> /dev/null128 129 echo "[Copying files...]" 130 131 # 将各个文件拷贝进入对应的分区,结果绝大部分拷入了boot分区 @__@132 mount ${DRIVE}1 /mnt133 echo "[Copying boot files...]"134 cp $2 /mnt/MLO135 cp $3 /mnt/u-boot.img136 cp $4 /mnt/uImage137 cp $5 /mnt/uEnv.txt138 cp $9 /mnt/boot.scr139 echo "[Copying ubifs image...]"140 cp $6 /mnt/ubi.img141 if [ "$8" ]142 then143 echo "[Copying start-here folder to boot partition...]"144 cp -r $8 /mnt/START_HERE145 fi146 echo "[syncing...]"147 sync # flush file system buffers148 umount ${DRIVE}1149 150 if [ "$7" ]151 then152 echo "[Copying all media clips to data partition...]"153 mount ${DRIVE}4 /mnt154 cp -r $7/* /mnt/155 umount ${DRIVE}4156 fi157 158 echo "[Done]"

 

转载于:https://www.cnblogs.com/zengjfgit/p/4552255.html

你可能感兴趣的文章
人人都能掌握的Java服务端性能优化方案
查看>>
Android入门第一关:Android四大组件
查看>>
记一次混淆算法逆向分析
查看>>
header的安全配置指南
查看>>
W3C CSS Transforms摘译
查看>>
Logo设计的简要可行步骤
查看>>
ES6之Set和Map
查看>>
动画-仿微博弹簧动画
查看>>
[译] 单向用户界面架构
查看>>
shell script
查看>>
聊聊rocketmq的KVConfigManager
查看>>
实现立方体旋转
查看>>
学习牵引力UI设计,改变了青春梦想!
查看>>
ES6 系列之 Babel 是如何编译 Class 的(下)
查看>>
CAS 无锁式同步机制
查看>>
前端人员必看周刊和公众号
查看>>
SSProgressHUD - 加载动画提示、文字和图片提示、进度加载提示、可自定义、方便的API调用...
查看>>
实现一个简化版的vue-router
查看>>
Flv封装格式
查看>>
Android RecyclerView实现头部悬浮吸顶效果
查看>>