自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 linux并发和竞态2

SMP(对称多处理器), 中断, 强占式内核(多进程)并发导致的竞态.竞态通常是对共享资源的访问产生的, 因此驱动程序中要尽可能避免产生共享数据.最明显的,避免在驱动中使用全局变量全局变量不是共享数据的唯一途径, 只要我们的代码把一个指针传递给了内核的其他部分, 一个共享数据可能就会产生.解决共享的一个方式是"加锁".或者"互斥".1. 原子变量普通变量读改写三步导致访问一个基础变量也会有并发问题内核提供原子变量并使用专用访问的函数实现读。

2024-08-09 16:28:08 547

原创 linux iio 驱动

mask, 要读的是哪个功能,这和iio_chan_spec->info_mask_separate 指定的功能是一致的,即enum iio_chan_info_enum枚举。#define IIO_VAL_INT_PLUS_MICRO 2 //val表示整数部分, val2表示小数部分*1000 000 , 后的整数部分。// 核心, 驱动要实现的接口,编程重点./*如果使能了触发缓冲区,该变量是可用通道的掩码位,仅仅是可用,是否开启是active_scan_mask指定*/

2024-07-17 16:18:33 485

原创 linux GPIO子系统.

先放一张图...

2024-07-16 18:37:50 127

原创 PWM驱动

pwm驱动一般由芯片厂商编写.他的驱动编写和使用方法和GPIO高度相似.例如一个芯片1到多个多个GPIO控制器,和0到多个pwm控制器,一个gpio控制器在代码里对应一个stuct gpiochip,同样一个pwm控制器在代码里对饮搞一个 struct pwmchip. 并且使用方法也很相似.后面可以看到.PWM驱动分为pwm驱动和pwm设备pwm驱动由厂商提供位于:drivers/pwm/xxx.c目录下。

2024-07-16 18:33:19 522

原创 linux电源管理子系统

相反,应使用power_supply_*()函数(例如power_supply_get_property())来访问。来获取或设置供电设备的属性值.power_supply_desc->get_property,和power_supply_desc->set_property。

2024-07-15 11:13:12 559

原创 linux驱动中控制驱动的加载顺序.

** module_init() - 驱动初始化入口点* @x: 在内核启动时间或模块插入时运行的函数* module_init() 将在 do_initcalls() 期间(如果是内建驱动)或模块插入时间(如果是模块)被调用。* 每个模块只能有一个这样的入口点。*/结合上面的宏定义可知,默认的驱动注册有顺序是6.如果定义其他初始化顺序只需要使用相应的宏定义声明驱动的注册和注销函数即可.

2024-06-28 21:27:55 276

原创 设备树chosen节点的bootargs参数介绍

设备树的根目录下的chosen节点是一个特殊的节点, 它用作uboot 像内核传递参数.这里简单介绍如何使用bootargs参数从uboot传递参数到内核.

2024-06-11 18:53:00 617 1

原创 linux驱动-led子系统

led子系统实际是linux编写好的一个led驱动框架.对于驱动开发者来说只需要按照规定填充结构体然后调用api注册驱动,就可以完成一个led驱动的编写,并且这样写的led驱动为上层提供了统一的接口或者称为标准linux接口.方便了应用开发人员也减少了驱动开发人员的工作量.

2024-04-30 10:09:23 742

原创 i2c驱动程序(基于总线,设备,驱动,模型.)

至少从linux2.6开始linux为方便管理众多的驱动引入了总线, 设备,驱动模型.,总线由linux内核创建,,设备(device)由芯片厂商编写的驱动添加.驱动就是要驱动开发人员要编写的,比如陀螺仪驱动,触摸驱动等等.如果不是芯片原厂,大多数情况下不必关心总线和设备的创建. 按照规定在设备树里添加iic设备的节点然后使用i2c_add_driver()添加驱动即可,非常的方便.这里介绍下总线和设备的创建.不需要可以跳过.

2024-04-28 18:33:48 857

原创 linux的工作队列,

一个 struct work_struct 结构体代表了一个实际的工作, 工作再被添加到工作队列之前要指定工作的函数,使用#define INIT_WORK(_work, _func) 宏定义初始化一个工作. _work 是工作的地址._func 是工作的函数.注意: 如果一个工作已经在工作队列中还未执行完成则在此放入则不会再次执行. 还有一点, 一个工作队列中可以放入多个工作,但是一个工作阻塞其他工作也是无法执行.工作初始化好了,就可以把工作添加进工作队列中,工作队列就会自动执行工作了.

2024-04-05 15:07:53 315 1

原创 访问github,页面显示混乱问题解决.

140.82.113.3, 和 146.75.81.194要根据自己所属的位置确定.如何确定这个地址?windows 平台,浏览器直接访问www.github.com出现界面混乱问题,并且加载缓慢.选中hosts文件,右键,选择属性. 然后选择安全.按照下图修改权限即可.提示: 保存失败, 没有权限,可以按照如下方法修改文件权限.. 选择 ip lookup.最后保存hosts文件.

2024-01-09 16:51:03 484

原创 mipi 协议简介()

DSI接口(Display Serial Interface) 串行显示接口。

2024-01-05 22:25:38 284

原创 Android logcat常用几个命令

2. adb logcat 输出log到文件。1.1 按照log内容过滤。1.3 按照log等级过滤。1.2 按照TAG过滤。

2023-06-27 17:32:51 545

原创 Android-makefile 常用命令

Android-makefile 常用命令

2023-03-14 15:15:19 121

原创 Linux内核-模块参数基本用法

1.内核模块的作用一般用于装载内核模块使传递参数,比如设定串口驱动时设置默认的波特率。2.原型module_param(<变量名>,<变量类型>,<访问权限>)访问权限:S_IRUGP读权限,S_IWUSR:写权限。权限之间可以通过"|"进行连接,比如使用S_IRUGP|S_IWUSR表示读写权限,变量类型:bool、int、charp(字符串类型)特别要注意的...

2018-07-01 21:23:44 883 1

sturct iio-chain-spec

sturct iio_chain_spec

2024-07-17

空空如也

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

TA关注的人

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