Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
André Lam
android_vendor_lineage
Commits
1c29c373
Commit
1c29c373
authored
Mar 29, 2019
by
Rashed Abdel-Tawab
Committed by
Sam Mortimer
Jun 26, 2019
Browse files
extract_utils: Add functions to extract vendor blobs from vendor.img
Change-Id: I6f37adc955856fa78e719eb30249800abe80020c
parent
a7b2d0a6
Changes
1
Hide whitespace changes
Inline
Side-by-side
build/tools/extract_utils.sh
View file @
1c29c373
...
...
@@ -210,6 +210,25 @@ function prefix_match_file() {
fi
}
#
# suffix_match_file:
#
# $1: the suffix to match on
# $2: the file to match the suffix for
#
# Internal function which returns true if a filename contains the
# specified suffix.
#
function
suffix_match_file
()
{
local
SUFFIX
=
"
$1
"
local
FILE
=
"
$2
"
if
[[
"
$FILE
"
=
*
"
$SUFFIX
"
]]
;
then
return
0
else
return
1
fi
}
#
# truncate_file
#
...
...
@@ -1268,3 +1287,94 @@ function extract_firmware() {
chmod
644
"
$OUTPUT_DIR
/
$FILE
"
done
}
function
extract_img_data
()
{
local
image_file
=
"
$1
"
local
out_dir
=
"
$2
"
local
logFile
=
"
$TMPDIR
/debugfs.log"
if
[
!
-d
"
$out_dir
"
]
;
then
mkdir
-p
"
$out_dir
"
fi
if
[[
"
$HOST_OS
"
==
"Darwin"
]]
;
then
debugfs
-R
"rdump /
\"
$out_dir
\"
"
"
$image_file
"
&>
"
$logFile
"
||
{
echo
"[-] Failed to extract data from '
$image_file
'"
abort 1
}
else
debugfs
-R
'ls -p'
"
$image_file
"
2>/dev/null |
cut
-d
'/'
-f6
|
while
read
-r
entry
do
debugfs
-R
"rdump
\"
$entry
\"
\"
$out_dir
\"
"
"
$image_file
"
>>
"
$logFile
"
2>&1
||
{
echo
"[-] Failed to extract data from '
$image_file
'"
abort 1
}
done
fi
local
symlink_err
=
"rdump: Attempt to read block from filesystem resulted in short read while reading symlink"
if
grep
-Fq
"
$symlink_err
"
"
$logFile
"
;
then
echo
"[-] Symlinks have not been properly processed from
$image_file
"
echo
"[!] If you don't have a compatible debugfs version, modify 'execute-all.sh' to disable 'USE_DEBUGFS' flag"
abort 1
fi
}
declare
-ra
VENDOR_SKIP_FILES
=(
"bin/toybox_vendor"
"bin/toolbox"
"bin/grep"
"build.prop"
"compatibility_matrix.xml"
"default.prop"
"etc/NOTICE.xml.gz"
"etc/vintf/compatibility_matrix.xml"
"etc/vintf/manifest.xml"
"etc/wifi/wpa_supplicant.conf"
"manifest.xml"
"overlay/DisplayCutoutEmulationCorner/DisplayCutoutEmulationCornerOverlay.apk"
"overlay/DisplayCutoutEmulationDouble/DisplayCutoutEmulationDoubleOverlay.apk"
"overlay/DisplayCutoutEmulationTall/DisplayCutoutEmulationTallOverlay.apk"
"overlay/DisplayCutoutNoCutout/NoCutoutOverlay.apk"
"overlay/framework-res__auto_generated_rro.apk"
"overlay/SysuiDarkTheme/SysuiDarkThemeOverlay.apk"
)
function
array_contains
()
{
local
element
for
element
in
"
${
@
:2
}
"
;
do
[[
"
$element
"
==
"
$1
"
]]
&&
return
0
;
done
return
1
}
function
generate_prop_list_from_image
()
{
local
image_file
=
"
$1
"
local
image_dir
=
"
$TMPDIR
/image-temp"
local
output_list
=
"
$2
"
local
output_list_tmp
=
"
$TMPDIR
/_proprietary-blobs.txt"
local
-n
skipped_vendor_files
=
"
$3
"
extract_img_data
"
$image_file
"
"
$image_dir
"
find
"
$image_dir
"
-not
-type
d |
sed
"s#^
$image_dir
/##"
|
while
read
-r
FILE
do
# Skip VENDOR_SKIP_FILES since it will be re-generated at build time
if
array_contains
"
$FILE
"
"
${
VENDOR_SKIP_FILES
[@]
}
"
;
then
continue
fi
# Skip device defined skipped files since they will be re-generated at build time
if
array_contains
"
$FILE
"
"
${
skipped_vendor_files
[@]
}
"
;
then
continue
fi
if
suffix_match_file
".apk"
"
$FILE
"
;
then
echo
"-vendor/
$FILE
"
>>
"
$output_list_tmp
"
else
echo
"vendor/
$FILE
"
>>
"
$output_list_tmp
"
fi
done
# Sort merged file with all lists
sort
-u
"
$output_list_tmp
"
>
"
$output_list
"
# Clean-up
rm
-f
"
$output_list_tmp
"
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment