一、引子
近期接收到工作任命,为MTK平台项目做开发准备。在现有SDK的基础上,对MTK平台架构做了一定程度上的研究,从部分架构上看确实与RK平台大相径庭,但同样也有许多相似的点。研究学习期间感受良多,遂作记录,以GPIO的配置为例,来看看MTK平台上对GPIO的调试方法。
二、开发环境
OS:Android14
Platform:Genio 720(MT8391)
Linux Version:6.1
SDK Version: 略
三、配置方法
1、涉及的源文件
首先在下使用的SDK采用VF架构,平台对应dts如下路径:
android14/kernel/kernel_device_modules-6.1/arch/arm64/boot/dts/mediatek/aiot8391p2_64_bsp.dts
而MTK对于所有GPIO的配置,是在cust.dtsi文件中实现,该文件作为头文件被包进DTS中,其路径如下例子所示:
android14/out/target/product/aiot8391p2_64_bsp/obj/KERNEL_OBJ/kernel/kernel_device_modules-6.1/arch/arm64/boot/dts/aiot8391p2_64_bsp/cust.dtsi
cust.dtsi
/*
* Generated by MTK SP DrvGen Version: 3.5.160809 for MT8189.
* 2025-11-25 14:16:06
* Do Not Modify The File.
* Copyright Mediatek Inc. (c) 2016.
*/
/*************************
* ADC DTSI File
*************************/
/*************************
* CLK_BUF DTSI File
*************************/
/*************************
* I2C DTSI File
*************************/
/*************************
* GPIO DTSI File
*************************/
&gpio_usage_mapping {
};
&gpio{
gpio-init-default = <0 0 0 0 1 0 1>,
<1 0 0 0 1 0 1>,
<2 0 0 0 1 0 1>,
<3 0 0 0 1 0 1>,
<4 0 0 0 1 0 1>,
<5 0 0 0 1 0 1>,
<6 0 0 0 1 0 0>,
<7 0 0 0 1 0 0>,
<8 0 0 0 1 0 1>,
<9 0 0 0 1 0 1>,
<10 0 0 0 1 0 1>,
<11 0 0 0 1 0 1>,
<12 0 1 1 1 0 1>,
<13 0 1 0 1 0 1>,
<14 0 0 0 1 0 1>,
<15 0 0 0 1 0 1>,
<16 0 0 0 1 0 0>,
<17 0 0 0 1 0 0>,
<18 0 0 0 1 0 1>,
<19 0 0 0 1 0 1>,
<20 0 0 0 1 0 1>,
<21 0 0 0 1 0 1>,
<22 1 0 0 1 0 1>,
<23 1 0 0 1 0 1>,
<24 0 1 0 1 0 1>,
<25 1 0 0 1 0 1>,
<26 1 0 0 1 0 1>,
<27 0 0 0 1 0 0>,
<28 1 0 0 1 0 1>,
<29 1 0 0 1 0 1>,
<30 1 0 0 1 0 1>,
<31 1 0 0 1 1 1>,
<32 1 0 0 1 1 1>,
<33 0 0 0 1 0 1>,
<34 0 0 0 1 0 1>,
<35 0 0 0 1 0 1>,
<36 0 0 0 1 0 1>,
<37 0 0 0 1 0 1>,
<38 0 0 0 1 0 1>,
<39 1 0 0 1 0 1>,
<40 1 0 0 1 0 1>,
<41 1 0 0 1 0 1>,
<42 1 0 0 1 0 1>,
<43 1 0 0 1 1 1>,
<44 1 0 0 1 1 1>,
<45 1 0 0 1 0 1>,
<46 1 0 0 1 0 1>,
<47 1 0 0 1 0 1>,
<48 1 0 0 1 0 1>,
<49 1 0 0 1 0 1>,
<50 1 0 0 1 0 1>,
<51 2 0 0 1 0 1>,
<52 2 0 0 1 0 1>,
<53 2 0 0 1 0 1>,
<54 2 0 0 1 0 1>,
<55 1 0 0 1 0 1>,
<56 1 0 0 1 0 1>,
<57 1 0 0 1 0 1>,
<58 0 1 0 1 0 1>,
<59 1 0 0 1 0 1>,
<60 1 0 0 1 0 1>,
<61 1 0 0 1 0 1>,
<62 1 0 0 1 0 1>,
<63 1 0 0 1 0 1>,
<64 1 0 0 1 0 1>,
<65 1 0 0 1 0 1>,
<66 1 0 0 1 0 1>,
<67 1 0 0 1 0 1>,
<68 1 0 0 1 0 1>,
<69 0 0 0 1 0 1>,
<70 0 0 0 1 0 1>,
<71 0 0 0 1 0 1>,
<72 0 0 0 1 0 1>,
<73 0 0 0 1 0 1>,
<74 0 0 0 1 0 1>,
<75 0 1 1 1 0 1>,
<76 0 0 0 1 0 1>,
<77 0 0 0 1 0 0>,
<78 0 0 0 1 0 0>,
<79 0 1 1 1 0 0>,
<80 0 0 0 1 0 0>,
<81 0 1 0 1 0 1>,
<82 0 1 0 1 0 1>,
<83 1 0 0 1 0 1>,
<84 1 0 0 1 0 1>,
<85 1 0 0 1 0 1>,
<86 1 0 0 1 0 1>,
<87 0 1 0 1 0 1>,
<88 1 0 0 1 1 1>,
<89 1 0 0 1 0 1>,
<90 1 0 0 1 0 1>,
<91 1 0 0 1 0 1>,
<92 1 0 0 1 1 1>,
<93 1 0 0 1 1 1>,
<94 1 0 0 1 0 1>,
<95 1 0 0 1 0 1>,
<96 1 0 0 1 0 1>,
<97 1 0 0 1 0 1>,
<98 1 0 0 1 0 1>,
<99 1 0 0 1 0 1>,
<100 1 0 0 1 0 1>,
<101 1 0 0 1 0 1>,
<102 1 0 0 1 0 1>,
<103 0 0 0 1 0 0>,
<104 0 0 0 1 0 0>,
<105 0 0 0 1 0 0>,
<106 0 0 0 1 0 0>,
<107 0 0 0 1 0 0>,
<108 0 0 0 1 0 1>,
<109 0 0 0 1 0 1>,
<110 0 0 0 1 0 1>,
<111 0 0 0 1 0 1>,
<112 0 0 0 1 0 1>,
<113 0 0 0 1 0 1>,
<114 0 0 0 1 0 1>,
<115 1 0 0 1 0 1>,
<116 1 0 0 1 0 1>,
<117 1 0 0 1 0 1>,
<118 1 0 0 1 0 1>,
<119 1 0 0 1 0 1>,
<120 1 0 0 1 0 1>,
<121 1 0 0 1 0 1>,
<122 1 0 0 1 0 1>,
<123 1 0 0 1 0 1>,
<124 1 0 0 1 0 1>,
<125 1 0 0 1 0 1>,
<126 1 0 0 1 0 1>,
<127 1 0 0 1 0 1>,
<128 1 0 0 1 0 1>,
<129 1 0 0 1 0 1>,
<130 1 0 0 1 0 1>,
<131 1 0 0 1 0 1>,
<132 1 0 0 1 0 1>,
<133 1 0 0 1 0 1>,
<134 1 0 0 1 0 1>,
<135 0 0 0 1 0 1>,
<136 1 0 0 0 0 1>,
<137 1 0 0 1 0 1>,
<138 1 0 0 1 0 1>,
<139 1 0 0 1 0 1>,
<140 1 0 0 1 0 1>,
<141 1 0 0 1 0 1>,
<142 1 0 0 1 0 1>,
<143 1 0 0 1 0 1>,
<144 1 0 0 1 0 1>,
<145 1 0 0 1 0 1>,
<146 1 0 0 1 0 1>,
<147 1 0 0 1 0 1>,
<148 1 0 0 1 0 1>,
<149 1 0 0 1 0 1>,
<150 1 0 0 1 0 1>,
<151 1 0 0 1 0 1>,
<152 1 0 0 1 0 1>,
<153 1 0 0 1 0 1>,
<154 1 0 0 1 0 1>,
<155 1 0 0 1 0 1>,
<156 1 0 0 1 1 1>,
<157 1 0 0 1 1 1>,
<158 1 0 0 1 1 1>,
<159 1 0 0 1 1 1>,
<160 1 0 0 1 1 1>,
<161 1 0 0 1 1 1>,
<162 1 0 0 1 0 1>,
<163 1 0 0 1 1 1>,
<164 1 0 0 1 1 1>,
<165 1 0 0 1 1 1>,
<166 1 0 0 1 1 1>,
<167 1 0 0 1 0 1>,
<168 1 0 0 1 0 1>,
<169 1 0 0 1 0 1>,
<170 1 0 0 1 0 1>,
<171 1 0 0 1 0 1>,
<172 1 0 0 1 0 1>,
<173 1 0 0 1 0 1>,
<174 1 0 0 1 0 1>,
<175 1 0 0 1 0 1>,
<176 1 0 0 1 0 1>,
<177 1 0 0 1 0 1>,
<178 1 0 0 1 0 1>,
<179 1 0 0 1 0 1>,
<180 1 0 0 1 0 1>,
<181 0 0 0 0 0 0>,
<182 1 0 0 0 0 1>;
};
/*************************
* EINT DTSI File
*************************/
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
/*************************
* MD1_EINT DTSI File
*************************/
/*************************
* PMIC DTSI File
*************************/
/*************************
* POWER DTSI File
*************************/
/*************************
* KPD DTSI File
*************************/
上面是在下临时编译生成的cust.dtsi,可以看得到其中基本上罗列了0~182个GPIO的配置表,具体的定义我们在下文一一解析。从该文件的路径上不难看出,该文件是作为编译生成文件来协调DTS的配置的,由对应的.dws文件编译生成,而.dws文件可通过SP DrvGenTool来配置修改,也可以通过编辑器直接在.dws上改动。对应的.dws配置文件,路径上如下例子所示:
android14/vendor/mediatek/proprietary/tools/dct/dws/mt8189/aiot8391p2_64_bsp.dws
当然,本次讨论的主体是以SP DrvGenTool工具作为主体来调试GPIO。
2、工具的使用

