MTK Modem编译

附上MTK FAQ:

[DESCRIPTION]

有些客户反馈modem编译步骤比较复杂,这里对release note里的内容做了一些归纳。

编译modem可以先参考如下内容,更多细节可以参考release note。

 

[SOLUTION]

Step 1: 配置环境
按照release note -->Build Environment Info, 配置编译环境。
注意:tool要使用要求的版本,其它版本MTK内部没有测试过,很可能会出现编译报错。

Step 2: 编译命令
./m [Project makefile name] new
Ex:
./m "TK_MD_BASIC(LWCTG_67xx).mak" new

Step 3: 执行modemRenameCopy.pl脚本
In ALPS codebase, run command:
perl device/mediatek/build/build/tools/modemRenameCopy.pl [Modem Codebase Path] [Modem Project Makefile Name]
Ex:
perl device/mediatek/build/build/tools/modemRenameCopy.pl ~currUser/MOLY_codebase/mcu TK_XXX_MODEM
注意:

执行modemRenameCopy.pl脚本,这个步骤一定不能漏掉。它的作用是把所有需要拷贝到AP端的文件收集到temp_modem文件夹中(modem codebase根目录下),并且还会生成一个Android.mk文件。

Step 4:拷贝modem image到AP
执行modemRenameCopy.pl脚本之后,需要把temp_modem文件夹拷贝到AP。AP端路径:
M0之前版本:alps/vendor/mediatek/proprietary/custom/${project}/modem/[temp_modem]
M0以及之后版本:alps/vendor/mediatek/proprietary/modem/[temp_modem]

 

[temp_modem]文件夹拷贝到AP端之后,文件夹名可以自行更改,如${modem}:
alps/vendor/mediatek/proprietary/modem/${modem}

Step 5:编译APPS
Apps是跟modem code一起release的。APPS同样需要先编译,然后把编译生成的文件拷贝到AP端.

注意:

编译APPS之前,需要安装Android NDK。下载地址请参考release note -->Build_Configure_Modem--->[2. Build MD APPS library & binary]

 

编译命令:
./build.sh clean,build,pack all [modem chip generation config file]
Ex:
./build.sh clean,build,pack all GEN93_USER

 

Step 6:把编译APPS生成的文件拷贝到AP
解开生成的*.tar.bz2,拷贝如下:
init_rc/, 拷贝到alps/vendor/mediatek/proprietary/modem/${modem}/init_rc/
sepolicy/,拷贝到alps/vendor/mediatek/proprietary/modem/${modem}/sepolicy/
makefile/,拷贝到alps/vendor/mediatek/proprietary/modem/${modem}/makefile/
libs/, 拷贝到alps/vendor/mediatek/proprietary/modem/${modem}/libs/

 

Step 7:Configure in ALPS

        1. alps/device/${company}/${project}/ProjectConfig.mk

            CUSTOM_MODEM = ${modem}

        2. 把alps/device/mediatek/build/build/tools/modem/modem_Android.mk

            拷贝到                      

            alps/vendor/mediatek/proprietary/modem/Android.mk  (跟${modem}在同一级目录)

 

PS:从step 2开始可以参考release note -->Build_Configure_Modem. 

 

再附上网友实际操作:

一.MTK Modem原码编译说明
1. 编译环境,我们本地使用虚拟机安装Ubuntu系统来编译代码。

2. 使用repo命令或者脚本从服务器上下载项目modem代码到Ubuntu本地。
  类似于下载AP代码,进入Jenkins的modem编译输出文件:
  底版本分支:
/bin/repo init -u ssh://192.168.1.161:29418/MTK/manifest -b master -m Mtk_Vendor_6763_8.0_Cta_Modem.xml  --no-repo-verify
  差异化代码分支:
/bin/repo init -u ssh://192.168.1.161:29418/XTHINK/manifest -b master -m H32_8.1_Comm_Modem.xml  --no-repo-verify

 ~/repo/repo sync -c -q -j8;同步代码

3. 在mcu\common\tools\下面新建GCC\MIPS\4.9.2\linux目录,把GCC工具解压后拷贝到目录下mcu\common\tools\GCC\MIPS\4.9.2\linux,GCC工具可以在如下地址获取:\\192.168.1.160\ShareDocuments\Software\编译资料\modem编译需要工具\Codescape.GNU.Tools.Package.2016.05-08.for.MIPS.MTI.Bare.Metal.CentOS-5.x86_64.tar(因为服务器上下载的代码没有 GCC和NDK)


4. 在目录下modem\mcu\ 通过命令执行m脚本启动编译,编译命令为:
./m "TK_MD_BASIC(LWCTG_R2_6763).mak" new,其中第二个参数根据项目平台和网络制式配置来选择,可以从目录mcu\make\projects下选择不同的编译mak文件。(如果之前有编译就./m "TK_MD_BASIC(LWCTG_R3_6739).mak" clean再new)


本次编译结果:
 
第二个参数


.mak文件可以参考modem编译参数配置:

