自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 资源 (2)
  • 收藏
  • 关注

原创 LVGL WIN32模拟器环境搭建

LVGL PC 模拟器环境搭建

2023-02-20 12:01:49 1853 1

原创 GPIO 模拟SPI

GPIO 模拟SPI总线

2022-10-21 17:09:43 2827 1

原创 SVN客户端安装及使用

SVN客户端安装及使用

2022-07-12 09:15:24 598

原创 PyQt5 学习

PyQt5学习

2022-06-10 11:10:24 1973

翻译 ASCII码对照表

记录ASCII码对照表十进制十六进制ASCII码00x00NUL10x01SOH20x02STX30x03ETX40x04EOT50x05ENQ60x06ACK70x07BEL80x08BS90x08HT100x0aLF110x0bVT120x0cFF130x0dCR140x0eSO150x0fSI160x10DLE

2022-04-07 10:53:26 8768

原创 RT-Thread I/O 设备模型

1、I/O 设备模型框架RT-Thread 提供了一套简单的 I/O 设备模型框架,分为三层结构,从上到下分别是 I/O 设备管理层、设备驱动框架层、设备驱动层。设备驱动层是驱使硬件设备工作的程序,实现访问硬件设备的功能。主要负责创建和注册 I/O 设备,对于操作逻辑简单的设备,可以不经过设备驱动框架层,直接将设备注册到 I/O 设备管理器中,主要有以下 2 点:设备驱动根据设备模型定义,创建出具备硬件访问能力的设备实例,将该设备通过rt_device_register() 接口注册到 I/O 设

2022-03-11 11:58:23 571

原创 Ubuntu 小知识

设置root密码终端输入sudo passwd root, 在[sudo] password for landry:后输入当前用户的密码安装net服务apt install net-toolsubuntu开启SSH服务SSH分客户端openssh-client和openssh-server安装 SSH :sudo apt-get install openssh-server然后确认sshserver是否启动了:ps -e | grep ssh如果看到sshd那说明ssh-serv

2022-02-15 18:46:46 563

原创 Android log等级修改

修改kernel log等级1、echo -n ‘file xxx.c +p’ > /d/dynamic_debug/control2、echo n > proc/sys/kernel/printk抓取kernel log1、adb shell dmesg2、cat /dev/kmsg抓取Android log1、adb logcat

2022-01-06 09:14:51 3221

原创 RK3568 Sensor FAQ

1、Camera SensorQ :Camera sensor I2C 通信异常A :1.首先确认 Sensor Power up Sequencesensor电源:avdd、dvdd、dovddsensor reset gpiosensor power down gpiosensor mclk 频率/幅度2、确认I2C BUS根据板子原理图找到sensor是挂在哪路I2C总线I2C 设备地址是否匹配I2C 通道上是否能够测量 I2C 信号I2C 信号质量是否符合要求,SCL 频

2021-12-31 09:55:36 1442

原创 LINUX网络驱动开发

1 Linux网络设备驱动程序概述Linux网络驱动程序遵循通用的接口。设计时采用的是面向对象的方法。一个设备就是一个对象(net_device 结构),它内部有自己的数据和方法。一个网络设备最基本的方法有初始化,发送和接收。Linux网络驱动程序的体系结构可以划分为四层:网络协议接口,网络设备接口,设备驱动功能,网络设备和网络媒介层网络驱动程序,最主要的工作就是完成设备驱动功能层。在Linux中所有网络设备都抽象为一个接口,这个接口提供了对所有网络设备的操作集合。由数据构struct net

2021-12-08 21:44:38 1661

原创 LINUX块设备驱动开发

1. 块设备驱动程序简介块设备驱动程序提供了面向数据块的设备的访问块设备驱动一般以随机的方式传输数据,并且数据总是具有固定大小的块。典型的块设备是磁盘驱动器类设备。块设备驱动程序简介块设备驱动接口相对复杂,字符设备接口简单。块设备驱动程序对整个系统的性能影响较大,速度和效率是设计块设备驱动要重点考虑的问题。系统中使用缓冲区与访问请求的优化管理(合并与重新排序)来提高系统性能。块设备驱动不可以通过节点直接访问。它需要通过文件系统挂载到目录下访问。当执行mount时则open。Umoun

2021-12-07 21:48:54 1222

原创 内存与IO访问

提 纲LINUX内存管理内存存取I/O内存访问接口将设备地址映射到用户空间I/O内存的静态映射DMA1 LINUX内存管理用户空间 0~3GB 内核空间3~4GB 每个进程的用户空间是完全独立、互不相干的,用户进程各自有不同的页表。内核空间是由内核负责映射,不会跟着进程改变。用户程序需要通过系统调用才能访问内核空间。当系统的物理内存大于4GB,则需要使用CPU的扩展分页(需要CPU支持)。2 内存存取2.1 用户空间内存动态申请char *p = (char *)mal

2021-11-22 19:52:09 614

原创 中断与时钟

中断处理中断指CPU在执行程序的过程中,出现了某些突发事件时CPU必须暂停执行当前的程序,转去处理突发事件,处理完毕后CPU又返回原程序被中断的位置并继续执行。中断分类:外部中断 VS 内部中断可屏蔽中断 VS 不可屏蔽中断向量中断 VS 非向量中断LINUX中处理中断程序的架构如果中断本身要处理的工作很少,则直接在顶半步完成。中断实现在Linux驱动程序中,为设备实现一个中断包含两个步骤:1.向内核注册中断2.实现中断处理函数中断注册在<linux/interrupt.h

2021-11-22 19:37:14 996

原创 RK3568 VCM 驱动

VCM 设备注册(DTS)RK VCM 驱动私有参数说明:名称定义启动电流VCM 刚好能推动模组镜头从模组镜头可移动行程最近端(模组远焦)移动,此时 VCM driver ic 的输出电流值定义为启动电流额定电流VCM 刚好推动模组镜头至模组镜头可移动行程的最远端(模组近焦),此时 VCM driver ic 的输出电流值定义为额定电流VCM 电流输出模式VCM 移动过程中会产生振荡,VCM driver ic 电流输出变化需要考虑vcm 的振荡周期,以便最大程度减

2021-11-18 11:50:08 1590 1

原创 Git常用命令

一些命令和概念:环境配置获取Git仓库工作目录、暂存区以及版本库概念Git工作目录下文件的两种状态本地仓库操作Git标签环境配置设置用户信息$ git config --global user.name “username”$ git config --global user.email “[email protected]”查看配置信息$ git config --list$ git config user.name获取Git仓库在本地初始化一个Git仓库https:

2021-11-18 09:44:08 100

原创 从命令行创建一个新的git仓库

以README为例,添加本地文件到远程git仓库touch README.md进入项目根目录,初始化本地仓库git init添加文件到暂存git add README.md将暂存区内容添加到本地仓库中git commit -m "message"message 是一些备注信息。git commit -a-a 参数设置修改文件后不需要执行 git add 命令,直接来提交关联到远程仓库git remote add origin http://127.0.0.1:xxxx/fo

2021-11-18 09:10:03 567

原创 异步 IO

IO分类阻塞IO非阻塞IOIO复用(select)异步IO(信号驱动的IO)IO类型1、异步通知:一旦设备就绪,则主动通知应用程序。异步通知意味则设备通知自身可访问,实现了异步I/O.由内核向应用程序发信号,类似中断。2、阻塞I/O意味着一直等待设备可访问后再访问。3、非阻塞IO,设备不可访问,则马上返回。4、轮询I/O,使用poll()查询设备是否可访问。Linux 中最为常见信号的含义及其默认操作,详见Linux信号列表.pdf。重点关注的信号:SIGIO 键盘输入或

2021-11-15 19:28:22 1784

原创 阻塞 IO

进程的状态在操作系统中,进程至少要有三种基本状态:运行状态,就绪状态和等待状态。1)就绪——执行:对就绪状态的进程,当进程调度程序按一种选定的策略从中选中一个就绪进程,为之分配了处理机后,该进程便由就绪状态变为执行状态;2)执行——等待:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为等待状态,如进程提出输入/输出请求而变成等待外部设备传输信息的状态,进程申请资源(主存空间或外部设备)得不到满足时变成等待资源状态,进程运行中出现了故障(程序出错或主存储器读写错等)变成等待干预状态等等;

2021-11-15 19:11:05 1027

原创 RK356X UART 使用

