Merge pull request #7 from ModdingMyMind/master

There are images which do not use the standard mkbootimg.c. To rectify this problem I have added support for such images. This update is specific to ARM but definitely check it out. See README.md for a sample of what it looks like.
This commit is contained in:
xiaolu 2014-10-03 00:11:12 +08:00
commit 00c01d9d54
2 changed files with 138 additions and 12 deletions

View File

@ -1,8 +1,60 @@
Original Source Modified By:
Modding.MyMind XDA
Modding.MyMind XDA \
ModdingMyMind AF
Built to be used on Arm devices.
Move the bash binary to /system/xbin.
The rest must remain in the project folder
The rest must remain in the project folder.
### Unpack Boot.img or Recovery.img:
root@android:/data/local/tmp/mkbootimg_tool/ARM # ./mkboot recovery_stock.img recoveryfolder
Unpack & decompress recovery_stock.img to recoveryfolder
****** WARNING ******* WARNING ******* WARNING ******
This image is built using NON-standard mkbootimg!
BASE is 0x001fff00
KERNEL_OFFSET is 0x00408100
RAMDISK_OFFSET is 0x00100100
SECOND_OFFSET is 0x00d00100
You can modify mkbootimg.c with the above value(s)
****** WARNING ******* WARNING ******* WARNING ******
kernel : zImage
ramdisk : ramdisk
page size : 2048
kernel size : 6597520
ramdisk size : 3141533
base : 0x001fff00
kernel offset : 0x00408100
ramdisk offset : 0x00100100
second_offset : 0x00d00100
tags offset : 0x00000100
cmd line : vmalloc=384M mem=2044m@0x200000 psci=enable mmcparts=mmcblk0:p1(vrl),p2(vrl_backup),p7(modemnvm_factory),p18(splash),p22(dfx),p23(modemnvm_backup),p24(modemnvm_img),p25(modemnvm_system),p26(modem),p27(modem_dsp),p28(modem_om),p29(modemnvm_update),p30(3rdmodem),p31(3rdmodemnvm),p32(3rdmodemnvmbkp)
ramdisk is gzip format.
Unpack completed.
root@android:/data/local/tmp/mkbootimg_tools-master/ARM #
### Repack Boot.img or Recovery.img:
root@android:/data/local/tmp/mkbootimg_tools-master # ./mkboot recoveryfolder recovery_stock.img
mkbootimg from recoveryfolder/img_info.
kernel : zImage
ramdisk : new_ramdisk.gz
page size : 2048
kernel size : 6597520
ramdisk size : 3142833
base : 0x001fff00
kernel offset : 0x00408100
ramdisk offset : 0x00100100
tags offset : 0x00000100
cmd line : vmalloc=384M mem=2044m@0x200000 psci=enable mmcparts=mmcblk0:p1(vrl),p2(vrl_backup),p7(modemnvm_factory),p18(splash),p22(dfx),p23(modemnvm_backup),p24(modemnvm_img),p25(modemnvm_system),p26(modem),p27(modem_dsp),p28(modem_om),p29(modemnvm_update),p30(3rdmodem),p31(3rdmodemnvm),p32(3rdmodemnvmbkp)
Kernel size: 6597520, new ramdisk size: 3142833, recovery_stock.img: 9744384.
recovery_stock.img has been created.
...
root@android:/data/local/tmp/mkbootimg_tools-master #

View File

