自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(157)
  • 资源 (1)
  • 收藏
  • 关注

转载 Regulator 框架(二):Regulators 消费者接口

转载来源于:https://www.cnblogs.com/wanglouxiaozi/p/15091263.html消费者接口只要求驱动程序包含一个头文件:#include <linux/regulator/consumer.h>消费者可以是静态的,也可以是动态的。静态调节器只需要一个固定的电源,而动态调节器需要在运行时对调节器进行主动管理。从消费者的角度来看,调节器设备在内核中被表示为一个struct regulator 结构的实例,在drivers/regulator/interna

2022-05-22 09:24:51 1717

转载 Regulator 框架(一): PMIC /生产者 驱动接口

转载来源:https://www.cnblogs.com/wanglouxiaozi/p/15089298.html调节器(regulator)是一种为其他设备供电的电子设备。由调节器供电的设备被称为消费者。它们消耗调节器提供的电力。大多数调节器可以启用和禁用他们的输出,一些也可以控制他们的输出电压或电流。驱动程序应该通过特定的函数和数据结构向消费者公开这些功能,这些在稍后讨论。提供物理调节的芯片被称为电源管理集成电路(PMIC):Linux调节器框架被设计用于接口和控制电压和电流调节器。分为四个单独

2022-05-22 09:21:13 2091

原创 RK3399 Android8.1从APK到driver的示例

1.先看driver 驱动层:新增:kernel/drivers/char/virt_led.c#include <linux/module.h>#include <linux/kernel.h>#include <linux/cdev.h>#include <linux/uaccess.h>#include <linux/fs.h>#include <linux/ioport.h>#include <linux/

2022-05-20 11:57:49 652 3

原创 S5PV210基于pinctrl和gpio点亮led

led_pinctrl: led_pinctrl { samsung,pins = "gpj0-3", "gpj0-4", "gpj0-5"; samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>; samsung,pin-val = <1>; samsung,pin-pud = <S3C64XX_PIN_PULL_UP>; samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>;}

2021-03-25 21:39:53 260

原创 S5PV210 基于设备树点亮LED

