[FAQ20105] 如何在同一个image实现单双卡兼容?

[DESCRIPTION]
有些时候为了应对不同市场的需求做了不同的硬件设计,但是又希望使用同一套软件镜像自动适应。
此FAQ即是解决单双卡兼容的问题,即同一包软件根据不同的硬件ID自动套用单卡或者双卡的设定。
  
 
[SOLUTION]
首先前提条件是硬件上做了可以区分不同设计的方案,常规的做法有:
  • 透过GPIO电平的方式区分,1个GPIO有3种状态,高,低,悬空,2个GPIO就可以区分出9种不同的硬件。
  • 透过ADC读取不同的电压值,更换不同的分压电阻就可以设定任意多种不同的硬件设计。

区分出不同的硬件版本后可以实现并调用下面的函数来设定支援SIM卡的数量。

 int set_ro_boot_sim_count(void * fdt, unsigned int sim_count) {
     int nodeoffset;
     char value[2];
     nodeoffset = fdt_path_offset(fdt, "/firmware/android");
     if(nodeoffset < 0) {
         printf("ERROR: Can not find /firmware/android device tree node!\n");
         return -1;
     }
     if(sim_count > 2 && sim_count <= 0) {
         printf("ERROR: can not support %d sim.\n", sim_count);
         return -2;
     }
     snprintf(value, 1, "%d", sim_count);
     fdt_setprop_string(fdt, nodeoffset, "opt_sim_count", value);
     return 0;
}
 调用的方法可以参考如下的代码,第6行。
     extern int *target_fdt_firmware(void *fdt, char *serialno)__attribute__((weak));
     if (target_fdt_firmware) {
         target_fdt_firmware(fdt, sn_buf);
     }
 
     set_ro_boot_sim_count(fdt, 2);
 
     /* This depends on target_fdt_firmware, must after target_fdt_firmware */
     extern int update_md_opt_to_fdt_firmware(void *fdt)__attribute__((weak));
     if (update_md_opt_to_fdt_firmware) {
         update_md_opt_to_fdt_firmware(fdt);
     }
 
目前仅支持 android O 版。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值