美文网首页
mt6735开发板驱动学习

mt6735开发板驱动学习

作者: 13aaec9fb31b | 来源:发表于2017-03-22 23:53 被阅读791次

    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开发板驱动学习

          本文链接:https://www.haomeiwen.com/subject/owganttx.html