linux驱动
JiaXianghao.
这个作者很懒,什么都没留下…
展开
-
设备驱动(7)-ioctl
ioctlioctl用来干什么的? 除了读取和写入设备之外,大部分驱动程序还需要另外一种能力,即通过设备驱动程序执行各种类型的硬件控制。ioctl就是用来进行硬件控制的。虽然这个接口存在争议,但是它仍然是操作设备最简单、最直接的方法。 &nb...原创 2019-08-18 10:51:46 · 1051 阅读 · 0 评论 -
设备驱动(5)-字符设备驱动
字符设备驱动 scull scull(区域装载的简单字符工具):是一个操作内存区域的字符设备驱动程序,这片内存区域相当于一个设备。 对于字符设备的访...原创 2019-08-18 10:50:31 · 84 阅读 · 0 评论 -
设备驱动(6)-file_operations
设备操作函数open方法 open方法用来初始化我们的设备通常完成以下工作: 1)检查设备特定的错误 2)如果设备时首次打开,则对其进行初...原创 2019-08-18 10:49:49 · 503 阅读 · 0 评论 -
设备驱动(4)-初始化、清理以及错误处理
初始化、清理以及错误处理模块初始化static int __init initialization_function(void){ //初始化代码}module_init(initialization_function); 初始化函数应该被声明为static,因为这种函数在特定文件之外是没有其他意义的...原创 2019-08-18 10:48:49 · 419 阅读 · 0 评论 -
设备驱动(1)-驱动程序简介
学习linux设备驱动的第一天 首先第一个问题,设备驱动是干什么用的?Linux设备驱动程序使得特定的硬件响应一个定义良好的内部编程接口(系统调用open、read、write、close),这些接口完全隐藏了设备的工作细节。使得用户通过调用标准的系统调用来完成对于硬件的操作。  ...翻译 2019-08-16 19:49:48 · 440 阅读 · 0 评论 -
设备驱动(2)-内核功能
&n...翻译 2019-08-16 19:49:31 · 64 阅读 · 0 评论 -
设备驱动(3)-构造和运行模块
构造和运行模块 要想运行模块,首先需要在自己的系统中配置并构造好内核树(最好是和模块将要工作的版本一样),先前的内核只需要有一套内核头文件就够了,但是2.6的内核模块要和内核代码树中的目标文件连接,通过这种方式,可以得到一个更加健壮的模块装载器,前提是需要这些目标文件存在于内核目录树中。 &...原创 2019-08-18 09:56:06 · 143 阅读 · 0 评论 -
linux设备驱动(10)-ioremap
使用ioremap函数控制LED 前面我们已经知道了怎样通过GPIOlib库来控制我们的LED,并且也可以像控制51单片机一样在没有加载操作系统内核之前,直接访问寄存器来控制LED灯的闪烁,现在我们通过另外一种方法来控制LED灯,那就是通过ioremap函数将物理地址映射到虚拟地址上,进而操作寄存器。 ...原创 2019-08-20 20:45:07 · 396 阅读 · 0 评论 -
linux设备驱动(8)-中断
首先回顾stm32裸机中断编程中断过程:CPU执行主程序,当中断源产生中断事件,CPU响应中断请求,转向执行中断服务程序(处理中断事件),中断服务执行成功后,转到后来主程序的断点继续执行。中断源:GPIO口,定时器,ADC,一条软件指令。中断事件:引脚电平变化,计数溢出,转换完成,SWI。中断服务程序。处理中断事件,要快进快出。void xxxx_isr(void){}内核中断的...原创 2019-08-20 13:54:36 · 296 阅读 · 0 评论 -
杂项设备+中断+休眠实现按键
/************************************************************************ > File Name: misc.c > Author: Jia Xiang Hao > Description: > Created Time: 2019年08月11日 星期日 19时0...原创 2019-08-20 13:28:22 · 85 阅读 · 0 评论 -
linux设备驱动(11)- 平台设备驱动
led_drv.c/********************************************* * 头文件包含区 * ******************************************/#include <linux/module.h>#include <linux/init.h>#include &l...原创 2019-08-23 19:47:31 · 128 阅读 · 0 评论 -
linux设备驱动(9)-GPIOLIB
使用GPIOlib需要包含的头文件#include <linux/gpio.h>#include <linux/io.h>(1)、dts添加gpio的节点:在dts文件上添加,通常在设备树中以 reset-gpios = <&gpio1 15 1>;来表示gpio(2)、解析dts文件并且获取gpio口:gpio号 = of_get_named...原创 2019-08-20 09:58:52 · 281 阅读 · 0 评论 -
container_of以及offsetoff
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)/** * container_of - cast a member of a structure out to the containing structure * @ptr: the pointer to the member. * @type...原创 2019-08-18 17:48:43 · 224 阅读 · 0 评论 -
printk函数相关知识
printk函数 printk函数在linux内核中定义,功能和标准C库中的printf函数类似。因为内核需要自己的打印函数,又不能依赖于C库,模块在连接到内核之后就可以访问内核的公共符号。其中KERN_ALERT定义了这条消息的优先级。在<linux/kernel.h>中定义了8种记录级别,按照优先级...原创 2019-08-18 17:40:04 · 436 阅读 · 0 评论 -
cdev_init的分析
cdev_init的分析不说废话直接上源码。在内核的角度来看,一个cdev结构体就是一个字符设备。struct cdev { struct kobject kobj; // 内嵌的内核对象. struct module *owner; //该字符设备所在的内核模块的对象指针. const struct file_operations *ops; //该结构...原创 2019-08-18 17:35:52 · 2696 阅读 · 0 评论 -
linux设备驱动(8)阻塞型IO
阻塞型IO 当驱动程序无法立即满足请求,该如何响应?如当我们想要写入的时候,设备对应的缓冲区已满,或者是当我们想要读的时候当前缓冲区是空的。为了提高CPU的效率,我们的驱动程序应该阻塞等待该进程,将其置于休眠状态直到请求可继续。 休...原创 2019-08-28 21:49:26 · 120 阅读 · 0 评论