编译前请确认内存+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 表示你下载的芯片的名称
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页有详细说明,参考如下
编译前准备
到主代码目录(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
建议先校验后再解压使用