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

http://blog.csdn.net/u013308744/article/details/50739514

 

http://blog.csdn.net/armfpga123/article/details/51863442

高通平台是根据board-id来匹配dts文件,查看lk日志,找到如下log,由此可以断定board-id=8
B -    262971 - CDT version:3,Platform ID:8,Major ID:1,Minor ID:0,Subtype:0
查看kernel/arch/arm/boot/dts/qcom/msm8909-1gb-mtp.dts文件发现,高通默认的dts配置是mtp,根据board-id将其改为qrd-skue,方法如下:
1.查看kernel/arch/arm/boot/dts/qcom/msm8909-1gb-qrd-skue.dts文件,其board-id是0x1000b,将其改为8。

同时修改kernel/arch/arm/boot/dts/qcom/msm8909-1gb-mtp.dts文件,将board-id改为0x1000b

 

 

最近在搞驱动,发现被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到底如何选择

你可能感兴趣的:(Android,驱动)