mt6735开发板驱动学习

Content-Type: text/x-zim-wiki

Wiki-Format: zim 0.4

Creation-Date: 2017-02-22T10:30:13+08:00

====== mt6735开发板驱动学习 ======

==== 编译源代码 ====

所谓的编译源代码  应该主要是指工程源代码(即手机厂商生成整个rom的代码,包括内核,驱动,中间层,各个不同芯片厂商的不同代码,framework,以及应用等等)  这个源代码比谷歌发布的 要更丰富  更完善  很多对象谷歌的那套源代码都是没有实现的 是空的

不知道是不是这样,个人理解,因为谷歌的源码除了生成模拟器,好像其他感觉都没实现(例如很多在模拟器上无法实现的)

第二,编译源码一般是为了获取隐藏api,因为sdk提供的api有些没有提供,但是确实存在,在源码下能编译通过

其次,手机厂商是肯定要编译源码的

还有些啥  一些发烧友可能也会编译改些东西玩玩

源码里面分为多个文件夹 vender里面就是你需要添加的东西,一般不需要裁减,除非你想去掉一些系统的东西,另外kernel 驱动等都是需要各厂家自己定制的。

源码编译后除了得到系统文映像件system.img 和 userdate.img 外,我在有些资料上看到还有 SDK 工具的产生, SDK 工具是编译源码生成、

==== android源码编译完成之后 ====

Android源码编译完成之后,在根目录下会有一个out目录生成,如果我们想要运行虚拟机的话,需要配置一下环境变量.

首先我们使用下面的命令打开配置环境变量的文件:

gedit ~./bashrc

在这个文件的最后,添加如下代码:

export ANDROID_PRODUCT_OUT=~/android/out/target/product/generic

ANDROID_PRODUCT_OUT_BIN=~/android/out/host/linux-x86/bin

export PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN}:${ANDROID_PRODUCT_OUT};

其中,ANDROID_PRODUCT_OUT和ANDROID_PRODUCT_OUT_BIN填写的是自己的对应的文件的目录.

填写完成之后,保存,使用下面的命令更新环境变量.

source  [[~/.bashrc]]

下面就可以使用emulator启动安卓虚拟机了.

启动Android虚拟机需要四个文件,__zImage__,system,img,userdata.img和randisk.img,其中第一个是Linux内核镜像文件,后面三个是Android系统镜像文件

1,准备开发板的驱动

2,放进源码内核

3,编译源码生成底包

4刷机

boot.img  内核镜像

system.img

=== ramdisk 软盘在android中的使用 ===

http://blog.csdn.net/wh_19910525/article/details/7536047

ramdisk中包含一些对于启动android的很重要的文件,比如内核启动完后,加载的第一个进程init,一些重要的配置文件等,总之它控制着整个android的启动。

ramdisk的使用有两种方法:1,编译进内核;2,将ramdisk单独烧写

recovery.img是设备进入recovery模式时所加载的镜像。recovery模式就是用来更新系统的,我们可以认为我们的设备具有两个系统。一个是正常的系统,它由boot.img、system.img、ramdisk.img和userdata.img等组成,另外一个就是recovery系统,由recovery.img组成

由于recovery.img和boot.img都是用来启动系统的,因此,它们的内容是比较类似,例如都包含有Kernel及其启动参数、Ramdisk,以及可选的BootLoader第二阶段。

=== 刷机烧录 ===

out/target/product/lentk6735_65c_l1/lk.bin

out/target/product/lentk6735_65c_l1/recovery.img

out/target/product/lentk6735_65c_l1/boot.img

out/target/product/lentk6735_65c_l1/logo.bin

out/target/product/lentk6735_65c_l1/system

一般 Android 系统都有两个分区 /boot 和 /recovery。这两个分区都可以引导系统

recovery卡刷相当于ghost,但是他的主要用途是更新系统rom,方便备份和格式化

fastboot可以简单的理解是一个电脑的Bios。一般__线刷底包__才会用到

=== 驱动目录 ===

[[~/mt6753/alps/kernel-3.10/drivers/misc/mediatek/tooan]]

编译

make -j8 没编到驱动

make bootimg试试

[[~/mt6753/alps/out/target/product/lentk6735_65c_l1/obj/KERNEL_OBJ/drivers/misc/mediatek]]

