一、腳本編寫
適配系統的時候,需要查找一些依賴文件,手工用winhex或UltraEdit來找挺麻煩的。
所以寫了個shell腳本,用來批量取得這些依賴關係。
在linux系統下,把如下內容存爲getNEED.sh
#/bin/bash
#by benjaminwan V0.2
printf "**************************************\n"
printf "please put this shell to system folder\n"
printf "**************************************\n"
function getNeed()
{
echo '<<<<<<getting NEED for '$1'>>>>>>'
case $1 in
lib/hw)
name=lib_hw
;;
vendor/bin)
name=vendor_bin
;;
vendor/lib)
name=vendor_lib
;;
vendor/lib/hw)
name=vendor_lib_hw
;;
*)
name=$1
;;
esac
if [ ! -d $1 ];then
printf "can't find $1 folder!\n"
else
ls $1 -p | grep [^/]$ > info_$name.txt
cat info_$name.txt |while read line
do
echo "getting NEED for" $line
echo $line >> Need_$name.txt
objdump -x $1/$line | grep "NEEDED" >> Need_$name.txt
echo "*************************************" >> Need_$name.txt
done
rm info_$name.txt
fi
}
getNeed bin;
getNeed lib;
getNeed lib/hw;
getNeed vendor/bin;
getNeed vendor/lib;
getNeed vendor/lib/hw;
printf "**********Completed!**********\n"
二、使用說明
以下操作均在linux下完成(在linux的ext3或ext4文件系統下操作),首先確保你的linux有objdump這個程序
把ROM解壓,再把getNEED.sh複製到system目錄
執行完畢後,目錄下生成的NEED_xxx.txt就是批量列出的依賴關係文件
如果文件不含NEEDED,則代表此文件無依賴關係,或者不能被objdump識別
如何解讀(例):
adb
NEEDED libc.so
NEEDED libstdc++.so
NEEDED libm.so
*************************************
此段含義:
adb這個程序,需要libc.so、libstdc++.so、libm.so這三個文件
========================================================================================
附加知識:
有時候缺lib,並不提示文件名,而是提示一串比如:_ZN3net15
這個時候可以通過這個命令來查找
grep -r "_ZN3net15" *