Android驱动开发
文章平均质量分 68
零意@
RK3288_Android7.1驱动开发入门视频课程链接:https://edu.csdn.net/course/detail/27756带你快速入门Android/Linux驱动开发,熟悉开发流程,让驱动开发入门门槛更低!
Linux设备树dts快速入门视频教程:https://edu.csdn.net/course/play/27772
展开
-
Linux驱动调试i2c设备从地址的确定
有时候我们查看芯片的datasheet可以得到一个i2c的地址,但是我们直接使用它,配置到dts或者驱动当中使用,发现读取不到设备id或者i2c通讯异常,此时排查硬件没问题之后,就要看看这个i2c地址是否设置对了。比如我这里,i2c地址在datasheet写了两个,此时就不知道使用哪个了。其实,i2c地址主要由7bit的二进制数值组成,最低位是读写标志位,0表示写,1表示读,具体可看下图。所以我们在linux驱动中要取这个ic设备的从设备地址,就是0xA3或者0xA2右移一位得到,那就是0x51,原创 2021-01-08 11:41:25 · 4676 阅读 · 6 评论 -
调试wifi简单记录
##手动加载usb wifi驱动加载驱动insmod /system/8812au.v2.ko启动wlan0busybox ifconfig wlan0 up禁用wlan0busybox ifconfig wlan0 down卸载驱动rmmod 8812au###注意事项启动wlan0之前可以先使用ifconfig -a wlan0查看wlan0 节点是否存在,127|rk3399_mid:/ # ifconfig -a wlan0wlan0 Link encap:Ether原创 2020-07-25 09:41:24 · 1340 阅读 · 1 评论 -
蔡工RK系列Android驱动开发入门视频课程
百度网盘:原创 2019-11-10 00:36:52 · 2098 阅读 · 3 评论 -
rk3399_android7.1查看当前的ddr频率
rk3399_all:/ $ cat sys/kernel/debug/clk/clk_summary | grep sclk_ddrc sclk_ddrc 1 1 856000000 0 0原创 2020-07-01 19:00:57 · 1595 阅读 · 0 评论 -
HDMI CEC小结
HDMI CEC算是一个相当庞大的系统,想了解还要从HDMI接口信号啊、物理地址啊、逻辑地址啊等等HDMI基础的东西说起。不过可以简单的这么理解,在HDMI CEC最小系统里,所有通过HDMI连接在一起的设备(包括电视、DVD、机顶盒等等) 在物理连接上,各自的CEC的是全部连接在一起,可以看做,在一条CEC线(标准HDMI接头的第13个腿)上挂着所有的设备。而一条CEC具体传输的指令大致可以分为四部分:a。起始信号(一个3.7ms的低电平+一个0.8ms的高电平),算是为了告知设备一个指令的开始b.原创 2020-06-09 10:04:27 · 2840 阅读 · 0 评论 -
Android截屏指令
screencap -hscreencap -husage: screencap [-hp] [-d display-id] [FILENAME]-h: this message-p: save the file as a png.-d: specify the display id to capture, default 0.If FILENAME ends with .png it will be saved as a png.If FILENAME is not given, the r原创 2020-05-15 16:05:55 · 481 阅读 · 0 评论 -
MCLK和PCLK的区别与联系
PCLK:pixel clock, used for MCU camera sensor controller to captureeach pixel.MCLK:master clock for sensor logical chip.HSYNC and VSYNC used for MCU camera sensor controller to capture the pixels l...原创 2020-04-21 14:36:49 · 9006 阅读 · 0 评论 -
rk3399_android7.1调试lsm9ds1三合一sensor记录
硬件连接方面和i2c地址确认i2c地址:通过设置SDO_AG和SDO_M的高低电平来设置accel/gryo和mag I2C地址SDO_AG脚:为加速计和陀螺仪的设备地址(SA0)的最小有效位,拉低时i2c地址为0x6a;拉高时i2c地址为0x6b(当前状态为;置高,所以i2c地址是6b)。SDO_M脚:i2c磁强计的设备地址(SA0)的最小有效位,拉低时i2c地址为0x1c;拉高时i2c...原创 2020-03-17 12:03:56 · 1369 阅读 · 0 评论 -
USB接口的TP概率性不工作需重启才恢复问题定位
首先硬件确认usb口正常,供电正常之后;再确认以下几点:第一:拔插一下设备看串口打印或者使用命令lsusb是否识别到了TP设备的vid pid;[ 128.007361] usb 7-1.2: new full-speed USB device number 4 using ehci-platform[ 128.093165] usb 7-1.2: New USB device fou...原创 2019-12-19 10:46:16 · 1058 阅读 · 0 评论 -
Linux的tasklet函数详解
tasklet主要用在中断函数中。它对于中断处理特别有用,由于硬件中断必须尽快处理, 但大部分的数据管理可以延后到以后安全的时间执行。所以可以使用tasklet。tasklet的使用比较简单,只需要定义tasklet及其处理函数并将两者关联即可,在定义时可以采用两种形式。例子: struct tasklet_struct my_tasklet; Void my...原创 2019-12-09 17:33:18 · 3080 阅读 · 0 评论 -
RK3288_Android7.1写一个GPIO驱动控制LED灯亮灭
一、首先查看原理图,确定控制led的是哪个gpio从原理图上可以看到,连接到主控的gpio是GPIO5_B2,所有我们只需要拉高或者拉低就可以控制LED灯了。拉高GPIO5_B2可以使三极管Q10导通,这样LED D31就亮了;拉低GPIO5_B2可以使三极管Q9断开,使三极管Q8导通,这样LED D32就亮了。总结一下就是GPIO5_B2拉高亮红灯,拉低亮绿灯[开发板上焊接的是蓝灯]。驱...原创 2019-12-06 00:10:32 · 4604 阅读 · 1 评论 -
rk3399_android7.1调试USB蓝牙模块小结
背景:BT chip:RTL8761平台:RK3399KERNEL版本:kernel4.4Android版本:android7.1蓝牙框架结构Android4.2 之后采用 bluedroid 作为协议;整体由 bluetooth.apk,bluedroid ,libbt-vendor 三个 部 分 组 成 ; bluetooth.apk 作 为 蓝 牙 服 务 进 程 , 通 过 l...原创 2019-11-21 22:07:33 · 6199 阅读 · 4 评论 -
红外遥控NEC协议总结
一、协议特征8位地址和8位命令长度为了可靠,每次传输两遍地址(用户码)和命令(按键值)通过脉冲串之间的时间间隔来实现信号的调制(PPM)载波频率为38kHz每位的周期为1.12ms(低电平)或者2.25ms(高电平)二、NEC协议的典型脉冲链上图为NEC协议的典型脉冲链。协议规定低位首先发送。首先发送9ms+4.5ms的引导码,接下来是两字节用户码,第三字节是数据码,用来判断按键值...原创 2019-11-14 19:55:25 · 6077 阅读 · 3 评论 -
Linux驱动实现GPIO模拟I2C读写操作
一、关于i2c协议概述I2C总线协议只需要2根信号线即可完成数据的传输,这两根线分别是时钟线SCL和信号线SDA。I2C线上有且只有1个主设备Master和若干个从设备Slave,区别Master和Slave的标准是SCL,即谁是SCL的提供者,谁就是Master,而与SDA无关。这点尤其需要注意,发送SDA不能作为区别Master和Slave的标准。关于I2C总线再作以下说明:1-两条总线...原创 2019-11-08 15:29:01 · 3566 阅读 · 7 评论 -
gcc编译c文件生成可执行文件
假如要编译c文件test.c首先编写test.c文件:caizd@ubuntu:~/czd$ vi test.c#include <stdio.h>int main(int argc, char** argv){ printf("Hello World!\n"); return 0;}1、最简单的操作:gcc test.c 会在当前路径下生成a.out2、分...原创 2019-11-03 18:22:00 · 12090 阅读 · 2 评论 -
Linux内核使用的字符串转整形数和16进制数
kstrtouint函数定义在文件kernel/lib/kstrtox.c中,原形如下:233 /**234 * kstrtoint - convert a string to an int235 * @s: The start of the string. The string must be null-terminated, and may also236 * include ...原创 2019-10-21 15:33:44 · 8992 阅读 · 0 评论 -
Linux怎么查看编译ARM平台程序的编译器arm-linux-gcc
问题:1、“交叉编译工具链肯定有个安装目录的”是说在Ubuntu上装有多个不同版本的arm-linux-gcc编译器,还是说一个版本的交叉编译器安装时会生成多个安装目录?还是皆而有之?2、怎么查看我的Ubuntu上已经安装的交叉编译器(arm-linux-gcc)?3、如何在makefile中指定编译用的编译器?我给你一个makefile,你可以告诉我如何在makefile中指定吗?4、工...原创 2019-10-14 10:50:16 · 4772 阅读 · 0 评论 -
示波器上1G/S 100MHZ的含义
1G/S :示波器能够使用的最大采样速率为1G样本/秒,就是说示波器在时间最小档位是的采样率是每秒采集1G个数据点,时间档位越大用到的采样率越小100MHZ:示波器模拟前端的带宽。100M正弦波输入示波器时,进过模拟前端后信号幅度衰减为输入时的70.7%业内的原则是采样率要是示波器带宽的5倍以上,俗称5倍原则。比如你要测量的波形频率是300MHz,则这个示波器不能测出它的完整波形,因为带宽不...原创 2019-10-12 12:18:20 · 7521 阅读 · 0 评论 -
Android调试wifi使用wpa_supplicant和wpa_cli总结
启动WLAN(1)加载驱动android系统需要先load driver。手动调试dirver ko的时候,先调用insmod命令加载指定的wifi驱动,注意有些wifi ko的加载后面需要添加参数。再调用iwconfig可以看到驱动是否加载成功,如下,可以看到wlan0已经有了,则驱动加载成功。(1)ifconfig -ap2p0 Link encap:Ethernet H...原创 2019-07-14 02:50:21 · 5498 阅读 · 3 评论 -
编译android7.0出现的错误ninja: build stopped: subcommand failed.
编译android7.0出现的错误:ninja: build stopped: subcommand failed.解决方法:$ vi prebuilts/sdk/tools/jack-admin1.找到如下语句:JACK_SERVER_COMMAND=“java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_S...原创 2019-08-01 01:43:12 · 20256 阅读 · 0 评论 -
ubuntu14.04中安装open jdk1.8以及报错解决分析
Linux中出现javac -version报错error while loading shared libraries: libjli.so这个问题是由于卸载openjdk不彻底造成的.之前使用apt-get purge openjdk-8-jdk和apt-get –purge remove openjdk-8-jdk卸载,重新安装后依旧报这个错误!使用apt-get remove ope...原创 2019-07-31 02:16:50 · 1168 阅读 · 0 评论 -
rk3399_android7.1音频通路相关说明
RK3399 HDMI IN声卡通路选择当前RK3399有三路i2s通道,HDMIOUT音频通路芯片内置为i2s2。当前RK3399 NE4000开发板上的音频芯片还有蓝牙、rt5651、tc358749,音频通路配置如下:RK3399 I2S2 没有使用来作为蓝牙通话,则可以 TC358749 I2S 接口接到 RK3399的单独一个 I2S 上(I2S/PCM 不能跟其他 I2S 设备共用...原创 2019-09-28 17:35:35 · 9740 阅读 · 3 评论 -
RK3288_Android7.1调试uart串口屏
首先底层确保rk3288的板子串口通讯是ok的,即能实现自发自收。通过短接串口TX和RX,然后cmd操作echo和cat对应串口节点即可。1.adb使用ls -l ttyS*命令显示如下crw-rw----. 1 root dialout 4, 64 5月 17 02:24 /dev/ttyS0crw-rw----. 1 root dialout 4, 65 5月 17 02:24 /d...原创 2019-07-11 20:38:24 · 2396 阅读 · 0 评论 -
Linux下c编程设置串口属性和读写串口操作说明总结
在使用串口的时候要遵循以下的顺序才能使用。1、打开串口设备2、设置串口的波特率,数据位,校验位,停止位以及其它设置3、写数据4、读出数据5、关闭串口。在编写Linux串口的C程序之前,需要包含以下头文件:#include <termios.h>在Linux系统中,一切皆文件,所以串口设备也是一类文件,学习过Linux驱动程序的学员都知道,Linux有三类设备:字符设备,...原创 2019-07-15 15:10:38 · 2262 阅读 · 0 评论 -
Android的Wifi系统框架分析第一篇
一、Android Wifi框架图二、Android Wifi源码结构1 Wifi Settings层代码目录:packages/apps/Settings/src/com/android/settings/wifi/主要的类:WifiSettings.java 负责显示Wifi的设置界面WifiEnabler.java 负责Wifi的开关逻辑WifiDialog.java ...原创 2019-07-15 01:47:38 · 1232 阅读 · 0 评论 -
Android电池管理系统系统分析
Android电池管理系统总体实现: 电池管理在Android系统中的主要作用是检测我们的电池状态,剩余电量实时更新,高温报警,低电量关机等。Android的电池管理模块,从Android的应用层到底层内核分为了4层来理解,从上到下依次为,应用层,framwork层,本地框架层,内核驱动层。一、Android 电池服务Android电池服务BatteryService,用来监听内核上报的电...原创 2019-08-08 17:42:00 · 5380 阅读 · 0 评论 -
Android如何实现音频输出路由的切换
扬声器输出和耳机输出是音频系统最基本的音频输出通路,实际应用中用户可根据自己需要随意切换,具体表现是通过插入耳机选择耳机输出,拔出耳机选择默认的扬声器输出。如上图所示,扬声器与耳机输出切换的实现思路是内核底层驱动实现耳机插拔检测,然后通过uevent通信机制通知Java框架层,Java框架层通过Intent机制发送广播消息通知音频系统改变输出通道。下面介绍下具体实现方法。首先调用class_...原创 2019-08-11 00:54:14 · 2243 阅读 · 1 评论 -
关于TP遇到的问题点和解决办法
问题点1:偶尔会出现贴脸通话一段时间,移开手机后,LCD不会重亮。原因分析:是手机睡眠后导致TP也会睡眠,这样就算拿开手机后TP也不会响应外部的电容变化。解决方法是:通话过程中贴脸熄屏激活后,睡眠唤醒时不要走正常的睡眠唤醒处理,直接PASS掉就行了。代码如下所示:/在suspend与resume不走tp正常流程 ,函数直接返回/static void ft5x0x_ts_suspend(s...原创 2019-01-16 15:33:19 · 845 阅读 · 0 评论 -
Linux的EXPORT_SYMBOL和EXPORT_SYMBOL_GPL的使用和区别
简要说明使用方法:一个模块mod1中定义一个函数func1;在另外一个模块mod2中定义一个函数func2,func2调用func1。在模块mod1中,EXPORT_SYMBOL(func1);在模块mod2中,extern int func1();就可以在mod2中调用func1了。同理EXPORT_SYMBOL_GPL使用相同。1、EXPORT_SYMBOL的作用是什么?EXPO...原创 2019-09-30 10:26:43 · 23413 阅读 · 6 评论 -
Linux USB驱动框架分析
1、lsusb可以查看usb设备的vendor和product,拔插设备可以读取到对应外设的vid pid。127|rk3399_all:/ $ lsusbBus 005 Device 002: ID 05e3:0610Bus 007 Device 002: ID 5123:9007Bus 001 Device 001: ID 1d6b:0002Bus 002 Device 001: I...原创 2019-09-25 18:50:19 · 1444 阅读 · 0 评论 -
rk3399_android7.1添加个驱动且加上宏控编译
第一步:在arch/arm64/configs/rockchip_defconfig添加对应的宏,且属性设置为y,即编译进内核,这里是CONFIG_AS2056_I2C:+++ b/arch/arm64/configs/rockchip_defconfig@@ -421,6 +421,7 @@ CONFIG_SERIAL_8250_DW=yCONFIG_I2C_CHARDEV=yCONFI...原创 2019-09-21 13:14:37 · 1034 阅读 · 0 评论 -
实时查看Linux IO复用情况
1、查找 pinmux-pinsrk3288:/ # busybox find /d/pinctrl -name pinmux-pins/d/pinctrl/pinctrl/pinmux-pins2、cat pinmux-pinsrk3399_all:/ # cat /d/pinctrl/pinctrl/pinmux-pins ...原创 2019-09-10 15:55:08 · 2325 阅读 · 0 评论 -
rk3399_android7.1关于secureboot操作说明
首先确保硬件上有接efuse的相关部分电路,给efuse供电:1、使用SecureBootTool.exe工具生成 RSA KEY(privateKey.bin和publicKey.bin文件),这里rk3399使用的是SecureBootTool v1.85版本,每款机器只生成一次,因此要特别注意保存好,以后签名都只用这对 KEY,建议最好再备份一次,避免丢失,目前做法是保存在SDK代码dev...原创 2019-08-31 17:58:40 · 5721 阅读 · 4 评论 -
RK3288_Android7.1平台基于DRM框架的LCD开发
概述rk3288在kernel4.4开始使用的显示框架是基于DRM的。DRM全称是Direct Rendering Manager,管理进行显示输出的, buffer分配, 帧缓冲.libdrm库提供了一系列友好的控制封装, 使用户可以方便的进行显示的控制, 但并不是 只能通过libdrm库来控制drm, 用户可以直接操作drm的ioctl或者是使用framebuffer的 接口实现显示操作...原创 2019-08-29 14:46:20 · 7962 阅读 · 0 评论 -
Linux的LCD硬件实现原理和FrameBuffer简介
1、LCD和FrameBuffer简介1.1LCD的原理LCD的原理:我们在液晶面板后面加白光(即背光板),然后通过不同的电信号,令液晶分子选择性透光,这样液晶面板就显示出了不同的颜色。不难得出结论,LCD本身只会透光,不会发光。亮度控制是由背光板负责的。当前主流的LCD是TFT,特点是超薄、清晰。SoC(主控)如何控制LCD显示原理:LCD驱动器:LCD驱动器一般与LCD面板集成在一...原创 2019-08-11 18:24:48 · 1894 阅读 · 0 评论 -
Linux的C程序串口属性dev/ttyS0设置
在Linux环境下,串口名从ttyS0开始依次是ttyS1、ttyS2等。在本程序中,使用ttyS0作为通信串口。在打开ttyS0的时候,选项 O_NOCTTY 表示不能把本串口当成控制终端,否则用户的键盘输入信息将影响程序的执行; O_NDELAY表示打开串口的时候,程序并不关心另一端 的串口是否在使用中。在Linux中,打开串口设备和打开普通文件一样,使用的是open()系统调用。比如我么打开...原创 2019-07-14 00:50:32 · 6694 阅读 · 0 评论 -
rk3128平台Android7.1调试USB接口wifi总结
调试 usb wifi marvell 8897uWifi驱动加载方式说明方式 1:wifi 驱动build in到内核,内核启动阶段直接加载wifi驱动方式 2:wifi 驱动build in到内核,打开wifi再加载驱动方式 3:wifi 驱动以ko方式存在于系统,打开wifi再加载kowifi芯片识别流程如下:开机对 wifi 模块上电,并自动进行扫描 sdio 操作系统启...原创 2019-07-03 21:56:02 · 4292 阅读 · 0 评论 -
RK3288_Android7.1增加自定义的红外遥控按键流程记录
1、在 dts 中增加红外遥控器键值(点播按键),注意文件中加载的 input.h 头文件路径。#include <dt-bindings/input/input.h>diff --git a/kernel/arch/arm/boot/dts/rk3288-tb_8846.dts b/kernel/arch/arm/boot/dts/rk3288-tb_8846.dtsinde...原创 2020-09-12 22:20:45 · 1708 阅读 · 1 评论 -
RK3288_Android7.1调试以太网ethernet
1、以太网(ethernet)的调试:Rk默认已经添加了mac驱动。网卡分为两个层次:MAC+PHY一般说来,MAC就是网络控制器,如果该驱动OK,就能直接看到ifconfig信息;PHY是物理层,负责发送和传输的底层,如果PHY发生问题,ifconfig同样有信息,只有up时才会连接PHY,down时断开连接。MAC和PHY通过MII接口传输以太网数据,通过MDIO接口访问PHY的配置寄...原创 2019-04-18 15:54:28 · 10148 阅读 · 0 评论 -
RK3288_Android7.1调试红外遥控IR
红外遥控的发射电路是采用红外发光二极管来发出经过调制的红外光波;红外接收电路由红外接收二极管、三极管或硅光电池组成,它们将红外发射器发射的红外光转换为相应的电信号,再送后置放大器。鉴于家用电器的品种多样化和用户的使用特点,生产厂家对红外遥控编码进行了严格的规范编码,这些编码各不相同,从而形成不同的编码方式,统一称为红外遥控器编码传输协议。到目前为止,红外遥控协议已多达十种, 如: RC5、 SIR...原创 2019-04-22 18:08:33 · 6178 阅读 · 0 评论