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:
commit
00c01d9d54
@ -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 #
|
94
ARM/mkboot
94
ARM/mkboot
@ -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
|
||||
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user