5. 第4步执行完成之后,在Android原码目录device\mediatek\build\build\tools\ 下执行命令来重命令打包modem镜像,在Linux环境下进入如上Android目录,执行命令./modemRenameCopy.pl ~/code/android_source/mtk/modemcode/p56a/modem/mcu "TK_MD_BASIC(LWCTG_R2_6763).mak",然后在modem代码目录modem\mcu\temp_modem下会生成新的modem镜像文件。(注意文件路径)

本次编译结果:

结果存放位置:
将md1bin.img修改成md1img.img和md1dsp.img一起放入到版本目录中,就可以用于刷机
 
对于9.0项目需要增加如下步骤:
6.  把NDK工具拷贝到modem目录modem\apps\NDK\android-ndk-r14b下,然后在目录modem\apps下执行命令./build.sh clean,build,pack all GEN93_USER来编译app。NDK工具获取地址:\\192.168.1.160\ShareDocuments\Software\编译资料\modem编译需要工具\android-ndk-r14b-linux-x86_64.zip
在apps目录下面新建NDK,解压android-ndk-r14b-linux-x86_64.zip得到android-ndk-r14b目录
 
 
编译完成,生成GEN93_USER\rel
本次编译结果:
 
结果存放在:
 
7. 最后把第5步生成的modem\mcu\temp_modem目录下和第6步modem\apps\build\GEN93_USER\rel目录下所有的文件拷贝到Android原码目录vendor\mediatek\proprietary\modem\P32A_modem 下,然后在全编译一次Android原码在out目录下就包含了modem镜像,可以使用MTK刷机工具flash_tool烧录完整的软件版本了。
  
目录A95C里面的文件是虚拟机编译modem的结果,和服务器上编译的modem结果是完全一样的,服务器上编译的modem版本结果仍然需要放到AP代码的modem目录中全编才能集成到版本中。
有第7步骤的话,之前temp_modem里面的md1bin.img就不需要再修改名字。
结果得到modem文件 

以后基本的修改都集中在修改射频参数: 
8. 在编译过程中可能遇到的一些错误可以参考WiKi上的资料http://192.168.1.163:8090/pages/viewpage.action?pageId=819250


二.MTK射频调试流程和遇到的问题
1. MTK射频相关的原码在目录modem\mcu\pcore\custom\modem下,把该目录下的原码提供给硬件沈工,由他根据射频设计原理图和相关器件配置来修改添加RF 相关的驱动,每个频段都调试完之后就可以了。

2. 在Android侧修改手机所支持的网络制式能力配置,在Android侧device\xthink\P33A\ProjectConfig.mk、kernel-4.4\arch\arm\configs\p33a_bsp_1g_defconfig、vendor\mediatek\proprietary\bootable\bootloader\lk\project\P33A.mk按照下图的位置来进行手机网络能力的配置,先确定手机是多少的模式M,然后再配置最左边的。
 

 
注意:
device\xthink\H56A\ProjectConfig.mk
和vendor\mediatek\proprietary\bootable\bootloader\lk\project\H58A.mk中的MTK_PROTOCOL1_RAT_CONFIG要保持一致。
\mydroid\vendor\mediatek\proprietary\bootable\bootloader\lk\make\ rat_config.mk
 具体的路径是mydroid\vendor\mediatek\proprietary\bootable\bootloader\lk\make\rat_config.mk

以H33D为例,说明新增一个项目modem代码的修改。
需要确定modem上传到那个分支,确定是否存在,否在需要找系统人员新建。
(1)从gerrit上面拉取modem的差异化代码
   
 
 
 
这里的checkout也实现了代码的下载功能。
 
重要的一步,挂钩子。然后其他的修改步骤就跟AP的修改一样的了。
挂钩子scp -P 29418 -p 192.168.32.218:hooks/commit-msg .git/hooks
      scp -P 29418 -p 192.168.1.161:hooks/commit-msg .git/hooks


修改代码
git add .
git commit -s -m
git push --no-thin origin HEAD:refs/for/


3. RF调试之前,先把MTK底版本原码不加入修改先编译后烧录手机,看看MTK底版本能否正常加载使用modem。之前项目就发生过MTK modem原码无法正常使用的情况,后来发现是底版本Band71使能之后和芯片设计不匹配导致的问题。经常遇到的modem无法加载的问题比较多的是RF 驱动一些器件参数配置不正确导致的问题,这个需要和硬件沈工检查排错。

4. 在ProjectConfig.mk中配置modem编译的宏CUSTOM_MODEM = P32A_modem的配置一定要与vendor\mediatek\proprietary\modem\P32A_modem目录名称一致,否则也会出现modem异常问题。

5. 之前MT6739平台配置了一套软件版本兼容多个项目主板的DRDI功能,如果在各个制式的DRDI相关配置不正确也会导致modem异常问题。

6. MTK相关NV的操作可以参考WiKi文档链接如下:
http://192.168.1.163:8090/pages/viewpage.action?pageId=1999041
http://192.168.1.163:8090/pages/viewpage.action?pageId=2883589