@ -153,7 +153,7 @@ if [ -e $2 ]; then
fi
tempdir=$2
mkdir -p "$tempdir"
pout "Unpack & decompress $1 to $2"
pout "\nUnpack & decompress $1 to $2"
#get boot.img info
cp -f $1 $tempdir/
@ -184,11 +184,84 @@ ramdisk_offset=$((ramdisk_addr-base_addr))
second_offset=$((second_addr-base_addr))
tags_offset=$((tags_addr-base_addr))
#########################################################
non_standard_base=$((tags_addr-0x00000100)) # Need this to get the TRUE Base Address
non_standard_base_addr=$(printf "0x%08x" $non_standard_base)
base_addr_verify=$(printf "0x%08x" $base_addr)
base_addr=$(printf "0x%08x" $base_addr)
kernel_offset=$(printf "0x%08x" $kernel_offset)
ramdisk_offset=$(printf "0x%08x" $ramdisk_offset)
second_offset=$(printf "0x%08x" $second_offset)
tags_offset=$(printf "0x%08x" $tags_offset)
if [ $base_addr == $non_standard_base ]; then
base_addr=$(printf "0x%08x" $base_addr)
else
base_addr=$(printf "0x%08x" $non_standard_base_addr)
fi
# Accurate offsets used on images with non standard mkbootimg.c
kernel_offset_ns=$((kernel_addr-non_standard_base))
ramdisk_offset_ns=$((ramdisk_addr-non_standard_base))
second_offset_ns=$((second_addr-non_standard_base))
tags_offset_ns=$((tags_addr-non_standard_base))
# Do the Offsets match with the Base Address for standard mkbootimg.c?
kernel_offset_s=$((kernel_addr-0x00008000))
ramdisk_offset_s=$((ramdisk_addr-0x01000000))
second_offset_s=$((second_addr-0x00f00000))
tags_offset_s=$((tags_addr-0x00000100))
if [ $non_standard_base -eq $kernel_offset_s ]; then
kernel_offset=$(printf "0x%08x" $kernel_offset)
else
kernel_offset_ns=$(printf "0x%08x" $kernel_offset_ns)
kernel_offset=$(printf "0x%08x" $kernel_offset_ns)
kernel_offset_warning=$kernel_offset_ns
fi
if [ $non_standard_base -eq $ramdisk_offset_s ]; then
ramdisk_offset=$(printf "0x%08x" $ramdisk_offset)
else
ramdisk_offset_ns=$(printf "0x%08x" $ramdisk_offset_ns)
ramdisk_offset=$(printf "0x%08x" $ramdisk_offset_ns)
ramdisk_offset_warning=$ramdisk_offset_ns
fi
if [ $non_standard_base -eq $second_offset_s ]; then
second_offset=$(printf "0x%08x" $second_offset)
else
second_offset_ns=$(printf "0x%08x" $second_offset_ns)
second_offset=$(printf "0x%08x" $second_offset_ns)
second_offset_warning=$second_offset_ns
fi
if [ $base_addr_verify != $non_standard_base_addr ]; then
base_warning=$non_standard_base_addr
fi
tags_offset=$(printf "0x%08x" $tags_offset_ns)
# Below are the known offsets for non standard mkbootimg.c
if [[ ! -z $kernel_offset_warning ]] || [[ ! -z $ramdisk_offset_warning ]] || [[ ! -z $second_offset_warning ]]; then
pout "\n****** WARNING ******* WARNING ******* WARNING ******\n"
pout "This image is built using NON-standard mkbootimg!"
fi
if [ ! -z $base_warning ]; then
pout "BASE is $base_warning"
fi
if [ ! -z $kernel_offset_warning ]; then
pout "KERNEL_OFFSET is $kernel_offset_ns"
fi
if [ ! -z $ramdisk_offset_warning ]; then
pout "RAMDISK_OFFSET is $ramdisk_offset_ns"
fi
if [ ! -z $second_offset_warning ]; then
pout "SECOND_OFFSET is $second_offset_ns"
fi
if [[ ! -z $kernel_offset_warning ]] || [[ ! -z $ramdisk_offset_warning ]] || [[ ! -z $second_offset_warning ]]; then
pout "\nYou can modify mkbootimg.c with the above value(s)"
pout "\n****** WARNING ******* WARNING ******* WARNING ******"
fi
#########################################################
k_count=$(((kernel_size+page_size-1)/page_size))
r_count=$(((ramdisk_size+page_size-1)/page_size))
@ -237,22 +310,23 @@ if [ $? -gt 0 ]; then
#try lz4
$lz4 -d ../ramdisk.gz ../ramdisk.cpio
if [ $? -gt 0 ]; then
pout "ramdisk is unknown format,can't unpack ramdisk"
pout "\nramdisk is unknown format,can't unpack ramdisk"
busybox rm ../ramdisk.cpio
else
pout "ramdisk is lz4 format."
pout "\nramdisk is lz4 format."
$cpio -i -d -m --no-absolute-filenames 2>/dev/null < ../ramdisk.cpio
fi
else
pout "ramdisk is lzma format."
pout "\nramdisk is lzma format."
$lzma -d -c ../ramdisk.gz | $cpio -i -d -m --no-absolute-filenames 2>/dev/null
fi
else
pout "ramdisk is gzip format."
pout "\nramdisk is gzip format."
$gzip -d -c ../ramdisk.gz | $cpio -i -d -m --no-absolute-filenames 2>/dev/null
fi
#Unpack Finish to exit.
pout "Unpack completed."
pout "Unpack completed.\n"
exit