linux驱动
文章平均质量分 89
Auv开心
这个作者很懒,什么都没留下…
展开
-
linux内核等待队列机制编程框架—内核进程随时随地唤醒休眠
等待队列机制:让用户进程在内核空间随时随地休眠,随时随地被唤醒的一种机制#define init_waitqueue_head(q) \ do { \ static struct lock_class_key __key; \ \ __init_waitqueue_head((q), #q, &__key); \ } while (0)...原创 2020-09-06 17:39:18 · 627 阅读 · 0 评论 -
git repo入门操作学习笔记
这里写自定义目录标题git initgit init原创 2020-07-29 10:04:25 · 324 阅读 · 1 评论 -
字符设备驱动的简化版混杂设备驱动
我们在上一篇文章中聊的字符设备驱动的写法,参见linux驱动三种写法之——软硬件信息未分离(以字符设备驱动程序为例)混杂设备的说明如标题,内核提供了一种简化字符设备驱动的写法,是将主设备号固定为10,然后可以设置内核自动分配次设备号来区分设备个体,本质上还是字符设备,就是将上述链接中的字符设备驱动框架中的【设备号处理工作】和【字符设备对象的处理工作】打包在【混杂设备对象的处理工作】中了。字符设备驱动框架 与 混杂设备驱动框架 对比图看一下【字符设备驱动框架】和【混杂设备驱动框架】的差异就明白了原创 2020-06-24 01:15:11 · 305 阅读 · 1 评论 -
linux内核同步机制编程框架
文章目录linux系统中出现并发与竞态相关概念:四种情形:linux内核解决竞态引起的异常的方法:即同步方法中断屏蔽概念特点中断屏蔽的编程步骤中断屏蔽相关宏函数应用实例自旋锁概念特点利用自旋锁同步的编程步骤信号量原子操作linux系统中出现并发与竞态相关概念:并发:多个执行单元(进程和中断)同时发生竞态:多个执行单元对共享资源的同时访问所形成的竞争的状态须具备以下三个条件:1. 必须有多个执行单元2. 必须有共享资源3. 必须同时访问共享资源:比如软件上的原创 2020-07-20 20:51:44 · 835 阅读 · 1 评论 -
优化与内存屏蔽
当使用优化的编译器时,千万不要认为指令会严格按照它们在源代码中出现的顺序执行。例如,编译器可能重新安排汇编语言指令让寄存器以最优的方式使用。此外,现代CPU通常并行地执行若干条指令,且可能重新安排内存访问。这种重新排序可以极大地加速程序的执行。然而,当处理同步时,必须避免指令重新排序。如果放在同步原语之后的一条指令在同步原语本身之前被执行,事情很快就会变得失控。事实上,所有的同步原语起到优化和内存屏蔽的作用。优化屏障(optimization barrier)原语保证编译程序不会混淆在原语操作之前的汇原创 2020-07-19 00:14:59 · 583 阅读 · 0 评论 -
linux内核软件定时器编程框架
文章目录linux 内核软件定时器简介:描述软件定时器的结构体timer_list软件定时器相关的配套函数linux 内核软件定时器简介:定时器是一种软件功能:即允许在将来的某个时刻,函数在给定的时间间隔用完时被调用。内核软件定时器特点:可以指定一个超时时间,一旦超时时间到期,内核就会调用定会器的超时处理函数,切记: linux 内核软件定时器基于软中断实现,所以其超时处理函数不能进行休眠操作。内核和进程广泛使用定时器。大多数设备驱动程序利用定时器检测反常情况,例如,软盘驱动程序使用定时器在原创 2020-07-17 20:49:59 · 631 阅读 · 1 评论 -
【跟着韦东山学习linux设备树】内核中device_node转换为platform_device的函数调用分析
内核中device_node转换为platform_device的函数调用分析of_platform_default_populate_init 函数调用过程1. start_kernel() 函数定义在init/main.c2. rest_init()函数定义在init/main.c3. kernel_init()4. kernel_init_freeable()5. do_basic_setup()6. do_initcalls()of_platform_default_populate_init函数生原创 2020-07-08 16:52:38 · 1308 阅读 · 1 评论 -
linux内核I2C驱动编程框架简析(一)
文章目录linux内核I2C驱动编程机制struct i2c_client定义如下struct i2c_board_infostruct i2c_driverI2C驱动跟前面介绍的linux内核驱动的platform机制一样,也是总线-设备-驱动模型。同样是使用内核的bus_type结构体定义了一个虚拟总线i2c_bus_type。bus_type结构体定义如下/** * struct bus_type - The bus type of the device * * @name: The na原创 2020-07-07 17:37:06 · 436 阅读 · 0 评论 -
系统管理总线(SMBus)介绍
SMBus介绍系统管理总线协议概要系统管理总线 关键标记表SMBus接口函数1. SMBus Quick Command2. SMBus接收字节函数:i2c_smbus_read_byte()3. SMBus发送字节函数:i2c_smbus_write_byte()4. SMBus读取字节函数:i2c_smbus_read_byte_data()5. SMBus读取字(两字节)函数:i2c_smbus_read_word_data()6. SMBus写字节函数:i2c_smbus_write_byte_原创 2020-07-07 00:20:34 · 15713 阅读 · 3 评论 -
【跟着韦东山学习linux设备树】dtb转换为device_node(unflatten)树状结构
跟着韦东山学习linux设备树—dtb转换为device_node树状结构引子函数调用过程1. start_kernel() 函数定义在init/main.c2. setup_arch()函数定义在arch/arm/kernel/setup.c3. arm_memblock_init()函数定义在arch/arm/mm/init.c3.1. 函数early_init_fdt_reserve_self();定义在drivers/of/fdt.c3.2. 函数early_init_dt_reserve_memo原创 2020-07-01 22:57:27 · 842 阅读 · 1 评论 -
linux设备树的平台信息认证之匹配过程简析
linux设备树的平台信息认证之匹配过程简析1. start_kernel() 函数定义在init/main.c2. setup_arch()函数定义在arch/arm/kernel/setup.c3. setup_machine_fdt()函数定义在arch/arm/kernel/devtree.c4. of_flat_dt_match_machine();//定义在drivers/of/ftd.c当使用compatible属性跟machine_desc中的dt_compat比较时,按照上述的优先级进行原创 2020-07-01 00:11:53 · 650 阅读 · 1 评论 -
【入门级别】linux内核驱动三种写法之——platform分离机制
【入门级别】linux内核驱动三种写法之——platform分离机制前言框架图实例代码遇到问题前言关于想追本溯源理清楚linux驱动的写法,前面已经写了三篇链接如下1.【入门级别】linux驱动的三种写法之前言——裸机程序2.【入门级别】linux驱动三种写法之——软硬件信息未分离(以字符设备驱动程序为例)3.字符设备驱动的简化版混杂设备驱动今天我们来学习下linux内核驱动的platform分离机制,关于这部分的理论知识,我在如下这一篇博文中有详细介绍,就不再赘述。linux platfor原创 2020-06-26 11:48:27 · 840 阅读 · 0 评论