小智学长 | 嵌入式
这个作者很懒,什么都没留下…
展开
-
嵌入式Linux&Android开发-Android Hal到Framwork 2
目录一、Android应用访问驱动设备的方法二、为什么需要JNI?三、为什么需要Android HAL?四、上层 app 控制 led 亮灭例子4.1 Kenerl层添加驱动4.2 Hal层添加驱动4.3 JNI层添加4.4 AIDL&Service添加4.5 App层调用自定义service4.6 验证4.7 常见问题4.8 总结五、补丁包使用一、Android应用访问驱动设备的方法App->JNI->Kenerl Dri转载 2022-01-11 21:45:35 · 445 阅读 · 0 评论 -
嵌入式Linux&Android开发-Android Hal到Framwork 1
目录一、Andorid系统架构图二、为什么需要Framwork层?文件系统启动分析ServiceManager的作用:通信代理AIDL的作用三、如何自定义系统Service?3.1 建立aidl通信接口3.2 在system_server中注册EmbededServicer到servicemanager3.3 实现EmbededService,对应aidl中的接口函数3.4 在app中使用IEmbededService的大致流程如下3.5 编译service.原创 2022-01-11 21:45:26 · 2513 阅读 · 0 评论 -
嵌入式Linux&Android开发-串口调试
一、串口说明UART、TTL、232、485的区别?串口是指使用串行通信的接口。UART(TTL电平),232,485都是串口,TTL、RS-232、RS-485是指的电平标准。UART特指单片机的UART端口,使用TTL电平:标准TTL输入高电平最小2V,输出高电平最小2.4V,典型值3.4V,输入低电平最大0.8V,输出低电平最大0.4V,典型值0.2V。RS232:逻辑1(MARK)=-3V~-15V,逻辑0(SPACE)=+3~+15VRS485采用差分方式传输:..原创 2022-01-11 21:45:15 · 1892 阅读 · 0 评论 -
嵌入式Linux&Android开发-WiFi&BT SDIO调试
目录一、基本概念WiFiSTA 模式 和 AP 模式SDIO(Secure Digital I/O)SDIO-WiFi 模块二、项目中WiFi说明三、rockchip WiFi启动流程简介WiFi应用部分 wpa_supplicant四、RK WiFi驱动移植流程4.1 BSP已支持WiFi4.2 BSP未支持WiFi五、排查流程5.1 检查DTS5.2 排查DTS对应的GPIO设置5.3检查电压电平5.4 检查时钟5.5 尝试单线模式原创 2022-01-07 21:19:48 · 6359 阅读 · 0 评论 -
嵌入式Linux&Android开发-TP调试
目录一、修改DTS,添加新的I2C设备二、修改Makefile,Kconfig三、tp调试时的问题排查一、修改DTS,添加新的I2C设备&i2c4 { status = "okay"; clock-frequency = <400000>; gslX680@40 { compatible = "gslX680"; reg = <0x40>; touch-gpio = <&gp原创 2022-01-07 21:19:45 · 308 阅读 · 0 评论 -
嵌入式Linux&Android开发-LCD屏幕调试
目录一、简介二、开发流程三、硬件说明四、电子特性五、关注启动时序六、关注引脚七、屏参适配7.1 DTS&驱动配置7.2屏参配置(案例一)7.3屏参配置(案例二)7.4 屏参配置(案例三)7.5 屏参配置(案例四)7.6 通过excel计算启动时序7.7 填充DTS,编译运行7.8 编译&运行7.9 常见问题八、Excel附件一、简介如果我们需要去写一个LCD驱动时候,我们必须了解Framebuffer的具体工作原理.原创 2022-01-07 21:19:41 · 4420 阅读 · 3 评论 -
嵌入式Linux&Android开发-摄像头&MIPI CSI调试
目录一、简介1.1 接口分类1.2 摄像头驱动逻辑1.3 DVP接口模式1.4 CSI接口模式二、MIPI-CSI接口摄像头2.1 开发流程2.2 摄像头规格书2.3 Android Camera驱动配置DTS修改xml配置文件Android通过CamSys实现摄像头相关参数配置编译2.4 Linux Camera驱动添加驱动源码修改配置Makefile和Kconfig修改DTS配置参数2.4 验证2.5 调试方法2.6 问题排原创 2022-01-07 21:19:24 · 1221 阅读 · 0 评论 -
嵌入式Linux&Android开发-i2c tools移植
目录一、下载源码二、交叉编译三、使用3.1 查看板子i2c总线:3.2 查看i2c0挂载的设备3.3 读取i2c设备所有寄存器值3.4 读取i2c设备指定寄存器3.5 设置设备上寄存器的值3.6 i2ctransfer 用于创建I2C消息并将其作为一次传输合并发送四、调试4.1 gy9064.2 pca9555一、下载源码i2c-tools/i2c-tools.git - I2C and SMBus user-space toolsgit cl.原创 2022-01-06 09:21:45 · 614 阅读 · 0 评论 -
嵌入式Linux&Android开发-I2C外设驱动
目录一、I2C接口应用场景介绍二、Linux I2C子系统三、GY906外设驱动开发流程3.1 查看外设Datasheet3.2 原理图查看IO3.3 使用i2c tools初步验证3.4 修改DTS3.5 编写驱动3.6 编译&运行&调试一、I2C接口应用场景介绍硬件看门狗芯片、加密芯片、音频解码芯片、MIPI摄像头、显示屏、触摸屏信号与数据分离,通过I2C信号线对芯片寄存器读写,读取外设状态,控制外设进入某些工作模式。二、L..原创 2022-01-06 09:21:27 · 235 阅读 · 0 评论 -
嵌入式Linux&Android开发-Input子系统
目录一、Input子系统介绍二、事件类型和事件值定义三、驱动实现流程简介四、DTS实现五、实现Demo六、测试代码七、运行测试八、Api参考一、Input子系统介绍在用户空间中,我们不需要去管有多少个厂家键盘,多少个鼠标。它只要从input子系统中去取对应的事件(按键,鼠标移位等)就可以了。在内核空间中,我们的核心工作是向input子系统报告按键、触摸屏、键盘、鼠标等输入事件(event通过input_event结构体描述),不再需要关心文件操作接口,因为inp.原创 2022-01-06 09:21:21 · 143 阅读 · 0 评论 -
嵌入式Linux&Android开发-按键驱动
目录一、按键驱动实现的三种方式开发流程二、直接读取方式三、中断方式四、ADC方式一、按键驱动实现的三种方式直接读取 中断读取 ADC读取开发流程查看原理图确定IO修改DTS 编写驱动步骤1-驱动实现 编写驱动步骤2-接口实现(阻塞&非阻塞IO、异步通知、Input子系统) 编译&烧写&调试二、直接读取方式rk3399-embeded-port.dtsi/ { compatible = "rock原创 2022-01-06 09:21:18 · 202 阅读 · 0 评论 -
嵌入式Linux&Android开发-把驱动添加到SDK固件内
目录一、添加驱动程序到系统固件中1.1 添加led_driver.c,可复制类似文件修改1.2 添加驱动Makefile1.3 添加驱动Kconfig1.4 打开配置1.5 编译1.6 烧录&打印二、添加测试程序到系统固件中2.1 创建编写测试程序2.2 添加Android.mk文件2.3 配置环境脚本&编译2.4 编译成功后生成在此路径一、添加驱动程序到系统固件中1.1 添加led_driver.c,可复制类似文件修改文件放到sd原创 2022-01-06 09:20:56 · 935 阅读 · 0 评论 -
嵌入式Linux&Android开发-LED驱动
目录一、LED驱动实现的两种种实现方式开发流程二、LED驱动实现(基于设备驱动模型+DTS+LED子系统)删除已有LED信息添加新dts添加led_classdev_driver.c,可复制类似文件修改编译&验证三、LED驱动实现(基于设备驱动模型+DTS+file_operations)添加led_driver.c,可复制类似文件修改编译&验证编写测试程序一、LED驱动实现的两种种实现方式使用LED子系统,呼吸灯,定时灯,亮度控制原创 2022-01-06 09:20:39 · 223 阅读 · 0 评论 -
嵌入式Linux&Android开发-GPIO
为什么要了解GPIO?因为无论是最简单的LED、KEY,还是外部接口相关的I2C SPI UART HDMI LVDS等等都需要用到GPIO。GPIO, 全称 General-Purpose Input/Output(通用输入输出)RK3399 有 5 组 GPIO bank:GPIO0~GPIO4。所有的 GPIO 在上电后的初始状态都是输入模式,可以通过软件设为上拉或下拉,也可以设置为中断脚。 每个 GPIO 口除了通用输入输出功能外,还可能有其它复用功能。那我们知道什么是GPIO了..原创 2022-01-06 09:20:52 · 361 阅读 · 0 评论 -
嵌入式Linux&Android开发-异步通知
目录一、异步通知简介二、实现流程一、异步通知简介在前面使用阻塞或者非阻塞的方式来读取驱动中按键值都是应用程序主动读取的,对于非阻塞方式来说还需要应用程序通过poll函数不断的轮询。最好的方式就是驱动程序能主动向应用程序发出通知,报告自己可以访问,然后应用程序在从驱动程序中读取或写入数据。Linux提供了异步通知这个机制来完成此功能。为了使设备支持异步通知机制,驱动程序中涉及 3 项工作:支持 F_SETOWN 命令,能在这个控制命令处理中设置 filp->f_owner 为对应原创 2022-01-06 09:20:21 · 647 阅读 · 0 评论 -
嵌入式Linux&Android开发-阻塞和非阻塞IO
目录一、阻塞&非阻塞访问介绍二、等待队列实现阻塞访问三、轮询实现非阻塞访问一、阻塞&非阻塞访问介绍轮询按键驱动使用read函数一直读取io状态阻塞与非阻塞访问是 I/O 操作的两种不同模式,前者在 I/O 操作暂时不可进行时会让进程睡眠,后者则不然。在设备驱动中阻塞 I/O一般基于等待队列来实现,等待队列可用于同步驱动中事件发生的先后顺序。使用非阻塞 I/O 的应用程序也可借助轮询函数来查询设备是否能立即被访问,用户空间调用 select()和 poll(..原创 2022-01-06 09:20:06 · 111 阅读 · 0 评论 -
嵌入式Linux&Android开发-内核定时器
目录一、内核定时器简介二、通用定时器使用方法三、Linux内核短延时函数一、内核定时器简介定时器是一个很常用的功能,需要周期性处理的工作都要用到定时器。Linux内核定时器使用很简单,只需要提供超时时间(相当于定时值)和定时处理函数即可,当超时时间到了以后设置的定时处理函数就会执行,和我们使用硬件定时器的套路一样,只是使用内核定时器不需要做一大堆的寄存器初始化工作。在使用内核定时器的时候要注意一点,内核定时器并不是周期性运行的,超时以后就会自动关闭,因此如果想要实现周期性定时原创 2022-01-06 09:19:50 · 516 阅读 · 0 评论 -
嵌入式Linux&Android开发-并发与竞争
目录一、并发&竞争介绍二、处理并发和竞争的机制2.1 原子操作2.2 自旋锁2.3 信号量2.4 互斥体上一章节,我们介绍了如何编写一个最小的驱动,但我们运行的时候只有一个线程去访问,而Linux是一个多任务操作系统,肯定会存在多个任务共同操作同一段内存或者设备的情况,所以如何保证多个线程同时访问驱动接口时,运行都正确无误呢?一、并发&竞争介绍Linux多个任务甚至中断都能访问的资源叫做共享资源。在驱动开发中要注意对共享资源的保护,也就是要处理对共原创 2022-01-05 21:37:29 · 136 阅读 · 0 评论 -
嵌入式Linux&Android开发-第一个最小驱动
目录一、第一个驱动二、第一个平台设备驱动一、第一个驱动kernel_hello.c#include <linux/init.h>#include <linux/kernel.h>#include <linux/module.h>static int hello_init(void){ printk("hello world!\n"); return 0;}static void hello_exit(void){原创 2022-01-04 09:49:22 · 1446 阅读 · 6 评论 -
嵌入式Linux&Android开发-第一个交叉编译应用
目录一、搭建交叉编译工具链环境二、交叉编译测试工程一、搭建交叉编译工具链环境Linux:Linaro Snapshotslinux下arm交叉编译工具链的安装-参考Android:NDK 下载 | Android NDK | Android Developersandroid-ndk-r17c解压后(uzip xxx.zip),进入ndk路径/build/tools,生成编译链./make-standalone-toolchain.sh --insta...原创 2022-01-01 11:45:21 · 142 阅读 · 4 评论 -
嵌入式Linux&Android开发-DTS介绍
目录一、DTS作用二、DTS与DTSI关系三、DTS如何转换为机器识别的文件四、设备树API五、DTS语法5.1 I2C DTS分析一、DTS作用设备树的出现是为了解决内核中大量的板级文件代码,把内核中与板卡相关的寄存器部分属性抽离出来,方便开发与维护。二、DTS与DTSI关系SDK工程DTS依赖关系 rk3399-embeded-aiojd4-lvds-HSX101H40C.dts-rk3399-embeded-aiojd4.原创 2021-12-31 09:44:46 · 601 阅读 · 4 评论 -
嵌入式Linux&Android开发-不同时期内核驱动开发方法
目录一、最小驱动二、在很久很久之前,我们这样开发驱动三、引入sysfs&设备驱动模型后,我们这样开发驱动总线、设备、驱动模型解析四、引入设备树后,我们这样开发驱动:五、总结一、最小驱动#include <linux/init.h>#include <linux/kernel.h>#include <linux/module.h>static int hello_init(void){ printk("hell原创 2021-12-28 15:12:18 · 1206 阅读 · 5 评论 -
嵌入式Linux&Android开发-内核文件系统介绍
所有的一切,都是为了更好的管理,使用设备。名词解析:Linux中设备驱动常见分类字符设备驱动、块设备驱动和网络设备驱动。字符设备驱动是占用篇幅最大的一类驱动,因为字符设备最多,从最简单的点灯到I2C、SPI、音频等都属于字符设备驱动的类型。杂项设备是一种特殊的类似字符设备的设备。块设备和网络设备驱动要比字符设备驱动复杂,就是因为其复杂所以半导体厂商一般都给我们编写好了,大多数情况下都是直接可以使用的。所谓的块设备驱动就是存储器设备的驱动,比如EMMC、NAND、SD卡和U盘等存储设备..原创 2021-12-23 10:00:00 · 251 阅读 · 1 评论 -
嵌入式Linux&Android开发-SDK介绍
目录一、Android系统架构二、SDK目录解析2.1 SDK子目录解析-Uboot2.2SDK子目录解析-Kenerl2.3SDK子目录解析-Android文件系统2.3.1Android文件系统子目录解析-Framworks三、固件目录解析一、Android系统架构二、SDK目录解析├── abi 应用程序二进制接口,描述了应用程序和操作系统之间,一个应用和它的库之间,或者应用的组成部分之间的低接口 。├── art 和androi...原创 2021-12-22 16:37:36 · 1592 阅读 · 1 评论 -
嵌入式Linux&Android开发-SDK下载&编译
目录一、SDK下载二、SDK编译2.1 手动编译(一般不用)2.2 脚本编译(推荐使用)2.3 编译可能出现的错误2.4 生成固件说明2.5 打包统一固件(发布时才用)一、SDK下载从网盘下载完成后放到本机位置~/rk3399_embeded网盘路径为->embeded_sdk->3399_embededmkdir -p ~/rk3399cd ~/rk3399cp rk3399-embeded.tgz ~/rk3399计算md5sum确认原创 2021-12-22 16:20:16 · 1420 阅读 · 1 评论 -
嵌入式Linux&Android开发-环境搭建
目录一、环境要求二、相关软件&SDK下载三、环境安装3.1 VMware Worksation3.2 Ubuntu18043.3 VSCode安装3.4 Samba服务器搭建一、环境要求编译 Android 对机器的配置要求较高:64 位 CPU 大于12GB 物理内存+交换内存(最好16GB以上)30GB 空闲的磁盘空间用于构建,源码树另外占用大约 25GB, 如果要编译源码则还需要 150GB 的磁盘空间。RK官方推荐使用 Ubuntu 16..原创 2021-12-22 15:49:00 · 304 阅读 · 2 评论 -
嵌入式Linux&Android开发-常用命令介绍
目录一、Linux常用命令介绍二、Git常用指令Git安装Git常用命令三、Patch常用指令生成patch应用patch打patch发生冲突如何解决?一、Linux常用命令介绍lsmkdircdcpmvrmgrepfindtar各种快捷键 Ctrl+E Ctrl+A Ctrl+Alt+T .....Linux常用指令教程:Linux命令大全(手册) – 真正好用的Linux命令在线查询网站https://www.linuxcool.com..原创 2021-12-22 15:15:41 · 193 阅读 · 2 评论