android工程rsc文件夹,【MTK】Run-time Switchable Configuration机制
編譯階段以某種方式將不同硬件的配置信息寫入Image
配置信息一般包含Property列表/APK/...
具體流程請參考下一章節(jié)的介紹
LK(little kernel)通過 eFuse/GPIO等硬件訊息獲取當前應該是用哪套配置,并通過Command Line的方式傳給init.
這個步驟需要客戶參考 DCC3209223 并根據(jù)自己的硬件設計自行實現(xiàn)
單個Package的時候,無需此步驟,此步驟僅用于需要"切換"的場景。
init process增加一段邏輯,加載當前配置對應的預先放在Image里的 Property 列表.
具體流程參考:/system/core/init/property_service.cpp 里的 LoadRscRoProps LoadRscRwProps
PMS 增加一段邏輯,安裝當前配置對應的預先放在Image里的 APK.
具體流程參考:/vendor/mediatek/proprietary/frameworks/base/services/core/java/com/mediatek/server/pm/PmsExtImpl.java 搜索 rsc 相關的code
3. 配置/編譯流程:
RSC相關的配置文件,在Project中的位置如下圖,主要是由Project的?RuntimeSwitchConfig.mk,以及各個RSC Package自己的RuntimeSwitch.mk組成。
大部分RSC的RuntimeSwitch.mk都使用了Include其他.mk的方式用來減少配置的工作量。
Project從MTK Release的時候,只有配置default一個RSC(其內(nèi)容通常為空),此時您可以把它任意換成某個RSC,當不涉及到切換的時候,是可以直接使用的,它可以被視為一套優(yōu)先級很高的配置,會覆蓋掉device.mk的配置。而當您要配置2個及以上的RSC的時候,就需要如上節(jié)所述,自行客制化LK里面切換的Code了。
DeviceTree部分的配置會稍微復雜,大多數(shù)Feature并不需要配置它,如果有需求的時候,可以參考Single Image的文檔.?DCC3209223
當完成編譯后,會在不同的Image的etc/rsc/目錄下生成幾套不同的配置包,如下圖,
然后Init和PMS以及各個模塊會根據(jù)您從LK傳入的rsc name,來選擇不同目錄進行加載/安裝。
4. 客制化示例:
如果需要切換Property/APK,一般情況只需要在LK實現(xiàn)這個Function即可,該函數(shù)是個 Weak function,被LK的platform.c調(diào)用。
#include
#include
void rsc_init(void)
{
/*
Please customize here base on your HW design, usually call driver function to get some HW info,
like eFuse value or GPIO value, then decide to use which RSC names.
Example: ?here we check a MTK HW GPIO as an example
*/
if (mt_get_gpio_in(GPIO155) == 0) {
cmdline_append(RSC_CMDLINE"rsc01");
} else {
cmdline_append(RSC_CMDLINE"default");
}
}
如果需要切換Device Tree Overlay?還需要額外實現(xiàn)這個Weak Function。
/*
Implement this function only if you need to switch between different device tree overlay
*/
int rsc_get_dtbo_index(void)
{
if (mt_get_gpio_in(GPIO155) == 0) {
return 1; //Index 1 dtbo for Special HW, map to rsc01
}
return 0;? //Index 0 dtbo for default
}
總結
以上是生活随笔為你收集整理的android工程rsc文件夹,【MTK】Run-time Switchable Configuration机制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。