MTK平台Android12编译(包括modem)_个人笔记

编译前请确认内存+swap大于24G,我的编译环境是16G物理内存加32Gswap
系统版本:Ubuntu18.04
Perl 5.26.1 (Ubuntu 18.04 default built-in version)
Python 2.7.15 (Ubuntu 18.04 default built-in python version)
Python 3.6.7 (Ubuntu 18.04 default built-in python3 version)

modem编译

modem编译需要在MTK官网下载modem
编译过程可以在主代码的以下文件内的Build_Configure_Modem页查看
vendor\mediatek\release_note\MT8765\ReleaseNote_for_MT8765_alps-mp-s0.mp1.rc.xlsx
其中MT8765 表示你下载的芯片的名称
MTK官方描述

1、编译前准备

新建文件夹mk_modem,下载modem到该文件夹
将下载的modem文件解压,使用命令

tar -zxvf TK_MD_BASIC_MOLY.XXXXXXX.tar.gz

下载GCC MIPS cross-compiler v4.9.2

官网链接
GCC链接:https://codescape.mips.com/components/toolchain/2016.05-08/downloads.html
选择 MTI Bare Metal Toolchain MIPS32R2-MIPS32R5, MIPS64R2-MIPS64R5 and microMIPS这一项下面的几个地址(X86 X64)
以下为linux_X64的下载地址
地址:https://codescape.mips.com/components/toolchain/2016.05-08/Codescape.GNU.Tools.Package.2016.05-08.for.MIPS.MTI.Bare.Metal.CentOS-5.x86_64.tar.gz
md5: a01155719d881799b5491ef63aa78e55
sha256: 54b8f5f549add2ec8b2401e8a36442296a9edeccbe7870e4b9dd10fce6e304bf
将文件放到mk_modem

下载 Android NDK (Native Development Kit)