没有tooan目录

DTC    arch/arm64/boot/dts/lentk6735_65c_l1.dtb

Warning (ranges_format): /soc has empty "ranges" property but its #address-cells (1) differs from / (2)

Warning (ranges_format): /soc has empty "ranges" property but its #size-cells (1) differs from / (2)

CAT    arch/arm64/boot/Image.gz-dtb

make[1]: Leaving directory `/home/mpa/mt6753/alps/kernel-3.10'

Target boot image: out/target/product/lentk6735_65c_l1/boot.img

=== 仿照系统自带的spi来写自己的驱动 ===

在上一级目录的makefile文件添加tooan模块

===== 添加tooan驱动过程 =====

[[~/mt6735/alps/kernel-3.10/drivers/misc/mediatek/tooan]]

编译

make -j8 没编到驱动

make bootimg试试

[[~/mt6735/alps/out/target/product/lentk6735_65c_l1/obj/KERNEL_OBJ/drivers/misc/mediatek]]

makefile 注释我用//竟然没报错

把系统自带的spi改错,看编译报错与否?

#add by tony

试试obj-y += tooan/

发现还是不报错看来是没有编到

把obj-y +=tooan/放在第一行

可以编到

SP_Flash_Tool_exe_Linux_v5.1620.00.100 刷机

{{./pasted_image.png}}

开发板先关机,用root权限执行

root@mpa:/home/mpa/Tools/mt6735_5.1/tools/SP_Flash_Tool_exe_Linux_v5.1620.00.100# ./flash_tool

执行shell脚本运行flash tool

点击download

然后按下音量键+和电源进入fastboot模式刷底包

mpa@mpa:~$ lsusb

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub

Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub

Bus 003 Device 003: ID 0000:0538

Bus 001 Device 003: ID 5986:02d5 Acer, Inc

__Bus 001 Device 028: ID 0e8d:2003 MediaTek Inc. __

拔掉手机后再试试发现 最后一个没有说明那个是手机的编号

在源码目录下编译过源码后可以用adb命令,其他目录不行

root@mpa:/home/mpa/mt6735/alps# adb shell

* daemon not running. starting it now on port 5037 *

* daemon started successfully *

root@lentk6735_65c_l1:/ #

然后可以在源码package/apps目录下TooanFp目录下mm编译apk后

通过adb install 命令安装

==== 安卓6.0 mtk6735 管脚配置 ====

[[~/mt6735/alps/kernel-3.10/arch/arm/boot/dts/]]mt6735-pinfunc.h

==== 安卓5.1 mtk6735 管脚配置 ====

[[/home/mpa/mt6735/alps/kernel-3.10/drivers/misc/mediatek/mach/mt6735/lentk6735_65c_l1/dct/dct]][[~/mt6735/alps/kernel-3.10/arch/arm/boot/dts/|/]]mt6735-pinfunc.h

#define PINMUX_GPIO65__FUNC_GPIO65 (MTK_PIN_NO(65) | 0)

#define PINMUX_GPIO65__FUNC___SPI_CS__A (MTK_PIN_NO(65) __| 1)__

#define PINMUX_GPIO65__FUNC_EXT_FRAME_SYNC (MTK_PIN_NO(65) | 2)

#define PINMUX_GPIO65__FUNC_I2S3_MCK (MTK_PIN_NO(65) | 3)

#define PINMUX_GPIO65__FUNC_KROW2 (MTK_PIN_NO(65) | 4)

#define PINMUX_GPIO65__FUNC_GPS_FRAME_SYNC (MTK_PIN_NO(65) | 5)

#define PINMUX_GPIO65__FUNC_PTA_RXD (MTK_PIN_NO(65) | 6)

#define PINMUX_GPIO65__FUNC_DBG_MON_A22 (MTK_PIN_NO(65) | 7)

#define PINMUX_GPIO66__FUNC___SPI_CK__A (MTK_PIN_NO(__66) | 1__)

#define PINMUX_GPIO67__FUNC_SPI_MIA (MTK_PIN_NO(67) | 1)

#define PINMUX_GPIO68__FUNC_SPI_MOA (MTK_PIN_NO(68) | 1)

#define PINMUX_GPIO69__FUNC_DISP_PWM (MTK_PIN_NO(69) | 1)

#define PINMUX_GPIO69__FUNC_GPIO69 (MTK_PIN_NO(69) | 0)

#define PINMUX_GPIO69__FUNC_DISP_PWM (MTK_PIN_NO(69) | 1)

#define PINMUX_GPIO69__FUNC_PWM1 (MTK_PIN_NO(69) | 2)

#define PINMUX_GPIO69__FUNC_LTE_MD32_JTAG_TRST (MTK_PIN_NO(69) | 3)

#define PINMUX_GPIO69__FUNC_TDD_TRSTN (MTK_PIN_NO(69) | 4)

#define PINMUX_GPIO69__FUNC_ANT_SEL7 (MTK_PIN_NO(69) | 5)

#define PINMUX_GPIO69__FUNC_DM_JTINTP (MTK_PIN_NO(69) | 6)

==== 修改framework的activity/phoneWindowManager/SystemServer/Settings ====

=== 然后make -j8 systemimage ===

frameworks/base/core/java/android/app/Activity.java:1265: error: cannot find symbol

String lastPackage = Settings.System.getString(getContentResolver(), __Settings.System.TOOAN_LAST_LOCK_APP_PACKAGE_NAME__);

^

symbol:  variable TOOAN_LAST_LOCK_APP_PACKAGE_NAME

location: class System

frameworks/base/core/java/android/app/Activity.java:1266: error: cannot find symbol

int appLockAble = Settings.System.getInt(getContentResolver(), Settings.System.TOOAN_USEDTO_APPLOCK, 0);

^

symbol:  variable TOOAN_USEDTO_APPLOCK

location: class System

frameworks/base/core/java/android/app/Activity.java:1276: error: cannot find symbol

String appString = Settings.System.getString(getContentResolver(), Settings.System.TOOAN_NEEDLOCKAPP_PACKAGE_NAME);

^

symbol:  variable TOOAN_NEEDLOCKAPP_PACKAGE_NAME

location: class System

frameworks/base/core/java/android/app/Activity.java:1286: error: cannot find symbol

if (Settings.System.getInt(getContentResolver(), Settings.System.TOOAN_USEDTO_SCREENLOCK, 0) == 1) {

^

symbol:  variable TOOAN_USEDTO_SCREENLOCK

location: class System

Note: Some input files use or override a deprecated API.

Note: Recompile with -Xlint:deprecation for details.

Note: Some input files use unchecked or unsafe operations.

Note: Recompile with -Xlint:unchecked for details.

4 errors

make: *** [out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes-full-debug.jar] Error 41

#### make failed to build some targets (04:40 (mm:ss)) ####

setting里没有定义__TOOAN_LAST_LOCK_APP_PACKAGE_NAME__

=== 在设置里定义自己的key ,以后就可以通过key来存一些  设置偏好 ===

Settings数据存放在com.Android.providers.settings/databases/settings.db 中

数据库中数据的默认数据在frameworks/base/packages/SettingsProvider/res/values/defaults.xml中定义,如果要在数据库中添加一个新的字段,则可用如下步骤:

1、在defaults.xml中为新加的数据定义一个默认值(当然也可在代码中直接给定)

2、在frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.Java中的loadSystemSettings()方法中加入新字段的添加代码,如下:

loadIntegerSetting(stmt, "homescreen_switch_effict",

R.integer.def_homescreen_switch_effict);

3、重新编译一个SettingsProvider.apk,再替换原来的SettingsProvider.apk

4、用Settings.System.putInt();Settings.System.getInt()来设置和取得设置的值

通常很多定制系统或者与系统相关的应用都需要查询/设置Settings(设置)里边的值,比如系统亮度,休眠时间,锁屏之类的系统设置等,主要通过SettingsProvider来查询/设置,前提是要知道所要修改的值的数据类型与字符串代表的name。

对应的name值与数据类型在./ics/frameworks/base/core/java/android/provider/Settings.java文件中

在frameworks/base/packages/SettingsProvider/src/com/android/providers/Settings.java定义,都是字符串常量。这样数据库中就形成了“属性--值”这样的映射存储

http://blog.csdn.net/sgmenghuo/article/details/46238009

刷机后发现系统很卡,点几下就重启

现在注释掉activity里添加的部分重新刷机试试

你可能感兴趣的:(mt6735开发板驱动学习)