简述 extract-files.sh 和 setup-makefiles.sh 作用
侧边栏壁纸
  • 累计撰写 7 篇文章
  • 累计收到 2 条评论

简述 extract-files.sh 和 setup-makefiles.sh 作用

ReallySnow
2023-08-28 / 0 评论 / 94 阅读 / 正在检测是否收录...

extract-filessetup-makefiles算是比较重要的脚本,爱来自LineageOS,对于很多入坑的小可爱们并不知道它是干啥的,所以本章讲述它的重要性,和为什么需要它。

功能介绍

extracr-files适用于依据blobs list来提取blobs然后运行setup-makefiles来生成makefile复制blobs,这样可以节约维护者大量手动复制blobs和写makefiles的痛苦。
同时它也支持了复制部分blobs的功能,例如cne有问题需要升级,我们就可以使用这个功能。
同时还支持pin blobs,一旦这个blobs并没有必要更新,就可以选择pin sha1来解决
setup-makefiles,就没啥好说的了,只是帮助生成makefiles而已

使用方法

首先通过脚本代码了解功能

# 这是一个common tree下的extract-files的功能
while [ "${#}" -gt 0 ]; do
    case "${1}" in
        --only-common )
                ONLY_COMMON=true
                ;;
        --only-target )
                ONLY_TARGET=true
                ;;
        -n | --no-cleanup )
                CLEAN_VENDOR=false
                ;;
        -k | --kang )
                KANG="--kang"
                ;;
        -s | --section )
                SECTION="${2}"; shift
                CLEAN_VENDOR=false
                ;;
         * )
                SRC="${1}"
                ;;
    esac
    shift
done

--only-common意思很简单,就是只拉取并生成common供应
商树
--only-target也很简单,就是只拉取并生成target的供应商树,target不理解的话,可以举个例子,例如你的设备树是tama,加了这个就是获取tama的供应商树
-n | --no-cleanup不清理供应商树,这个也很好理解
-k | --kang指显示获取的blobs的sha1,这里的kang并不是指偷窃代码,这种应用场景很多,例如你要升级CNE的blobs又想pin,就可以用它
-s | --section是用于选择你需要获取的blobs,场景使用大多数和-k一样
ADB提取,因为繁琐暂时不提他

使用的时候需要解包好的ROM,用于提取blobs
例如我们要生成一个vendor tree就需要:

bash extract-files.sh #解包好的ROM目录

然后就可以获得一个vendor tree

如果我们需要取一部分blobs,那么只需这样:

 bash extract-files.sh #解包好的ROM目录 -s "你需要提取的项目"

注意:你必须需要为blobs list进行分类,不然等同虚设
要显示sha1也很简单,只需要加-k就可以了

修补blobs

blobs并不是一直都会正常工作的,肯定会随着一次次更新,而不再可用,这我们extract-files脚本也就派上用场了

案例:libsecureuisvc_jni.so提示缺symbols

因为新的库中已经移除了_ZN7android21SurfaceComposerClient11Transaction5applyEb()这个符号。因为已经不需要,所以我们可以使用shim来修复它。
首先创建libsecureshim.c,然后:

void _ZN7android21SurfaceComposerClient11Transaction5applyEb() {}

然后创建blueprint,然后:

cc_library_shared {
    name: "lib-secureuishim",
    srcs: ["lib-secureuishim.c"],
    product_specific: true,
}

最后,将其加入device.mk构建它
当然这样还远远不够,还需要patch libsecureuisvc_jni.so。这里写出手动打patch的命令

patchelf --add-needed "lib-secureuishim.so" product/lib64/libsecureuisvc_jni.so

如果需要在跑extract-files就打上patch则需要对extract-files.sh添加blob_fixup,代码如下

function blob_fixup() {
    case "${1}" in
    product/lib64/libsecureuisvc_jni.so)
        "${PATCHELF}" --add-needed "lib-secureuishim.so" "${2}"
        ;;
    esac
}

然后重新运行extract-files

2

评论 (0)

取消