Qcom 標準 BSP 記憶體優化實作
按照 Qcom 提供的標準 BSP,若直接 build 好整個 image 並燒錄到先前提到的低端裝置上,啟動後很可能會立即 crash,主要原因就是記憶體不足。系統開機即佔用 1.3GB RAM,因此,首要優化步驟是:
1. 移除非必要的 Service 與 App
這雖然聽起來像是基本操作,但效果顯著。由於這台設備的使用場景單一(固定在人臉辨識機上,且長期插電運行),並不像手機需要支援全方位功能。因此,我們只需專注於人臉辨識應用所需的資源。
調整 qcom/common/base.mk
在 qcom/common/base.mk
中移除以下應用,這些應用預設會載入部分系統服務(如 MediaScanner
, CalendarProvider
),移除後可降低約 100MB RAM 佔用,並減少後台進程數量:
- Music
- Gallery
- Calendar
- Updater
透過 ADB 檢視記憶體佔用情況
使用以下指令來查看後台應用的記憶體佔用情況,幫助找出佔用 RAM 最多的進程,決定哪些可以移除:
adb shell dumpsys meminfo | grep -E "TOTAL|com.android"
或使用:
adb shell top -m 10 -o RES,PID,CMD
2. 關閉不必要的系統服務
調整 frameworks/base/services/Android.mk
與 /system/etc/init/hw/init.rc
以下服務可視需求關閉,以進一步減少記憶體佔用:
- 關閉藍牙(
com.android.bluetooth
) - 關閉 NFC(
com.android.nfc
) - 禁用 SMS(
com.android.mms
) - 禁用 Telephony(
com.android.phone
) - 關閉 Wi-Fi(
com.android.net.wifi
) - 移除系統 UI(
com.android.systemui
,需確認替代方案) - 移除桌面應用(
com.android.launcher
) - 禁用媒體服務(
com.android.media
) - 關閉語音輸入(
com.android.speech
) - 禁用輸入法(
com.android.inputmethod.latin
) - 關閉列印服務(
com.android.print
)
使用 setprop
來禁用部分功能
setprop persist.sys.bluetooth.disabled 1
setprop persist.sys.nfc.disabled 1
⚠ 注意: 建議逐項關閉並測試,以確保系統穩定性。
3. 優化後的系統記憶體使用情況
項目 | 記憶體減少量 |
---|---|
優化前(原生 BSP) | 1.3GB RAM |
移除不必要 App(Music, Gallery 等) | -100MB |
關閉不必要服務(Bluetooth, NFC, WiFi 等) | -130MB |
最終系統記憶體使用 | 1.1GB RAM |
✅ 成功釋放 230MB 記憶體,可用於人臉辨識 AI 模型 🎯
4. 不能關閉的核心服務
以下系統核心服務必須保留,否則會影響設備正常運行:
- Android 核心服務(
system_server
,surfaceflinger
,inputflinger
等) - 網路與電源管理服務(
netmgrd
,thermal-engine
)
總結
- 移除非必要 App(節省約 100MB)
- 關閉無用系統服務(節省約 130MB)
- 保留必要的核心服務 確保系統穩定
- 最終騰出 230MB 記憶體,讓 AI 模型能夠更順暢運行。
https://blog.csdn.net/Kennethdroid/article/details/101221185