1. 如果需要定制GPIO口呢,需要使用mediatek/dct/DrvGen.exe工具,点击Open,选择mediatek/custom/project_dir/kernel/dct/dct/codegen.dws文件,点击Edit,将出现如图所示的一个窗口:
2. 中断设置,你参考下代码TP的中断设置 medtek/custom/common/kernel/tpuchpanel/S3202 你看下 probe里面 就是一个初始化mt_set_gpio还有就是中断注册mt65xx_eint
3. 函数宏DEVICE_ATTR内封装的是__ATTR(_name,_mode,_show,_stroe)方法,_show表示的是读方法,_stroe表示的是写方法。
当我们将数据 echo 到接口中时,在上层实际上完成了一次 write 操作,对应到 kernel ,调用了驱动中的 “store”。同理,当我们cat 一个接口时则会调用 “show” 。到这里,只是简单的建立了 android 层到 kernel 的桥梁,真正实现对硬件操作的,还是在 "show" 和 "store" 中完成的
在内核中, sysfs 属性一般是由 __ATTR 系列的宏来声明的,如对设备的使用 DEVICE_ATTR ,对总线使用 BUS_ATTR ,对驱动使用 DRIVER_ATTR ,对类别(class)使用 CLASS_ATTR, 这四个高级的宏来自于 <include/linux/device.h>, 都是以更低层的来自 <include/linux/sysfs.h> 中的 __ATTR/__ATRR_RO 宏实现。
4. 权限问题 find . -name "init.rc" | xargs -n 10 grep -i "mtgpio" --color
./mediatek/custom/banyan_addon_x86/factory/init.rc: chmod 0666 /dev/mtgpio
5. cust_gpio_boot.h 这个就是配置后的gpio
关于event及input子系统
6. 在下面的H:中可以看到对应的eventxx。cat /proc/bus/input/devices
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="mtk-tpd-kpd"
P: Phys=
S: Sysfs=/devices/virtual/input/input5
U: Uniq=
H: Handlers=event5
B: PROP=0
B: EV=3
B: KEY=1000 40000800 0 0 0 0
ll /dev/input
crw-rw---- root input 13, 64 2010-01-02 04:31 event0
crw-rw---- root input 13, 65 2010-01-02 04:31 event1
crw-rw---- root input 13, 66 2010-01-02 04:31 event2
crw-rw---- root input 13, 67 2010-01-02 04:31 event3
crw-rw---- root input 13, 68 2010-01-02 04:31 event4
crw-rw---- root input 13, 69 2010-01-02 04:31 event5
crw-rw---- root input 13, 63 2010-01-02 04:31 mice
crw-rw---- root input 13, 32 2010-01-02 04:31 mouse0
关于Android getevent 的值定义在kernel/include/linux/input.h 里,结合我们实际项目中echo 0/1 > sim_pinde event如下:
type code value
0002 0009 00000001 EV_REL REL_MISC value
0000 0000 00000000 EV_SYNC
0002 0009 00000002 EV_REL REL_MISC value
0000 0000 00000000 EV_SYNC ABS_X
可以打开/dev/input/的设备,读取鼠标键盘的event值。
需要设置uart奇偶校验。要不然数据不对。而且要设置成8736。偶校验。
TermiosTemp.c_cflag &= ~PARODD; // Enable even parity type.
input子系统 kernel\documentation\input\input-programming.txt
init.rc
关于开机启动init.rc E:\BaiduYunDownload\materials\20151104sourcecode\alps\system\core\init\readme.txt
init脚本的关键字可以参考init进程的system/core/init/keyword.h文件。
init.rc的使用方法,可以参考说明文件system/core/init/readme.txt。
init进程代码的路径:system/core/init/init.c
在Android中使用启动脚本init.rc,可以在系统的初始化过程中进行一些简单的初始化操作。这个脚本被直接安装到目标系统的根文件系统中,被 init可执行程序解析。使用方法参考system/core/init/readme.txt,关键字参考system/core/init/keyword.h。
串口模拟与modem交互
rx tx信号的高电平是I/O口拉起来的,IO是一个单独的线,IO口是modem拉起来的vcc,modem然后会发reset,reset会一直拉高,除非交互发生错误了,会发第二个reset。所以 rx tx会比rst的信号起来的早,也下降的晚。
tx默认是高电平,rx如果tx环回过来或者有I/O接上去的话,就会拉高,rx默认是被IO拉到低电平。
mediatek\kernel\drivers\uart\uart.c mtk_uart_set_baud中联发科的处理逻辑:custom_divisor[31] == 1, then custom_divisor[30..0] == custom baud rate
uart_ioctl case TIOCSSERIAL:->uart_set_info->uart_change_speed->mtk_uart_set_termios->mtk_uart_set_baud