下载地址:https://developer.android.com/ndk/downloads/older_releases.html
该地址需要能够访问google的网站
找到版本 :Android NDK, Revision 14b (March 2017) (Android NDK r14b(2017 年 3 月)

Linux 64 位 (x86)下载地址:https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip?hl=zh-cn
SHA1 校验和:becd161da6ed9a823e25be5c02955d9cbca1dbeb

下载后将文件放到mk_modem
解压并打上补丁
补丁链接:https://android-review.googlesource.com/q/Ic558a4b0329093241aae5d4f34ecde8d1cbb0564
补丁的内容大致如下
修改文件:build/core/default-build-commands.mk
修改文件:build/core/build-binary.mk

//修改文件:build/core/default-build-commands.mk
-TARGET_LDLIBS := -lc -lm
+TARGET_LDLIBS := -lc -lm -ldl
//修改文件:build/core/build-binary.mk
ifneq ($(filter -l%,$(LOCAL_LDLIBS)),)
    LOCAL_LDLIBS := -L$(call host-path,$(SYSROOT_LINK)/usr/lib) $(LOCAL_LDLIBS)
    ifneq ($(filter x86_64 mips64,$(TARGET_ARCH_ABI)),)
        LOCAL_LDLIBS := -L$(call host-path,$(SYSROOT_LINK)/usr/lib64) $(LOCAL_LDLIBS)
    endif
endif
+
+# If LOCAL_LDLIBS contain any TARGET_LDLIBS, remove them from LOCAL_LDLIBS.
+# Those occurrences must be removed because the ordering of TARGET_LDLIBS is
+# important.  If libdl is placed before libc and binaries are in /vendor/bin,
+# libdl won't be able to link __cxa_finalize(), which is defined in libc.
+# TARGET_LDLIBS will be appended to PRIVATE_LDLIBS later.
+LOCAL_LDLIBS := $(filter-out $(TARGET_LDLIBS),$(LOCAL_LDLIBS))
+
my_ldflags := $(TARGET_LDFLAGS) $(LOCAL_LDFLAGS) $(NDK_APP_LDFLAGS)
ifneq ($(filter armeabi%,$(TARGET_ARCH_ABI)),)
    my_ldflags += $(TARGET_$(my_link_arm_mode)_LDFLAGS)
endif

编译

将下载好的modem文件(TK_MD_BASIC_MOLY.XXXXXXX.tar.gz)解压后会生成3个文件夹
apps
common
mcu

mcu部分编译

我们首先进入mcu文件内,并新建GCC的路径
命令:

cd mcu
mkdir -p common/tools/GCC/MIPS/4.9.2/linux

将下载的GCC MIPS cross-compiler v4.9.2 解压
生成文件夹mips-mti-elf
二级文件夹2016.05-08
进入mips-mti-elf 使用命令

cp -r 2016.05-08/* ../mcu/common/tools/GCC/MIPS/4.9.2/linux

然后即可编译,使用命令

./m "TK_MD_BASIC(LWTG_TB_8765).mak" new

其中""内的内容与mcu\make\projects 内的工程名相关

需要利用perl脚本将文件重命名并放到mcu\temp_modem 目录内方便copy

perl CODE_path/device/mediatek/build/build/tools/modemRenameCopy.pl ./ "TK_MD_BASIC(LWTG_TB_8765).mak"

其中CODE_path 为主代码存放的路径(可以是相对路径)
TK_MD_BASIC(LWTG_TB_8765).mak,与上述引号内的内容相同
执行完成后会生成文件夹temp_modem
以上mcu部分编译完成

app部分编译

在mk_modem路径下输入以下命令进入到app目录下

cd mcu

将之前解压并打好补丁的Android NDK复制到apps\NDK目录下

cp -r ../android-ndk-r14b ./NDK

然后进行编译

./build.sh clean,build,pack all GEN93_USER

其中GEN93_USER 与文件夹内apps\gen_config的文件名称相关
编译后会生成 XXXXXX_rel.tar.bz2
将其解压会生成rel 文件夹

tar -jxvf GEN93_USER_rel.tar.bz2 ./

主代码编译

该部分在vendor\mediatek\release_note\MT8765\ReleaseNote_for_MT8765_alps-mp-s0.mp1.rc.xlsx
文档的readme页有详细说明,参考如下
readme

编译前准备

到主代码目录(CODE_path)下
CODE_path/vendor/mediatek/proprietary
新建文件夹:modem (名称必须一样)

将device/mediatek/build/build/tools/modem/modem_Android.mk 文件复制到新建的文件夹内,并重命名Android.mk
命令如下

CODE_path需要根据自己的路径修改

cd CODE_path/vendor/mediatek/proprietary/modem
cp -f device/mediatek/build/build/tools/modem/modem_Android.mk ./Android.mk

命令中的CODE_path 为指示符,需要根据自己的路径修改

然后新建文件夹,文件夹的名称与CODE_path/device/ c o m p a n y / {company}/ company/{project}/ProjectConfig.mk文件内的CUSTOM_MODEM后面的名称一模一样且区分大小写
例如我的文件路径为:device\mediateksample\tb8765ap1_bsp_1g_k419\ProjectConfig.mk

CUSTOM_MODEM = mt6739_sp_lwtg_tb_umoly0164_prod
故我新建的文件夹名称为:mt6739_sp_lwtg_tb_umoly0164_prod
新建文件夹后,进入该文件夹,将之前生成的modem文件全部copy到当前文件夹,命令为:

mk_modem 需要根据自己的路径修改

cp -R mk_modem/mcu/temp_modem/* ./
cp -R mk_modem/app/rel/* ./

其中mk_modem 为之前新建的mk_modem文件夹路径 可以为绝对路径,也可以是相对路径,需要根据自己的路径修改
然后到CODE_path路径,开始编译

source build/envsetup.sh

lunch

42

make -j8 2>&1 |tee build.log

lunch后会出现类似如下界面

 34. full_tb8765ap1_64_bsp-eng
 35. full_tb8765ap1_64_bsp-user
 36. full_tb8765ap1_64_bsp-userdebug
 37. full_tb8765ap1_bsp_1g-eng
 38. full_tb8765ap1_bsp_1g-user
 39. full_tb8765ap1_bsp_1g-userdebug
 40. full_tb8765ap1_bsp_1g_k419-eng
 41. full_tb8765ap1_bsp_1g_k419-user
 42. full_tb8765ap1_bsp_1g_k419-userdebug

选择合适的项目 我这里要编译的项目是full_tb8765ap1_bsp_1g_k419-userdebug 所以我选择42
如果知道自己要编译的名称可以直接使用

lunch full_tb8765ap1_bsp_1g_k419-userdebug

make后面跟的-j8表示8线程编译,如果CPU小于8核心需要减小。再后面的命令代表将编译的log输出到build.log内,方便查看编译报错。

PS:
编译时一定要确定自己的代码适合哪个工程,别选择错误,导致不能编译

以上,编译完成

后记

记录一下修改swap空间

free -m

sudo dd if=/dev/zero of=/home/swapfile count=32768 bs=1M
dd if=/dev/zero of=/home/swapfile(文件位置) count=32768 bs=1M


sudo chmod 600 /home/swapfile
chmod 600 /home/swapfile(文件位置)
sudo mkswap /home/swapfile
mkswap /home/swapfile(文件位置)


sudo swapon /home/swapfile
swapon /home/swapfile(文件位置)

修改
sudo vim /etc/fstab
/home/swapfile none swap sw 0 0

附上百度网盘GCC、NDK下载链接

链接:https://pan.baidu.com/s/1dYsJFmvY6398uVQbrDYDIA
提取码:MTK1
建议先校验后再解压使用

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值