三.高通MBN配置
1. MBN (Modem Binary)文件实际上是一组重要NV/EFS和策略管理器设置,用于正确配置UE,以满足运营要求或实验室测试和认证要求。简单来说,其实就是一个配置文件,里面有很多非常重要的NV/EFS配置,以及policy manager 的一些设置,这些配置能够使手机满足特定运营商网络的操作需求,总而言之是和运营商相关的配置文件。MBN再加上高通开发的MCFG框架,能够实现单一modem软件版本配上不同的MBN对不同运营商网络支持。

2. 软件MBN文件存放在modem代码modem_proc\mcfg\configs\mcfg_sw\generic目录下,里面包含了高通配置的主要运营商的MBN文件,用来适配不同运营商的网络配置需求。在modem原码modem_proc\mcfg\mcfg_gen\generic目录下存放有生成MBN文件的资源文件MCFG_SW_Items_List_Macro.excel,这个Excel文档里面保存了需要配置的NV/EFS,如果需要新增NV或者EFS项,可以在Excel文档里面添加,新增NV项格式保持和原始的一致就可以,修改或者添加完配置后必须要手动增加MBN版本号一般是在原来版本号基础上+1就可以,也可以参考高通文档80-n557,这个Excel第一页有按钮,选择点击Generate Sources and Build MBN Files 该按钮就可以配置生成MBN文件了,生成的MBN文件保存在modem_proc\mcfg\configs\mcfg_sw\generic下面。

3. 高通平台在软件版本中通过升级MBN文件来更改NV/EFS配置,升级原理是利用高通qmi-pdc架构来实现update,升级之前需要先把新MBN文件制作好,并且新制作的MBN版本号要比手机中已经存在的MBN版本号高,把新生产的MBN文件放在modem_proc\mcfg\configs\mcfg_sw\generic对应运营商目录下重新编译modem,再重新编译一个完整的软件包,烧录新软件版本,手机开机获取modem已经加载的MBN版本号,再与Android侧保存的MBN版本号进行比较,如果Android侧的版本号比modem已经加载的MBN版本号要高,则立马执行MBN升级,把Android侧的MBN文件load到modem并且refresh modem系统激活新MBN。其中可以通过modem 侧AMSS\modem_proc\mcfg\configs\mcfg_sw\generic目录下得mbn_ota.txt文件来控制需要升级哪些运营商的MBN文件。如果是临时验证MBN是否生效,可以通过高通工具PDC 来load并且激活MBN来验证,当NV71546=7时高通MBN 自动根据SIM卡IIN号来激活MBN配置。

4. MBN使用注意事项,当手机熔丝后,加载的MBN文件需要进行签名。MBN配置资源Excel文档中NV格式要正确,EFS文件的拷贝需要配置正确的文件路径。


四.高通QCN
1. 项目最原始的qcn文件是从高通原码中选择一个与项目主板比较接近的射频卡驱动(GPIO配置相近、频段配置相近),并将该射频卡驱动对应的QCN作为基础QCN文件,硬件加入静态射频NV项以及频段配置后可以作为一个QCN配置文件,后续软件相应NV的修改可以通过QXDM修改后从手机中把QCN备份出来就可以了。

2. QCN tar包制作流程:
2.1 先在modem代码中定义打开宏FEATURE_EFS_ENABLE_FACTORY_IMAGE_SECURITY_HOLE并编译modem。
2.2 拿一台机器先使用fastboot erase命令擦除手机中已经存在的qnc数据,使用QPST工具烧录制作好的QCN文件,手机连接电脑打开diag端口,在PC命令终端进入modem侧 modem_proc/core/storage/tools目录下,执行perl efsreadimage.pl -z命令,该命令会在当前目录下生成fs_image.tar.gz,将fs_image.tar.gz拷到modem_proc/core/storage/tools/qdst目录下,在linux环境下执行python QDSTMBN.py fs_image.tar.gz ,完成后,同目录下会生成fs_image.tar.gz.mbn文件。
2.3 在PC端本地新建一文件夹create_efs,在modem侧将modem_proc\build\ms\bin\AAAAANAZ\efs_image_meta.bin文件,fs_image.tar.gz.mbn文件和\modem_proc\core\bsp\efs_image_header\tools\所有文件拷到create_efs,在windows命令窗口下执行efs_image_create.py  efs_image_meta.bin  fs_image.tar.gz.mbn,命令执行成功将在该目录下生成最终的QCN Tar包fs_image.tar.gz.mbn.img文件。

3. 在软件版本编译时执行modem镜像文件拆包脚本后,在生成的下载分区文件rawprogram0.xml中将制作好的QCN tar包fs_image.tar.gz.mbn.img加入到fsg分区,这样就可以通过下载软件来烧录QCN文件。
————————————————
版权声明:本文为CSDN博主「知不足而奋进」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ZhongGuoRenMei/article/details/90256478

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值