如何看系统到底用了哪个dtsi

        最近在搞驱动,发现被dtsi坑死了,研究了一下打算总结在这里防止以后被坑,当然自己去找是很辛苦的,但是有时候也是有必要的。

之前我们用的dtsi是msm8916-mtp.dtsi,现在新加入了msm8916-pmi8916-mtp-evb.dtsi,而这两个在makefile里都被用了

dtb-$(CONFIG_ARCH_MSM8916) += msm8916-rumi.dtb \

msm8916-pmi8916-mtp.dtb \
msm8916-pmi8916-mtp-evb.dtb \

这下如何是好

据说在lk里会有选择,先看这两个dts文件

msm8916-pmi8916-mtp-evb.dts

msm8916-pmi8916-mtp.dts

结果发现有个不同

qcom,board-id= <10 0>;

qcom,board-id= <20 0>;一个是10一个是20,在lk的/bootable/bootloader/lk/platform/dev_tree.c里

(g__PRJ_STAGE ? (cur_dt_hw_platform == HW_PLATFORM__OTHER) : (cur_dt_hw_platform == HW_PLATFORM__EVB))


enum _platform{
HW_PLATFORM__EVB = 10,
HW_PLATFORM__OTHER = 20,
};

这里确定了差别

而cur_dt_hw_platform = (cur_dt_entry->variant_id & 0x000000ff);

以前的

enum asus_platform{
HW_PLATFORM_ASUS_EVB = 20,
};

现在的

enum asus_platform{
HW_PLATFORM_ASUS_EVB = 10,
HW_PLATFORM_ASUS_OTHER = 20,
};

所以以后要看一下dtsi所在的目录里,是否有修改过,然后看lk里是否有选择

在lk的target/msm8916/init.c里

int STAGE_ID2, MCP_ID3, PRO_ID8;
g__PRJ_STAGE = (gpio_status(STAGE_ID1)<<1) | (gpio_status(STAGE_ID0) );


if (STAGE_EVB == g__PRJ_STAGE) {
dprintf(CRITICAL, "NOTICE! EVB Board Detected! EVB configuration will be loaded\n");
STAGE_ID2 = STAGE_ID2_EVB;
MCP_ID3 = MCP_ID3_EVB;
PRO_ID8 = PRO_ID8_EVB;
} else {
STAGE_ID2 = STAGE_ID2_OTHER;
MCP_ID3 = MCP_ID3_OTHER;
PRO_ID8 = PRO_ID8_OTHER;
}

所以整个选择过程如上,有空研究一下devicetree到底如何选择



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值