功能特点Rockchip UART (Universal Asynchronous Receiver/Transmitter) 基于16550A串口标准,完整模块支持以下功能:支持5、6、7、8 bits数据位支持1、1.5、2 bits停止位支持奇校验和偶校验,不支持mark校验和space校验支持接收FIFO和发送FIFO,一般为32字节或者64字节支持最高4M波特率,实际支持波特率需要芯片时钟分频策略配合支持中断传输模式和DMA传输模式支持硬件自动流控,RTS+CTS普通串口驱

2021-11-12 16:03:09 5230 1

原创 RK356X SPI 使用

Rockchip SPI 功能特点SPI (serial peripheral interface),以下是 linux 4.4 spi 驱动支持的一些特性︰默认采用摩托罗拉 SPI 协议支持 8 位和 16 位软件可编程时钟频率和传输速率高达 50MHz支持 SPI 4 种传输模式配置每个 SPI 控制器支持一个到两个片选除以上支持,linux 4.19 新增以下特性:框架支持 slave 和 master 两种模式代码路径内核配置DTS 节点配置spi1: spi@fe62

2021-11-12 15:13:23 3109

原创 RK3568 Sensor驱动开发移植(3)

Probe 函数Probe 函数中,通常先对 dts 进行解析,获取CAMERA_MODULE 信息: ret = of_property_read_u32(node, RKMODULE_CAMERA_MODULE_INDEX, &gc8034->module_index); ret |= of_property_read_string(node, RKMODULE_CAMERA_MODULE_FACING, &gc8034->module_facing); re

2021-11-12 12:01:31 3332

原创 RK3568 Sensor驱动开发移植(2)