device tree:/* 添加 led 节点 */led { #address-cells = <1>; #size-cells = <1>; compatible = "s5pv210, led"; ranges; /* 蓝灯子节点 */ blue_led@0xe0200240 { compatible = "s5pv210, blue_led"; reg = < 0xe0200240 0x4 0xe0200244 0x4

2021-03-23 22:30:04 389

原创 Device Tree信息获取

Device Tree信息获取:添加节点:/* 添加 led 节点 */led { #address-cells = <1>; #size-cells = <1>; /* 蓝灯子节点 */ blue_led@0xe0200240 { compatible = "s5pv210, blue_led"; reg = <0xe0200240 0x8>; status = "okay"; };};设备树信息获取代码:#include <

2021-03-22 07:36:46 224

原创 S5PV210基于linux 5.10.10驱动开发

第一个内核模块编写:#include <linux/module.h> #include <linux/init.h> // 模块安装函数static int __init chrdev_init(void){ printk(KERN_INFO "chrdev_init helloworld init\n"); return 0;}// 模块卸载函数static void __exit chrdev_exit(void){ printk(KE

2021-03-21 16:31:06 285

原创 win10 samba不能访问

https://blog.csdn.net/qq_39628285/article/details/104012722?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.control

2021-01-21 21:13:21 79

原创 linux 解决静态库之间连接顺序的问题

解决库之间链接顺序的问题:gcc main.c -Xlinker “-(” libb.a liba.a -Xlinker “-)”

2020-11-27 09:40:36 636

原创 内核链表详解 (struct list_head)

1.自己实现内核链表的部分2.内核链表使用举例#include <stdio.h>struct list_head{ struct list_head * prev; struct list_head * next;};#define LIST_HEAD_INIT(name) { &(name), &(name) } #define LIST_HEAD(name) \struct list_head name = LIST_HEAD_INIT(name)

2020-10-13 09:46:33 2071

原创 Segmentation fault 调试

gdb coredump 调试1.#设置core大小为无限ulimit -c unlimited2.#设置文件大小为无限ulimit unlimited3. ./a.out 产生core文件4. gdb ./a.out core5.bt 栈回溯,找到发生段错误的函数#include <stdio.h>#include <signal.h>#include <stdlib.h>void func(void){ int * p = 0x0; *p

2020-09-26 18:45:38 417

原创 sscanf的用法

部分来源:https://blog.csdn.net/zhouwei1221q/article/details/44890617感谢博主分享。若有侵权,请联系删除```c#include <stdio.h>#include <string.h>int main(int argc, char const *argv[]){ int a=0, b=0, c=0; char buf[64] = {'\0'}; sscanf("2015.04.05", "%d.%d.%

2020-08-28 15:36:29 314

原创 UART、I2C、SPI协议对比

串口总线协议详解串口一般是2根线,一个TX,一个RX,可进行异步全双工通信1.串口发送数据,低位在前,高位在后。2.串口线上面,空闲的时候是高电平的,发送数据的时候:<1>第一个bit位:起始位,是0,总线从高变为低,这个0持续的时间是 1/波特率(例如波特率是4800,那么这个0的持续时间就是 1/4800 = 0.000208s = 208us)<2>紧接着就是数据位,这里我们以8位数据位来说明,例如发送的是’1’,它的ascii码是49=0x31=0b0011 00

2020-06-27 21:39:50 307

原创 海思I2C总线操作

海思I2C总线操作1.使用I2C命令:i2c_write <i2c_num> <device_addr> <reg_addr> <value> <reg_width> <data_width>i2c_read <i2c_num> <device_addr> <reg_addr> <end_reg_addr><reg_width> <data_width> &

2020-06-20 14:37:08 3085

原创 海思GPIO和中断操作

中断部分:1.关于gpio的操作<1>gpio_request(gpio_num, NULL); 注册 GPIO<2>设置gpio方向:对于输入: gpio_direction_input(gpio_num) 对于输出: gpio_direction_output(gpio_num, gpio_out_val)<3>查看 GPIO 输入值或设置 GPIO 输出值gpio_get_value 查看输入值输出低: gpio_set_value(gpio_n

2020-06-20 11:09:07 2840 1

原创 poll函数深入理解

1.看poll函数的调用逻辑poll 应用的poll函数 sys_poll do_sys_poll /*初始化一个poll_wqueues变量table*/ poll_initwait(&table); __pollwait 将在驱动的poll函数里的poll_wait函数用到 table ->pt-> qproc=__pollwait; do_poll(nfds, head, &table, timeout); for (;

2020-06-18 20:09:17 1305

原创 DS1302

DS13021.SPI主要用于CPU和外围低速器件之间通信,同步串行数据传输,数据按bit传输,数据可以从最高bit传,也可以从最低bit传. 看器件自身的要求(譬如DS1302就是从最低bit开始传,XPT2046就是从最高bit开始传)2.有3线和4线两种,3线共用MOSI和MISO3.SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据4.BCD码:通过4bit进制码来表示1bit十进制中的0-9的这10个数字.BCD: 十六进制0 0x001

2020-05-24 16:28:46 439

原创 红外通信

1.红外发射装置又可由键盘电路、红外编码芯片、电源和红外发射电路组成。红外接收设备可由红外接收电路、红外解码芯片、电源和应用电路组成。通常为了使信号更好的被发射端发送出去,经常会将二进制数据信号调制成为脉冲信号,通过红外发射管发射。常用的有通过脉冲宽度来实现信号调制的脉宽调制(PWM)和通过脉冲串之间的时间间隔来实现信号调制的脉时调制(PPM)两种方法2.有发射端和接收端,所以就会对应有编码电路和解码电路3.红外常用的载波频率是35kHz原理图:代码:来源于普中科技单片机教程/********

2020-05-17 22:14:27 2559 2

原创 AD转换

AD转换1.AD转换就是模拟信号转数字信号2.我们使用的芯片是:xpt2046原理图:我们使用的是AIN03.引脚的含义:4.命令字的含义:5.操作时序:代码:来源于普中科技单片机教程void SPI_Write(uchar dat){ uchar i; CLK = 0; for(i=0; i<8; i++) { DIN = dat >> 7; //放置最高位 dat <<= 1; CLK = 0; //上升沿放置数据

2020-05-17 21:48:27 2613

原创 LCD1602

LCD16021.市面绝大部分液晶都是基于HD77480液晶芯片的,通常14引脚或者16(1条背光电源线VCC和地线GND),14和16控制原理相同,只是16的可以调节背光亮度.2.操作时序:3.代码:引脚作用:RS:控制写命令/数据的,0=命令,1=数据RW:控制读/写的,0=写,1=读E:1读取信息,1-0下降沿执行指令代码来源于普中科技例程#include "lcd.h"/***************************************************

2020-05-11 08:05:24 1260

原创 Ds18b20

ds18b20检测温度,显示在数码管上#include <reg52.h>#include <stdio.h>#include <intrins.h>typedef unsigned int u16;typedef unsigned char u8;typedef unsigned int uint;typedef unsigned char...

2020-05-01 16:29:24 170

原创 数码管显示任意数字

数码管显示任意数字,例如:1、 69、 888 、 6666、 11111类似的数字,只显示应该亮的数码管。代码:```c#include <reg52.h>#define LED_CHOOSE P2#define LED_VALUE P0sbit le = P1^0;sbit LA = P2^2;sbit LB = P2^3;sbit LC = P2^4;...

2020-05-01 12:30:17 6875

原创 linux异步消息:poll、select、epoll

linux异步消息:poll、select、epoll使用举例,epoll并没有深入探讨其参数#include <stdio.h>#include <poll.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h...

2020-04-25 14:41:26 240

原创 I2C——24C02

I2C——24C02I2C:1.I2C传数据先传高bit位,丛机收到数据后,若有应答,第9个时钟高电平期间,需要把SDA拉低。2.I2C主机接收数据,若有应答,第9个时钟高电平期间,需要把SDA拉低。3.起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/T),用“0”表示主机发送数据(T),“1”表示主机接收数据(R)4.24c02先关的时序要求:测试能正...

2020-04-18 16:12:00 476

原创 UART

uart1.并行通信控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难。串行通信的特点:传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂。2.异步通信与同步通信异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程异步通信是以字符(构成的帧)为单位进行传输3.单工是指数据传输仅能沿一个方向,不...

2020-04-11 16:37:24 338

原创 定时器

1.CPU时序的有关知识:振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)状态周期:2个振荡周期为1个状态周期,用S表示。振荡周期又称S周期或时钟周期。机器周期:1个机器周期含6个状态周期,12个振荡周期。指令周期:完成1条指令所占用的全部时间,它以机器周期为单位2.例如:外接晶振为12MHz时,51单片机相关周期的具体值为:振荡周期=1/12us;状态周期=1...

2020-04-11 12:50:21 364

原创 外部中断

中断:1.(P3.2)可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断2.(P3.3)可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1(TCON.3)置1,向CPU申请中断3.TF0(TCON.5),片内...

2020-04-05 15:08:37 750

原创 LED点阵

点阵参考文章:https://blog.csdn.net/weixin_41445387/article/details/805000461.74HC59514脚:DS(SER),串行数据输入引脚13脚:OE, 输出使能控制脚,它是低电才使能输出,所以接GND12脚:RCK,存储寄存器时钟输入引脚。上升沿时,数据从移位寄存器转存带存储寄存器11脚:SCK,移位寄存器时钟引脚,上升沿时...

2020-04-05 13:31:26 370

原创 按键(轮询)

按键:1.按键一边接GND,一边接GPIO引脚,按下的时候,把GPIO引脚拉低,松开的时候,GPIO恢复高电平。代码中的:while (!K1);其实是非常重要的,看注释效果:点击K1,LED0状态发生变化#include <reg52.h>sbit K1 = P3^1;sbit LED0 = P2^0;typedef unsigned char u8;void...

2020-04-04 17:16:01 1113

原创 数码管

数码管:1.数码管是有8段的,8段其实可以看为8个led(a,b,c,d,e,f,g,dp),分为共阴和共阳两种(所谓共阴其实就是阴极都连在一起,共阳就是阳极都连在一起的)第一张图是数码管的基本构建,第2张图是共阴形数码管,第3张图是共阳形数码管2.74ls138是38译码器,输入端为:P22、P23、P24,详情可以看原理图,输出为:LED1-LED8,这个其实就是led的选中处。...

2020-04-04 14:32:44 1243

原创 蜂鸣器

1.首先分清楚有源蜂鸣器和无源蜂鸣器2.看下原理图:3.ULN2003 是高耐压、大电流达林顿陈列,由七个硅NPN 达林顿管组成。ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。可直接驱动蜂鸣器、继电器等负载 。4.其实ULN2003就是电流放大的作用,输入是P15,那么我们控制P1.5端口就可以了5.下面看程序:```c#inclu...

2020-03-08 21:03:05 502

原创 LED部分

首先上原理图LED部分1.点亮第一个led#include "reg52.h" 头文件包含sbit led = P2^0; led代表P2.0端口,其实这里这样理解,P2其实是一个寄存器0xA0,P2^0代表寄存器0xA0的bit0void main(void){ led = 0; while(1);}2.led闪烁#include "reg52.h" /...

2020-03-08 20:51:54 329

原创 uboot的硬件驱动部分

uboot的硬件驱动部分1.uboot本身是裸机程序(1)裸机本来是没有驱动的概念的(狭义的驱动的概念就是操作系统中用来具体操控硬件的那部分代码叫驱动)(2)裸机程序中是直接操控硬件的,操作系统中必须通过驱动来操控硬件。这两个有什么区别?本质区别就是分层。2.uboot的虚拟地址对硬件操作的影响(1)操作系统(指的是linux)下MMU肯定是开启的,也就是说linux驱动中肯定都使用的...

2020-03-08 13:48:39 215

原创 uboot的环境变量

uboot的环境变量1.环境变量的作用(1)让我们可以不用修改uboot的源代码,而是通过修改环境变量来影响uboot运行时的一些数据和特性。譬如说通过修改bootdelay环境变量就可以更改系统开机自动启动时倒数的秒数。2.环境变量的优先级(1)uboot代码当中有一个值,环境变量中也有一个值。uboot程序实际运行时规则是:如果环境变量为空则使用代码中的值;如果环境变量不为空则优先使...

2020-03-08 13:47:51 239

原创 uboot命令体系

uboot命令体系1.使用uboot命令:uboot启动后进入命令行环境下,在此输入命令按回车结束,uboot会收取这个命令然后解析,然后执行。2.uboot命令体系的实现代码在uboot/common/cmd_xxx.c中。有若干个.c文件和命令体系有关。(还有command.c main.c也是和命令有关的)3.每个命令对应一个函数(1)每一个uboot的命令背后都对应一个函数。这...

2020-03-08 13:47:05 216

原创 uboot如何启动内核

uboot如何启动内核1.uboot和内核到底是什么?(1)uboot的本质就是一个复杂点的裸机程序。内核本身也是一个"裸机程序",操作系统内核本身就是一个裸机程序,和uboot、和其他裸机程序并没有本质区别。区别就是操作系统运行起来后在软件上分为内核层和应用层,分层后两层的权限不同,内存访问和设备操作的管理上更加精细(内核可以随便访问各种硬件,而应用程序只能被限制的访问硬件和内存地址)。(...

2020-03-01 14:47:57 231

原创 uboot启动的第二阶段分析

uboot启动第二阶段1.start_armboot函数,这个函数在uboot/lib_arm/board.c的第444行开始到908行结束(1)为什么这么长的函数,怎么不分成两三个函数?主要因为这个函数整个构成了uboot启动的第二阶段2.宏观分析:uboot第二阶段应该做什么?(1)概括来讲uboot第一阶段主要就是初始化了SoC内部的一些部件(譬如看门狗、时钟),然后初始化DDR并且...

2020-03-01 14:45:31 359

原创 uboot启动的第一阶段分析

uboot启动的第一阶段分析1.start.S引入,start.S在目录cpu/s5pc11x/下。(1)如何确认uboot的程序入口,那就是去分析u-boot.lds,从u-boot.lds找到uboot的程序入口为ENTRY(_start),因此_start符号所在的文件就是整个程序的起始文件,_start所在处的代码就是整个程序的起始代码。(2)在C语言中整个项目的入口就是main函数...

2020-02-16 13:21:34 464

原创 uboot配置编译过程分析

uboot配置编译过程分析uboot主Makefile分析1.uboot version确定(Makefile的24-29行)(1)uboot的版本号分3个级别:VERSION:主板本号PATCHLEVEL:次版本号SUBLEVEL:再次版本号EXTRAVERSION:另外附加的版本信息这4个用.分隔开共同构成了最终的版本号。VERSION = 1PATCHLEVEL = 3...

2020-02-15 13:43:03 292

原创 x210 uboot编译

x210 uboot编译1.源头的源代码是uboot官网下载的,SoC厂商在推出一款SoC后,厂商的工程师会去uboot官网下载一个uboot,根据自己的SoC进行第一步的移植,移植的目标是厂商推出的开发板。(譬如三星的S5PV210芯片厂商出的开发板就叫SMDKV210).所以三星的工程师移植的uboot是根据他们自己的SMDKV210开发板移植的2.具体的开发板供应商(譬如X210的生产商...

2020-02-14 18:58:20 246

linux内存查看工具

linux内存查看工具,devmem2

2019-08-13

空空如也

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

TA关注的人

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