android工程rsc文件夹,【MTK】Run-time Switchable Configuration机制
編譯階段以某種方式將不同硬件的配置信息寫(xiě)入Image
配置信息一般包含Property列表/APK/...
具體流程請(qǐng)參考下一章節(jié)的介紹
LK(little kernel)通過(guò) eFuse/GPIO等硬件訊息獲取當(dāng)前應(yīng)該是用哪套配置,并通過(guò)Command Line的方式傳給init.
這個(gè)步驟需要客戶參考 DCC3209223 并根據(jù)自己的硬件設(shè)計(jì)自行實(shí)現(xiàn)
單個(gè)Package的時(shí)候,無(wú)需此步驟,此步驟僅用于需要"切換"的場(chǎng)景。
init process增加一段邏輯,加載當(dāng)前配置對(duì)應(yīng)的預(yù)先放在Image里的 Property 列表.
具體流程參考:/system/core/init/property_service.cpp 里的 LoadRscRoProps LoadRscRwProps
PMS 增加一段邏輯,安裝當(dāng)前配置對(duì)應(yīng)的預(yù)先放在Image里的 APK.
具體流程參考:/vendor/mediatek/proprietary/frameworks/base/services/core/java/com/mediatek/server/pm/PmsExtImpl.java 搜索 rsc 相關(guān)的code
3. 配置/編譯流程:
RSC相關(guān)的配置文件,在Project中的位置如下圖,主要是由Project的?RuntimeSwitchConfig.mk,以及各個(gè)RSC Package自己的RuntimeSwitch.mk組成。
大部分RSC的RuntimeSwitch.mk都使用了Include其他.mk的方式用來(lái)減少配置的工作量。
Project從MTK Release的時(shí)候,只有配置default一個(gè)RSC(其內(nèi)容通常為空),此時(shí)您可以把它任意換成某個(gè)RSC,當(dāng)不涉及到切換的時(shí)候,是可以直接使用的,它可以被視為一套優(yōu)先級(jí)很高的配置,會(huì)覆蓋掉device.mk的配置。而當(dāng)您要配置2個(gè)及以上的RSC的時(shí)候,就需要如上節(jié)所述,自行客制化LK里面切換的Code了。
DeviceTree部分的配置會(huì)稍微復(fù)雜,大多數(shù)Feature并不需要配置它,如果有需求的時(shí)候,可以參考Single Image的文檔.?DCC3209223
當(dāng)完成編譯后,會(huì)在不同的Image的etc/rsc/目錄下生成幾套不同的配置包,如下圖,
然后Init和PMS以及各個(gè)模塊會(huì)根據(jù)您從LK傳入的rsc name,來(lái)選擇不同目錄進(jìn)行加載/安裝。
4. 客制化示例:
如果需要切換Property/APK,一般情況只需要在LK實(shí)現(xiàn)這個(gè)Function即可,該函數(shù)是個(gè) 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?還需要額外實(shí)現(xiàn)這個(gè)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
}
總結(jié)
以上是生活随笔為你收集整理的android工程rsc文件夹,【MTK】Run-time Switchable Configuration机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。