如上截图所示,是当前在下使用的较新版本的SP DrvGenTool,相关功能在下做了些简单的笔记:

我们需留意的几个控制项:
EintMode:表示是否作为中断引脚来使用
Def.Mode:代表的是GPIO的默认的模式,比如是作为普通的GPIO来使用,还是作为复用的GPIO来做其它的用途。
InPull En:使用上下拉
InPull SelHigh:这一项勾选则为上拉,反之不勾选则配置成下拉模式
Def.Dir:配置输出模式还是输入模式
OutHigh:指示GPIO口作为普通IO时,输出的电平是高电平还是低电平
VarName123:这个代表变量名,即GPIO的别名
SMT:代表是否使能斯密特触发器
IES:代表是否使能输入,控制输入有效性
通过上述的各项功能,可以配置每个GPIO的状态功能。
那么,修改后的配置,是怎样呈现在cust.dtsi文件中呢?
我们看如下解析:
以cust.dtsi中的GPIO182为例,有
<182 1 0 0 0 0 1>;
第一个值182,代表GPIO的编号
第二个值1,代表是否是作为中断模式来使用,配置成中断则为0,反之非中断脚则为1
第三个值0,代表GPIO的方向,输出则是1,输入则为0
第四个值0,代表GPIO的电平,高电平为1,低电平为0
第五个值0,表示是否使能上下拉,enable则为1,disable则为0
第六个值0,表示上下拉模式的选择,上拉为1,下拉为0
第七个值1,表示是否使能斯密特触发器,enable为1,disable为0
参照上述内容,完成对MTK GPIO的简单配置修改和应用是没有问题的,具体的配置内容因需求而异。
参考资料
1、mtk平台编译出来的cust.dtsi有什么作用-CSDN博客
2、MTK平台GPIO的使用与调试_mtk dws-CSDN博客
3、MTK(mt6797)-DTS修改---I2C设备(Kernrl3.18)_mediatek i2c dev-CSDN博客
386

被折叠的 条评论
为什么被折叠?