v4l2_subdev_opsv4l2_subdev_ops 回调函数是 Sensor 驱动中逻辑控制的核心。回调函数包括丰富的接口,具体可以查看kernel 代码 include/media/v4l2-subdev.h 。建议 Sensor 驱动至少包括如下回调函数:static const struct v4l2_subdev_ops gc8034_subdev_ops = { .core = &gc8034_core_ops,//Define core ops callbacks for

2021-11-12 11:46:28 4214

原创 RK3568 Sensor驱动开发移植(1)

说明RK3568 Sensor 驱动位于 drivers/media/i2c 目录下。可以把Sensor 驱动的开发移植概括为以下 5 个部分:按照Sensor的datasheet 编写上下电时序,主要包括 vdd、reset、powerdown、clk 等配置Sensor 的寄存器以输出所需的分辨率、格式编写 struct v4l2_subdev_ops 所需要的回调函数,一般包括 set_fmt、get_fmt、s_stream、s_power增加 v4l2 controller 用来设置

2021-11-12 10:44:58 10180 5

原创 RK3568 Camera 使用

MIPI CSI用法RK3568平台仅有一个标准物理mipi csi2 dphy,可以工作在full mode 和split mode两个模式, 拆分为csi2_dphy0/csi2_dphy1/csi2_dphy2三个逻辑dphy(参见rk3568.dtsi)简单点来讲,如果用单目摄像头配置为full mode,若使用双目摄像头配置为split modeFull Mode仅使用csi2_dphy0,csi2_dphy0与csi2_dphy1/csi2_dphy2互斥,不可同时使用;data l

2021-11-10 15:28:45 10683 7

原创 展锐平台的camera sensor驱动代码设计解析(1)

Camera驱动的基本配置及文件路径说明驱动的配置在路径:\device\sprd\platform\board\camera\sensor_config.xml驱动代码的路径在:\vendor\sprd\modules\libcamera\sensor\sensor_drv\classic下,里面有各个sensor厂商的驱动,比如Galaxycore,Superpix,Samsung等。.xml 文件的配置解析 <root> <!--> sensor id 0

2021-11-10 14:25:10 3178 4

原创 展锐平台的camera sensor驱动代码设计解析(3)

Camera驱动的基本配置及文件路径说明驱动的配置在路径:\device\sprd\platform\board\camera\sensor_config.xml驱动代码的路径在:\vendor\sprd\modules\libcamera\sensor\sensor_drv\classic下,里面有各个sensor厂商的驱动,比如Galaxycore,Superpix,Samsung等。驱动.c文件的配置解析在打开camera调用库的时候会调用到如下函数void *sensor_ic_ope

2021-11-10 12:03:57 2417

原创 展锐平台的camera sensor驱动代码设计解析(2)

Camera驱动的基本配置及文件路径说明驱动的配置在路径:\device\sprd\platform\board\camera\sensor_config.xml驱动代码的路径在:\vendor\sprd\modules\libcamera\sensor\sensor_drv\classic下,里面有各个sensor厂商的驱动,比如Galaxycore,Superpix,Samsung等。驱动.h文件的配置解析宏定义解释#define VENDOR_NUM 1#define SENSOR_N

2021-11-10 11:53:42 3804

原创 并发与竞争

什么是并发?并发指的是多个执行单元同时被执行。并发的执行单元对共享资源(硬件资源和软件上的全局变量等)的访问就容易导致竞态。即使最简单的设备驱动程序也要考虑并发与竞态并作出相应处理。例:if (copy_from_user(dev->mem+p, buf, count))ret = -EFAULT; goto out;假设有 2 个进程试图写入同一个设备的相同偏移,就会造成数据混乱。导致并发的可能原因1 对称多处理器的多个CPU多个CPU可访问共同的外设和存储器2 单CPU

2021-11-09 20:28:47 126

原创 W25Q64调试

简介W25Q系列的器件在灵活性和性能方面远远超过普通的串行闪存器件。W25Q64将8M字节的容量分为128个块,每个块大小为64K字节,每个块又分为16个扇区,每个扇区4K个字节。引脚介绍串行数据输入、输出和 IOs(DI、DO 和 IO0、IO1、IO2、IO3)W25Q64、W25Q16 和 W25Q32 支持标准 SPI、双倍 SPI 和四倍 SPI。标准的 SPI 传输用单向的 DI(输入)引脚连续的写命令、地址或者数据在串行时钟(CLK)的上升沿时写入到芯片内。写保护(/WP)写保护

2021-11-09 16:35:40 4118

原创 字符设备驱动(2)

字符设备驱动在Linux字符设备驱动程序设计中,有4种非常重要的数据结构:Struct fileStruct inodeStruct cdevStruct file_operationsStruct File(sbh_p92)代表一个打开的文件,系统中每个打开的文件在内核空间都有一个关联的 struct file。它由内核在打开文件时创建, 在文件关闭后,内核释放这个数据结构。重要成员:1 loff_t f_pos /文件读写位置/2 struct file_operations *

2021-11-03 23:28:20 295

原创 字符设备驱动(1)

主次设备号字符设备通过字符设备文件来存取。字符设备文件由使用ls -l 的输出的第一列的“C”标识。如果使用ls -l命令,会看到在设备文件项中有两个数(由一个逗号分隔),这些数字就是设备文件的主次设备编号。(举例查看 /dev)设备号作用主设备号用来标识与设备文件相连的驱动程序。次设备号被驱动用来决定操作的是哪个设备。** 主设备号用来体现设备类型** 次设备号用来体现某种设备类型中的第几个Q: 内核中如何描述设备号A:struct dev_t ,实质为unsigned int 32位整数,

2021-11-03 23:11:47 179

原创 Android.bp文件简介

Android.bpAndroid.bp的出现就是为了替换Android.mk文件。bp跟mk文件不同,它是纯粹的配置,没有分支、循环等流程控制,不能做算数逻辑运算。如果需要控制逻辑,那么只能通过Go语言编写。语法根据设计,Android.bp 文件很简单。它们不包含任何条件语句,也不包含控制流语句;所有复杂问题都由用 Go 编写的编译逻辑处理。Android.bp文件记录着模块信息,每一个模块以模块类型开始,后面跟着一组模块的属性,以名值对(name: value)表示,每个模块都必须有一个 na

2021-11-03 17:07:09 7313

原创 LINUX 内核模块

范例程序结构模块加载函数(必须)安装模块是被系统自动调用的函数,通过module_init宏来指定,在HelloWorld模块中,模块加载函数为hello_init。一般以__init表示声明。__init是宏,代表这个函数会放到段“.init.text”模块卸载函数(必须)卸载模块是被系统自动调用的函数,通过module_exit宏来指定,在HelloWorld模块中,模块卸载函数为hello_exit。一般以__exit表示声明。模块加载函数和卸载函数的功能程序结构许可证申明(必须

2021-11-01 21:36:49 169

原创 Linux设备驱动入门

Linux驱动配置什么是驱动程序驱动程序是应用层和硬件设备之间的一个软件层。它向应用层提供了一组标准化的调用接口,同时完全隐藏设备的工作细节。无操作系统时的设备驱动有操作系统时候的设备驱动有了操作系统之后,设备驱动反而变得更加复杂了,那么还要操作系统做什么?一个复杂的软件系统需要处理多个并发的任务提供内存管理机制,对于LINUX操作提供可以让每个进程都独立的访问硬件设备设备驱动都按照操作系统给出的独立于设备的接口而设计,应用程序将可使用统一的系统调用接口来访问各个设备LIN

2021-11-01 20:51:24 2136

原创 RK3568 PWM 使用

前言现在记录一下rk3568下pwm的驱动编写,下面是内核pwm的API,参考于开源论坛(firefly的开源论坛里面的Wiki教程)说明ROC-RK3568-PC的 PWM 驱动为:kernel/drivers/pwm/pwm-rockchip.cDTS配置配置 PWM 主要有以下三大步骤:配置 PWM DTS 节点、配置 PWM 内核驱动、控制 PWM 设备。配置 PWM DTS节点在 DTS 源文件 kernel/arch/arm64/boot/dts/rockchip/rk356x-f

2021-10-18 11:35:31 6681

原创 RK3568 I2C使用

说明RK3568有 6 个片上 I2C 控制器,各个 I2C 的使用情况如下表:配置 I2C 可分为两大步骤:定义和注册 I2C 设备定义和注册 I2C 驱动定义和注册 I2C 设备在注册 I2C 设备时,需要结构体 i2c_client 来描述 I2C 设备。而在标准 Linux 中,只需要提供相应的 I2C 设备信息,Linux 就会根据所提供的信息构造 i2c_client 结构体。所提供的 I2C 设备信息以节点的形式写到 DTS 文件中,修改dts,添加新的i2c设备。在 arc

2021-10-18 10:57:08 3711

原创 RK3568 LCD使用

Config配置RK3568 SDK下kernel/arch/arm64/configs/*_defconfig已经把LCD相关的配置设置好了,如果自己做了修改,请注意把以下配置加上:CONFIG_DRM_ROCKCHIP=yCONFIG_ROCKCHIP_DW_MIPI_DSI=yCONFIG_DRM_PANEL_SIMPLE=yMIPI DTS配置以RK3568的SDK 中MIPI DSI的DTS文件为例(kernel/arch/arm64/boot/dts/rockchip/rk356

2021-10-18 10:24:23 3952 5

原创 RK3568 GPIO 使用

说明GPIO, 全称 General-Purpose Input/Output(通用输入输出),是一种软件运行期间能够动态配置和控制的通用引脚。 所有的 GPIO 在上电后的初始状态都是输入模式,可以通过软件设为上拉或下拉,也可以设置为中断脚,驱动强度都是可编程的,其核心是填充 GPIO bank 的方法和参数,并调用 gpiochip_add 注册到内核中。本文以 GPIO0_B4 和 GPIO4_D5 这两个 GPIO 口为例写了一份简单操作 GPIO 口的驱动,以下就以该驱动为例介绍 GPIO 的

2021-10-15 16:26:13 10322 4

原创 RK356X ADC 使用

说明以下用 SAR-ADC 为例子,介绍 ADC 的基本配置方法。ADC常用接口说明1、iio_channel_getstruct iio_channel *iio_channel_get(struct device *dev, const char *consumer_channel);功能:获取 iio 通道描述参数:dev: 使用该通道的设备描述指针consumer_channel: 该设备所使用的 IIO 通道描述指针2、iio_channel_releasevoid iio_

2021-10-15 15:14:28 2051

原创 全志 :gpio使用

全志 :gpio使用通过datasheet可以查看gpio配置:问题描述:gpio控制器都是由厂商负责驱动好的,在设备树里关于gpio pinctrl的描述,例如: pio: pinctrl@01c20800 { compatible = "allwinner,sun50i-pinctrl"; reg = <0x0 0x01c20800 0x0 0x400>; interrupts = <0 11 4>, <0 17 4>

2021-09-02 16:35:26 4351

中级软考嵌入式软件工程师总结

2022年5月参加软考嵌入式软件工程师考试,特此记录

2022-09-06

rk356x_android11_ov9281.c

rk356x_android11_ov9281.c

2021-12-31

多功能播放器概要设计阶段--概要设计说明书

多功能播放器概要设计阶段--概要设计说明书

2015-09-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除