RK系列驱动开发
文章平均质量分 85
零意@
RK3288_Android7.1驱动开发入门视频课程链接:https://edu.csdn.net/course/detail/27756带你快速入门Android/Linux驱动开发,熟悉开发流程,让驱动开发入门门槛更低!
Linux设备树dts快速入门视频教程:https://edu.csdn.net/course/play/27772
展开
-
蔡工RK系列Android驱动开发入门视频课程
百度网盘:原创 2019-11-10 00:36:52 · 2104 阅读 · 3 评论 -
rk3588内核添加特殊分辨率
如果我们需要往HDMI的驱动添加特殊分辨率(即不在原来支持列表:static const struct drm_display_mode dw_hdmi_default_modes[]结构体中的分辨率),比如要添加700x1020@20,此时需要找到对应特殊分辨率的LCD屏参,根据你的屏参来配置对应的行、场参数。rk平台内核本身默认支持一些常规的分辨率,如1920x1080@30,1280x720@60,但是往往不能满足需求,如有的客户需要你添加1020x700@35的分辨率,这时候就要自己加上去了。原创 2024-03-25 16:23:47 · 1423 阅读 · 4 评论 -
rk3399出现UART2串口打印异常问题
问题描述:一开始上电的时候uart2串口出现了乱码还有部分uboot的log打印信息(通过飞线接到串口抓到),如下图所示:然后剩下的部分uboot的log打印出现到了我们设置的debug串口uart4中,要达到的目的:让uart4 debug打印正常,uart2上的打印切换到uart4,关闭掉uart2,避免uart2在一上电和uboot状态的时候出现打印乱码和部分uboot的log信息,。修改如下:说明:SDK版本:RK3399 LINUX SDK V0.1_20170117涉及的文件:原创 2022-04-02 15:50:51 · 2547 阅读 · 1 评论 -
rk3399 io工具的使用示例
rk平台的IO 工具所包含的命令参数详解可以在串口或者 adb 输入“io?” 回车后便可罗列出。要查询 io 寄存器首先要有主控芯片详细规格书 TRM,请向对接的 RK 业务邮件申请(注:在 http://opensource.rock-chips.com/可以找到 3399、3288、3328 的 TRM技术参考手册1、先找到对应的IO基地址(比如我这里要找gmac的tx clk的寄存器值,)首先确认MAC_TXCLK对应的GPIO是GPIO3_C1,接下来在 TRM 上搜索 gpio3c1(不带原创 2021-12-30 13:59:41 · 3009 阅读 · 1 评论 -
rk3399_android7.1使用v4l2loopback实现虚拟camera开发记录
1、编译v4l2回环设备驱动camera驱动,生成video0设备;drivers/v4l2loopback/v4l2loopback.cdrivers/v4l2loopback/v4l2loopback_formats.hdrivers/v4l2loopback/v4l2loopback.hdrivers/v4l2loopback/Makefile2、使用yuv420_infiniteloop.c编译出来的应用程序(这里可以放到安卓的代码下mmm编译)实现数据写入video0设备中,这里写入的数原创 2021-05-15 15:53:28 · 3079 阅读 · 1 评论 -
rk3399_android10编译说明
在编译代码之前,请注意使用一键编译命令之前需要设置环境变量,选择好自己需要编译的平台,举例:source build/envsetup.shlunchrk3399_Android10-userdebug全局编译:直接在SDK跟目录执行命令:./build.sh -UKAup即可编译出update.img( WHERE: -U = build uboot-C = build kernel with Clang-K = build kernel-A = build android-p = wi原创 2020-10-29 10:25:29 · 3881 阅读 · 2 评论 -
RK平台计算GPIO对应的整型数
GPIO是比较常用的资源,比如说控制LED灯亮灭,控制LCD上电,控制模块的复位电路,做外设的中断脚等等,这些都有对GPIO的操作和使用,所以说,GPIO开发是驱动开发中必不可少的操作,而且也是最基础的东西。我们在驱动开发过程中,有时候我们不能确定自己使用和申请的gpio是否对了,我们可以把它对应的数值给打印出来,通过对比对应的数值可以确定我们具体使用的是哪个数值;下面依旧是拿rk平台来举例:这里使用的是 GPIO7_C5 来举例。首先,需要计算出代表 GPIO7_C5 的值,算法如下:GPIO7_原创 2020-08-31 22:32:18 · 1307 阅读 · 0 评论 -
rk3399固件烧录方法介绍
一、准备工作1、Type-C线一条,USB数据线2、RK3399开发板一块二、安装驱动在PC上需要安装OTG驱动,资料里面DriverAssitant_v4.5.rar1、升级驱动安装,打开DriverInstall.exe进行安装2、通过Type-C线连接开发板和电脑。三、 烧写一个或多个分区镜像1、解压AndroidTool_Release_v2.42.rar,打开里面的AndroidTool.exe, 选择相应的镜像文件,例如这里选择kernel.img和boot.img2、原创 2020-07-17 10:30:14 · 7917 阅读 · 1 评论 -
RK3288_Android7.1的gpio按键驱动浅析
rk3288 gpio按键驱动分析dts配置GPIO 164 gpio_keys { // rk3036-echo.dts 165 compatible = "gpio-keys"; 166 #address-cells = <1>; 167 #size-cells = <0>; 168 169 pinctrl-names =原创 2020-07-15 12:21:01 · 1392 阅读 · 0 评论 -
RK3288_Android7.1接eDP屏休眠之后led状态灯没有亮红色
主要是/sys/class/leds/standby/brightness和/sys/class/backlight/backlight/brightness这两个节点的选择操作。--- a/services/core/java/com/android/server/power/PowerManagerService.java+++ b/services/core/java/com/android/server/power/PowerManagerService.java@@ -1257,7 +125原创 2020-07-14 15:58:40 · 561 阅读 · 0 评论 -
RK3288_Android7.1添加两个gpio的按键
我们知道:rk3288 android7.1主板按键的使用主要有GPIO接口的和ADC接口的,而我的项目这里,需要添加两个GPIO类型的按键,现在记录一下,其实主要是dts的配置而已,驱动不需要改动:1、首先看下原理图,对应找到具体使用的gpio:从原理图上可知,power按键的GPIO使用的是GPIO0_A1, recovery按键的GPIO使用的是GPIO8_A12、dts的配置方面 164 gpio_keys { //参考同目录下的 rk3036-echo.dts 165原创 2020-07-10 10:42:32 · 2106 阅读 · 0 评论 -
rk399_android7.1的mipi驱动代码追踪(部分)
文件:./drivers/gpu/drm/panel/panel-simple.c我这里从probe函数开始追踪源码 ->panel_simple_dsi_probe ->id = of_match_node(dsi_of_match, dev->of_node); ->panel_simple_probe ->of_property_read_u32 //解析一些dts的配置参数 ->err = panel_simple_get_cmds(p..原创 2020-06-30 11:31:13 · 1452 阅读 · 0 评论 -
rk3399_android7.1的HDMI显示实现固定分辨率
最近改了个反人类的需求,就是:当HDMI输出分辨率设置为固定的2160P后,再热拔插连接到1080P的TV,分辨率会变为1080P的分辨率,客户认为这是bug,需要改为固定。为什么说这是反人类的需求呢?比如说,你想固定一个4k,那你接到另一台2K的显示上,那要怎么显示呢?肯定是无显示。所以RK平台的hdmi显示机制是这样的:比如你设置个HDMI的分辨率,比如1920x1080p60hz,如果你接另外一台电视有这个分辨率,就会切到这个分辨率去,如果没有支持这个分辨率,就会切到其他相近的分辨率。当原创 2020-06-18 19:23:22 · 7966 阅读 · 8 评论 -
rk3399_android7.1调试串口uart功能和测试是否能通讯
1、首先硬件原理图上需要确认使用的是哪个串口,比如我这里使用的是串口uart4:2、其次在kernel需要把对应串口的节点使能打开(dts或者dtsi文件中修改):&uart4 { status = "okay"; };3、测试验证uart是否通了rk3399_all:/ # ls -l dev/ttyS4 //确认是否有串口节点crw-rw-rw- 1 system system 4, 68 1970-01-01 00:06 dev/ttyS4验证方法: 镊子短接原创 2020-05-13 10:17:35 · 1895 阅读 · 3 评论 -
rk3399_android7.1读写sn和eth mac地址
rk3399 android7.1两种方式读取sn和eth mac地址(这里只列出关键接口,详细代码可以到具体目录文件查看)。他们分别对应读写在不同的地方:idb和vendor storage;具体代码在uboot下board/rockchip/rk33xx/rk33xx.c实现,,如果没有使用vendor_storage_read读取的代码可自行添加上去:1、使用rkidb_get_sn读取...原创 2020-04-22 14:54:52 · 5903 阅读 · 1 评论 -
rk3399_android7.1调试USB接口的TP记录
调试过程记录:基本信息列表:1. CPU type : RK33992. Kernel version : kernel4.43. Android version: Android7.14. Touch Controller Interface : USB5. Touch Controller Type:EXC80H801、确保kernel的rockchip_defconf...原创 2020-03-19 16:13:37 · 2102 阅读 · 1 评论 -
关于Secureboot的简单介绍[结合rk平台]
secure boot目的secure boot方案对系统软件采用签名认证的方式,在设备出厂前对设备操作系统的Image文件进行签名认证,并将公钥的Hash值写入芯片的一次性可编程模块。由于不同文件计算得到的Hash值不同,采用secure boot方案的设备每次启动时都会先校验系统的Hash值,即和芯片内的Hash值进行比较,然后对签名images的一级一级校验,实现从设备芯片到系统软件的链式...原创 2020-03-11 11:46:05 · 16864 阅读 · 3 评论 -
rk3399_android7.1关于看门狗驱动的实现原理说明
rtc1805驱动跑起来就默认看门狗是kernel feeddog,每隔2s feeddog一次(feeddog就是向特定的寄存器写入值),如果没有feeddog就会触发系统强制复位而重启系统。目前我们的板子都是做的假待机,所以feeddog不会受影响,如果是真待机情况下[kernel进入休眠,不跑kernel],kernel就不自动feeddog就会导致系统重启,所以需要在suspend的情况...原创 2020-03-06 15:16:00 · 1856 阅读 · 0 评论 -
rk3399_android7.1平台调试sensor流程记录
这里只记录调试gsensor部分,其他gryo+compass同理,他们在rk平台分开三个不同.c文件实现驱动加载和id匹配和数据上报等:Rk平台sensor驱动代码路径:kernel/drivers/input/sensors,其中 sensor-dev.c 是核心代码,整合了不同类型的sensor,包括 accel, gyro, lsensor, psensor, compass等。下面是...原创 2020-02-26 15:24:45 · 7280 阅读 · 1 评论 -
rk3399_secureboot在linux环境中操作说明
1、在SDK代码创建文件夹,放置相关Secureboot工具:mkdir device/rockchip/rk3399/secureboot //创建目录,2、使用SecureBootConsole 工具签名前,请先指定好type.xml中的芯片类型,例如3288,3399:例如vim type.xml打开type.xml文件进行设置为3399,3399/***************...原创 2020-02-18 15:01:26 · 2005 阅读 · 0 评论 -
RK3288_Android7.1基于tinyalsa的音频调试说明
1、PCM脉冲编码调制(PCM)是一种用于数字表示采样模拟信号的方法。它是数字音频在计算机、光盘、数字电话和其他数字音频应用中的标准形式。在PCM流中,模拟信号的振幅以均匀的间隔进行有规律的采样,并在数字步长的范围内将每个采样量子化到最接近的值。线性脉码调制(LPCM)是一种特定类型的PCM,其量化电平是线性均匀的。这与PCM编码量化水平不同振幅的函数(如 A-law算法或μ-law算法)。尽管...原创 2020-01-16 11:24:18 · 3870 阅读 · 0 评论 -
RK3288_Android7.1调试RTC总结(二)
CPU: rk3288Android版本:Android7.1kernel版本: kernel4.4rtc chip: am1805我这里主要是基于rtc芯片:am1805的驱动来说明。rtc1805驱动跑起来就默认看门狗是kernel feeddog,每隔2s feeddog一次(feeddog就是向特定的寄存器写入值),如果没有feeddog就会触...原创 2019-12-31 10:57:24 · 2863 阅读 · 1 评论 -
RK3288_Android7.1调试RTC总结(一)
Linux RTC的调试:一、 Linux时间有两个,系统时间(Wall Time)和RTC时间。(1)系统时间(WT):由Linux系统软件维持的时间,比如command: date 获取到的就是系统时间。rk3288:/ # dateThu Jan 1 00:02:39 GMT 1970(2)RTC时间:这个时间来自我们设备上的RTC芯片,通过command: hwclock 可以...原创 2019-06-26 16:44:01 · 4059 阅读 · 2 评论 -
RK3288_Android7.1通过ADC实现电池电量粗略计算上报
一. 背景及问题:由于项目需要,板子硬件接的PMU【rk808】是不带电池功能的,不支持库仑计计算电量,而项目又需要接电池使用,所以硬件把电池端接到一个ADC口,做了个简单的电池电路,通过ADC读取数值来确定电池电压,然后换算电池电量。下面是原理图方面:可以看到,原理图通过把电池电压分压之后,接到了主控端的ADC0口,现在就需要写个驱动通过读取ADC的数值来粗略计算电池的电量,然后上报上层显示...原创 2019-12-25 18:45:44 · 3690 阅读 · 6 评论 -
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 · 4612 阅读 · 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 · 6201 阅读 · 4 评论 -
rk3399_android7.1耳机拔插ADC检测
我们这里以rk3399 android7.1平台为例,浅析adc接口实现检测耳机的拔插动作。硬件原理部分:耳机插入把PHE_DET1处的弹片弹开,然后实现headphone_dect直接连通到1.8v,检测端得到高电平1.8v;拔出耳机,弹片回去,只有0.159v电压。所以实现了没有耳机插入时这个“ADC_IN4”为低电位,插入耳机时这个“ADC_IN4”为高电位软件实现部分:1、ker...原创 2019-11-19 20:28:38 · 3373 阅读 · 0 评论 -
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 · 2398 阅读 · 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 · 5730 阅读 · 4 评论 -
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 · 1036 阅读 · 0 评论 -
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 · 10150 阅读 · 0 评论 -
RK3288_Android7.1调试红外遥控IR
红外遥控的发射电路是采用红外发光二极管来发出经过调制的红外光波;红外接收电路由红外接收二极管、三极管或硅光电池组成,它们将红外发射器发射的红外光转换为相应的电信号,再送后置放大器。鉴于家用电器的品种多样化和用户的使用特点,生产厂家对红外遥控编码进行了严格的规范编码,这些编码各不相同,从而形成不同的编码方式,统一称为红外遥控器编码传输协议。到目前为止,红外遥控协议已多达十种, 如: RC5、 SIR...原创 2019-04-22 18:08:33 · 6190 阅读 · 0 评论 -
RK3288_Android7.1在HAL层audio音频通路小结
rk3288 HDMIin音频通路:hdmiin:HDMIIn声音直接通过codec输出到喇叭、耳机,不需要送到主控进行处理:TC358749XBG-> alc5651 i2s2 -> alc5651 dac -> hp/lineoutalsa HAL 层android 5.1 BOX MID的SDK之后统一使用这个目录下面的代码\hardware\rockchi...原创 2019-08-10 02:20:00 · 8345 阅读 · 1 评论 -
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 · 7968 阅读 · 0 评论 -
rk3399_android7.1调试mipi转lvds转换IC总结
平台:RK3399 KERNEL版本:kernel4.4Android版本:android7.1转换IC:LT9211(龙迅) mipi to lvds接口: iic第一步,我们需要拿到datasheet,包括转换IC的datasheet和LCD显示屏的Datesheet。获取转换IC(mipi to lvds)的datasheet我们主要关注的是该IC的I2c从设备地址,我这里的芯片...原创 2019-09-13 02:02:41 · 13641 阅读 · 33 评论 -
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 · 4300 阅读 · 0 评论