驱动
__pop_
这个作者很懒,什么都没留下…
展开
-
工作队列 (五) 杂谈2
工作队列原创 2022-09-18 13:40:07 · 178 阅读 · 0 评论 -
驱动 (3.1) 在kernel中申请内存
kmallockzallockcallocLinux内核空间内存申请函数kmalloc、kzalloc、vmalloc的区别kzalloc()_kcalloc内核中申请内存的函数p = kzalloc(GFP_KERNEL);kfree(p);#define malloc(x) kzalloc(x,GFP_KERNEL)#define free(x) kfree(x)...原创 2019-04-25 22:56:16 · 889 阅读 · 0 评论 -
驱动 (4) 中断
linux_4.0/kernel/irq/proc.c show_interrupts/proc/interrupts列出当前所以系统注册的中断,记录中断号,中断发生次数,中断设备名称如下图:从右至右:中断号 中断次数 中断设备名称cat /proc/interrupts 读取到的内容从左到右,分别为:1、逻辑中断号(软件中断号,linux分配的中断号),2、中断...原创 2019-05-01 17:51:22 · 2049 阅读 · 1 评论 -
file_operations中的 ioctrl
3. 函数功能 1. 数据传输 内核->用户 // 大小由cmd 中 的第三个数值决定, 地址 为 unsigned long 参数,应该传个指针. 用户->内核 2. 命令交互 由cmd 的第二个数值和第一个数值决定4. 魔数打包_IO (魔数, 基数);_IOR (魔数, 基数, 变量型)_IOW (魔数, 基数, 变量型)_IOWR (魔数, 基数...原创 2019-05-02 21:32:19 · 470 阅读 · 0 评论 -
file_operations 与 驱动实现要求
阻塞非阻塞异步IO原创 2019-05-02 21:49:25 · 1064 阅读 · 0 评论 -
cdev inode file 结构体相关
cdevdev // 设备号inodecdevfileinodeprivate_datamode_t f_modeloff_t f_pos;unsigned int f_flags;struct file_operations *f_op;原创 2019-05-02 21:52:44 · 367 阅读 · 0 评论 -
EXPORT_SYMBOL
EXPORT_SYMBOLEXPORT_SYMBOL_GPL原创 2019-05-02 21:54:55 · 561 阅读 · 0 评论 -
如何快速了解一个内核模块
KconfigMakefileexportcflow alais原创 2019-05-02 21:56:08 · 205 阅读 · 0 评论 -
内核模块 (三) 安卓环境下编译ko文件
Makefileifneq ($(KERNELRELEASE),)# ko 文件名 不能与 目标文件名 相同MODULE_NAME = lkm_testobj-m := $(MODULE_NAME).o#目标文件名# file1.o file2.o dir1/file3.o$(MODULE_NAME)-objs := test.oelse CODEDIR ?= /ho...原创 2019-04-28 19:22:30 · 2584 阅读 · 0 评论 -
内核模块 (二) LKM加载
open("printk_test.ko", O_RDONLY|O_LARGEFILE) = 3 // 打开二进制文件,文件描述符为3read(3, "\177E", 2) = 2 // 打开并读取两个字节, '\177' 'E'_llseek(3, -2, [0], SEEK_CUR) = 0 // 回到第一个字节.fstat...原创 2019-04-28 23:32:52 · 369 阅读 · 0 评论 -
内核模块 (一) 杂谈
初衷为什么要添加内核模块功能宏内核微内核模块与模块之间的交互EXPORT_SYMBOL()EXPORT_SYMBOL_GPL()内核导出的符号表可以通过 cat /proc/kallsyms 查看如果一个文件是由多个文件组成,文件之间的交互不需要 export 模块参数static int mytest = 100; ...原创 2019-04-29 12:40:56 · 261 阅读 · 0 评论 -
驱动 (5) 并发与同步
内核并发1.0并发分为真并发和伪并发真并发 1. 多cpu(SMP)伪并发 2. 进程调度(进程与进程) 3. 中断与进程内核并发2.0归根接地就是这三种原因中断调度SMP但是1. 解决 中断 矛盾问题引入了软中断,也就引入了 软中断 产生的竞态2. 在 __irq_svc 返回时调度, 也就引入了内核抢占的 竞态.也就是现在有5个原因.中断...原创 2019-04-20 12:08:15 · 186 阅读 · 0 评论 -
Linux设备驱动程序知识点
字符设备驱动1. 了解linux内核字符设备驱动程序的架构2. 了解linux字符设备驱动相关的api3. 了解linux内存管理的api4. 了解linux内核中断管理的api5. 了解linux内核同步和锁等相关的api6. 了解你索要编写驱动的芯片原理1. 了解linux内核字符设备驱动程序的架构linux字符设备驱动的组织应用程序如何交互2. 了解linux字...原创 2019-05-01 10:55:15 · 427 阅读 · 0 评论 -
驱动 (1.1) linux字符设备驱动的组织及应用程序如何交互
字符设备驱动#include <linux/device.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/cdev.h>#include <linux/fs.h>#defin...原创 2019-05-01 11:03:22 · 369 阅读 · 0 评论 -
驱动 (3.2) copy_to_user
copy_to_user/*驱动端*//********filename : test.c********************************/#include <linux/module.h>#include <linux/fs.h>#include <linux/miscdevice.h>#include <linux/init.h>#include <a原创 2017-05-24 16:18:31 · 949 阅读 · 0 评论 -
sysfs_create_group 如何创建sys节点
unzip sys_value.ziprm sys_value.zip如果要在 node-i2c.c 中 使用这个 zip提供的函数修改obj-$(CONFIG_NODE_I2C) := node-i2c.o为obj-$(CONFIG_NODE_I2C) := node-i2c.o sys_value.o在 node-i2c.c 中 添加#include "sys_value.h...原创 2019-09-16 22:08:44 · 1398 阅读 · 0 评论 -
驱动中私有数据的存放
bddstruct device { void *platform_data; /* Platform specific data, device core doesn't touch it */ void *driver_data; /* Driver data, set and get with dev_set/get_drvdata */x...原创 2019-04-21 10:17:34 · 1208 阅读 · 0 评论 -
ds1339驱动源码及RTC设备驱动简介
RTC实时时钟,在嵌入式设备中以芯片来表现,一般有八个脚芯片会被一直供电.所以里面的一些寄存器会一直存在值,且一直都是变化的.linux中有两个时间,一个是rtc中的时间(一般由hwclock命令来控制),一个是linux系统中的时间(一般由date命令来控制)在系统启动时,可以在/etc/init.d/rcS中写入命令将rtc中的时间拷贝到linux中.从而达到看起来像是时间没掉电的表象RTC驱动原创 2017-04-25 23:26:10 · 3710 阅读 · 0 评论 -
访问外部设备寄存器的方法:ioport与iomem
IO端口与IO接口//这是硬件上的概念I/O接口 : 通常把介于主机和外设之间的一种缓冲电路称为I/O接口电路,简称I/O接口I/O端口 : CPU与外设进行信息交换时,各类信息通过I/O接口存入不同的寄存器中.这些寄存器被称作I/O端口。若干端口加上相应的控制电路才构成接口I/O端口分为 控制寄存器、状态寄存器和数据寄存器I/O端口与I/O内存访问外设寄存器的方式,分为两种(根据外设编址分类)原创 2017-07-31 15:35:07 · 7385 阅读 · 1 评论 -
驱动 (2.2) 字符设备驱动 与 kobject
前言本文大量引用了 Linux设备管理(二)_从cdev_add说起 和 kobject在字符设备中的使用本文讨论的是字符设备驱动与 kobject 的关系且在这个驱动中设备文件是通过mknod工具建立的,不是通过 class_create 和 device_create 建立的此为讨论的基础Q:字符设备驱动函数解析 中有两处提到了 object,字符设备驱动就符...原创 2018-08-27 16:45:14 · 549 阅读 · 0 评论 -
驱动 (2.1) 字符驱动框架函数解析
前言本篇文章从 一个简单的字符驱动框架 入手.讲述了 驱动注册\文件创建\应用程序的open\应用程序的read 四个方面来认识 字符设备驱动 到底做了什么.驱动注册驱动注册代码dev_number=MKDEV(MAJOR_C_DEV,MINOR_C_DEV);register_chrdev_region(dev_number,1,DEV_NAME);//reg...原创 2018-08-23 16:25:01 · 338 阅读 · 0 评论 -
input 子系统(一) input demo
关于怎么用input api 写驱动,参见创建输入设备驱动程序,实例参考 下面的demo关于怎么在用户空间监听 input 事件,参见下面的demo本篇提供了input内核驱动demo和用户空间监听程序demodemo内核驱动程序驱动makefile 请参考驱动makefile// insmod input_demo_driver.ko// 注意:此时会生成/dev/inp...原创 2019-02-23 11:01:14 · 462 阅读 · 0 评论 -
input 子系统(二) 杂谈
很多纯输入设备都是用的 input 子系统input 子系统 是 驱动里面一个非常重要的概念input 子系统的基础该系统 基于 class (class 基于 bbd 总线设备驱动模型) bbd 利用了 sysfs kobject_uevent 等等该系统又利用了 cdev 字符设备驱动模型该系统 利用了 内核链表 rcu链表该系统利用了 proc该系...原创 2019-02-23 13:17:19 · 228 阅读 · 0 评论 -
input 子系统(三) 文件接口
文件接口/proc/bus/input//sys/class/input//dev/input/利用 /proc/bus/input/handlers 查看 注册 的input handlers利用 /proc/bus/input/devices 查看 注册 的 input devices设备的 sys device 在哪里 /sys/class/input/ev...原创 2019-02-23 13:20:28 · 462 阅读 · 0 评论 -
input 子系统(四) input设备 注册及匹配
基于 linux-4.0input系统的 启动顺序1.// drivers/input/input.csubsys_initcall(input_init);2.// drivers/input/evdev.cmodule_init(evdev_init); input_register_handler(&amp;amp;evdev_handler);// drive...原创 2019-02-23 13:47:29 · 723 阅读 · 0 评论 -
input 子系统(五) 事件上报及监听
上报流程事件的生产者 是 input 设备驱动途径 input.c(input core),到达 handler,然后由handler 提供给消费者.驱动中的上报 input_report_key(button_dev, KEY_POWER,1); input_report_key(button_dev, KEY_POWER,0); input_syn...原创 2019-02-23 13:59:24 · 3581 阅读 · 0 评论 -
工作队列 (一) workqueue demo
工作队列 实际上就是 一个 内核线程维护了 一个 工作包队列, 这个线程叫做工作者线程然后 其他的任务 只需要创建 工作包, 然后 插入到工作包队列中, 并唤醒 工作者 线程此时 工作者线程就是一股脑的 开始 把工作包 队列 中 的 工作包 全部给 干完,干完就睡觉例如 你扔进去 一个 包 : 包名叫做 写一个 linux 内核, 然后 工作者醒了之后,就开始 写 linux 内...原创 2019-02-25 20:09:10 · 335 阅读 · 0 评论 -
工作队列 (二) 杂谈
工作队列是什么工作队列 实际上就是 一个 内核线程维护了 一个 工作包队列, 这个线程叫做工作者线程然后 其他的内核线程或者中断处理程序 只需要创建 工作包, 然后 插入到工作包队列中, 并唤醒 工作者 线程此时 工作者线程就是一股脑的 开始 把工作包 队列 中 的 工作包 全部给 干完,干完就睡觉例如 你扔进去 一个 包 : 包名叫做 写一个 linux 内核, 然后 工...原创 2019-02-25 22:07:23 · 183 阅读 · 0 评论 -
工作队列 (三) 数据结构与api
简介结构体static struct work_struct test_work; // 工作包的 结构体 // 工作队列中的成员 的 结构体也是这样子的static struct workqueue_struct * test_workqueue; // 工作者线程 和 工作队列的 抽象apiINIT_WORK // 将 work_str...原创 2019-02-26 22:46:37 · 239 阅读 · 1 评论 -
总线设备驱动模型之platform
platform 设备匹配drivers/base/platform.c platform_match 函数static int platform_match(struct device *dev, struct device_driver *drv);struct platform_device *pdev = to_platform_device(dev);struct plat...原创 2019-04-21 09:03:28 · 242 阅读 · 0 评论 -
总线设备驱动模型之i2c
i2c 设备匹配drivers/i2c/i2c-core.cstatic int i2c_device_match(struct device *dev, struct device_driver *drv);struct i2c_client *client = i2c_verify_client(dev);struct i2c_driver *driver;1. 前提...原创 2019-04-20 22:37:49 · 463 阅读 · 0 评论 -
杂项设备驱动
杂项设备杂项设备是一种字符设备,设备号是固定的,为10杂项设备驱动代码““c /***filename : test.c***************************/include include include include define MISC_NAME “miscdriver_test”/*********************************************原创 2017-04-13 14:07:22 · 614 阅读 · 0 评论