前言
MTK是联发科技股份有限公司的英文简称,英文全称叫MediaTek。联发科技股份有限公司,创立于公元1997年,是世界顶尖的IC专业设计公司,位居全球消费性IC片组的领航地位。产品领域覆盖数码消费、数字电视、光储存、无线通讯等多大系列,是亚洲唯一连续六年蝉联全球前十大IC设计公司唯一的华人企业,被美国《福布斯》杂志评为“亚洲企业50强”。联发科技作为全球IC设计领导厂商,专注于无线通讯及数位媒体等技术领域。公司提供的晶片整合系统解决方案,包含无线通讯、高解析度数位电视、光储存、高解析度DVD等相关产品。
在进行MTK开发前,需要有些准备工作要做,比如环境的搭建,刷机、调试等工具的准备,编译流程与编译指令的熟悉,如何刷机等,下面一一介绍。
环境工具准备
我们的开发方式是在windows下编写代码、刷机、log信息跟踪等,而代码编译在linux 下进行
linux编译环境:ubantu,Linux ubuntu6 3.11.0-26-generic
window下工具
1、首先需要安装MT65xx_Drivers,这样PC才能发现MTK设备,这是刷机需要的
2、其次需要添加adb路径环境变量到path,这样才能在命令行下进行adb调试
3、打开刷机工具SP_Flash_Tool,可以全部刷与对部分分区刷机,注意左边勾选的选项
首先选择scatter这个文件,然后点download,然后再将板子重新上电,这样就好开始刷机
其中各选项的含义大概介绍一下:
preloader:就是pre-loader,俗称预装载器,是一上电就要运行的东东
lk:是linux kernel的简称,就是linux内核嘛,我们都知道,不过这个是个很干净的东西,就是个纯内核
boot:是vmlinux与设备树、根文件系统的集合,这才是真正意义上的linux内核
recovery:这是有关系统恢复的一个分区
其它的像tee、system则是跟系统相关的分区,安卓就在system分区下,而安卓app则安装在userdata下
其次需要简单了解下bootloader启动过程
分两个阶段,一个是pre-loader加载lk(u-boot)阶段,另一个是lk加载kernel阶段。
设备上电起来后,跳转到Boot ROM(不是flash)中的boot code中执行把pre-loader加载起到ISRAM,
因为当前DRAM(RAM分SRAM跟DRAM,简单来说SRAM就是cache,DRAM就是普通内存)还没有准备好,
所以要先把pre-loader 加载到芯片内部的ISRAM(Internal SRAM)中;pre-loader初始化好DRAM后就将lk
从flash中加载到DRAM中运行;然后解压bootimage成ramdisk跟kernel并载入DRAM中,初始化dtb;
代码编译
首先初始化环境变量、然后lunch选择选项、最后进行编译
source build/envsetup.sh
lunch(选择选项)
make bootimage -j8
如下是lunch弹出的选项,其中eng是开发时的选项,userdebug是带调试信息的,user是发布版本时的选项
输入选项的数字即可,然后在进行编译
编译指令
可进行部分编译或者全部编译,不过全部编译比较耗时,所以一般情况下只选择修改了的部分进行编译,相关指令如下:
make //全部编译
#################################################################
make pl //只编译preloader
make lk //只编译lk
make bootimage //只编译内核/boot.img(包含kernel、dts、rootfs、init.**.rc、sepolicy下的te权限文件)
make dtboimage //只编译dtbo
make systemimage //只编译system.img(包含hal,jni,framework)
make userdataimage-nodeps //只编译userdata.img
这些指令后面都可以带参数,比如:
make bootimage -j8 //表示同时用8个线程编译内核
make -j8 lk 2>&1 | tee lk.log //只编译lk ,并重定向输出log到lk.log,2>&1是 将2(输出)重定向输出到1(输入)
//一般编译system.img比较耗时,其它编译(boot,pl,lk)等都是很快的。
//lk是一个功能及其强大的bootloader,不过目前只支持arm和x86平台。
程序下载
打开SP_Flash_Tool工具,选择对应的scatter文件,然后选择需要下载的部分,最后点击Download,正常的话板子重新上电就可以下载,下载成功会弹出Download Ok界面
最后就可以用adb进行各种操作了
进入adb模式:adb shell;
重启系统:adb reboot
adb操作就不再详细介绍了,因为不熟!