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到底如何选择