天天看點

2022最新高通8155平台開源代碼最新代碼下載下傳、編譯方法1. 場景2. 下載下傳高通OpenSource代碼3. 編譯4. 修改代碼5. 問題記錄

目錄

1. 場景

2. 下載下傳高通OpenSource代碼

3. 編譯

4. 修改代碼

5. 問題記錄

網上幾乎99.99%都是舊教程(我沒查到一個新的),現在下載下傳網址變了。

親測有效!我的是高通SA8155P晶片。不管什麼晶片流程都是一樣的。

1. 場景

首先看下我們所面臨的問題是否類似:已擷取高通某一子產品的閉源代碼,也就是vendor裡某一子產品。然後你想修改,這時候就需要編譯so驗證。那麼得有個基礎工程吧,也就是opensource代碼。

如果場景一樣,那麼按照下面流程就可以~

2. 下載下傳高通OpenSource代碼

Android for MSM項目允許使用者建構一個基于Android的平台,其中包含針對高通晶片組的其他增強功能。

現在伺服器已經變更了,太老舊的版本已經不再維護,你也找不到。是以如果沒有對應版本找個相近的版本也應該是ok的。

新伺服器:現在可行的方式是在CodeLinaro下載下傳,以前是codeaurora,應該已經不維護了,大坑啊。下面給出網址:

Android for MSM Project | CodeLinaro Wiki

網站裡解釋得很清楚,主要下載下傳指令如下:

repo init --depth=1 -u https://git.codelinaro.org/clo/la/platform/manifest.git -b release -m [manifest] --repo-url=https://git.codelinaro.org/clo/tools/repo.git --repo-branch=qc-stable
repo sync -j8 -c --no-tags
           

[manifest]從Android releases | CodeLinaro Wiki這裡取,注意,要與你擷取的vendor閉源子產品版本一緻(或相近)。隻修改manifest就可以。

-c, --current-branch fetch only current branch from server.

--no-tags don't fetch tags.

-j 線程數,這個應該你們都懂

這兩項是為了節省下載下傳空間。

不懂 repo 的小夥伴我來給你們講:

repo用法及原理詳解,幹了啥幹了啥_alibli的部落格-CSDN部落格

如果下載下傳過程中報各種錯誤,請檢查你的代理伺服器啥的。

3. 編譯

把你要編譯的高通vendor閉源子產品拷貝到OpenSource對應目錄下,一般是vendor/qcom/,然後運作下面幾條指令:

根目錄下執行:

source build/envsetup.sh
           

這個會include一些檔案,并且配置編譯環境。

然後,選擇要編譯的系統類型:

lunch
           

最後,單編譯子產品:

mmm [vendor子產品路徑]
           

vendor子產品路徑裡要有Android.mk檔案,這個就是編譯用的。

關于m\mm\mmm\mma\mmma這個自己查吧。

最後産物在根目錄的out目錄裡。

4. 修改代碼

編譯成功的情況下,你要開始修改代碼重新編譯了。

需要注意幾點:

第一,如果你要看日志,請把日志開關打開,一般在Android.mk中和源代碼中。有時高通會把列印日志的開關注釋但保留。比如源代碼中:

//#define LOG_NDEBUG 0
           

Android.mk中:

#LOCAL_CFLAGS += -DENABLE_LOGV
           

當然具體你的子產品裡怎麼寫的,可能有點差別,還是要認真研究一下。

第二,系統内原so和你自己編的so理論上應該是版本相近,如果遇到找不到symbols等問題,在linux系統中

nm -D [涉及的].so
           

看下符合表是否一樣。

5. 問題記錄

1. 報錯日志

(native:platform) should not link to lib*** (native:vendor)
(native:platform) can not link to lib*** (native:vendor)
           

原因:

LOCAL_PROPRIETARY_MODULE是Android vendor module 必須具有的屬性,此屬性聲明将 vendor module放入vendor分區(vendor native),未聲明該屬性的module将放在system分區(platform native),且這兩個分區是不能進行連結的,是以編譯會報兩個LOCAL_MODULE無法連結的錯誤。

解決方法:

報錯位置對應 Android.mk 添加 LOCAL_PROPRIETARY_MODULE := true

該問題修改參考:Android Sensor Issues_HuluOS的部落格-CSDN部落格

繼續閱讀