![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
笔记-Linux设备驱动
文章平均质量分 66
张勇1234
这个作者很懒,什么都没留下…
展开
-
Linux驱动----1、最简单的驱动hello.ko
hello.c源文件module.h包含可装载模块需要的大量符号和函数定义init.h指定初始化和清除函数MODULE_LICENSE宏告诉内核,该模块采用的协议printk可能不会将信息打印在终端上,可用dmesg命令查看(dmsg | tail -5只读最后5行)module_init该宏在模块目标代码中增加一个特殊的段,用于说明内核初始化函数所在的位置。#include <linu原创 2017-12-30 17:21:40 · 1151 阅读 · 0 评论 -
Linux驱动----8、中断处理和内核数据结构
注册中断并口的标准规定设置端口2的第4bit 将启动中断报告,short 模块调用outb来设置这个位。开启之后,每当引脚10的电平从低到高改变时,并口就会产生一个中断。(连接输出口到引脚10可软件控制产生中断)内核维护一个中断信号线的注册表,模块在使用中断前要先请求一个中断通道(或中断请求IRQ)。中断报告显示在文件/proc/interrupts中。int request_irq...原创 2018-09-05 15:16:45 · 289 阅读 · 0 评论 -
Linux驱动----7、与硬件通信
对常规内存优化 ,优化过程是透明的,而且效果良好,但是对I/O操作来说这些优化可能造成致命错误,因为它们受边界效应影响。side effect(译为边际效应或副作用):是指读取某个地址时可能导致该地址内容发生变化,比如,有些设备的中断状态寄存器只要一读取,便自动清零。I/O 寄存器的操作具有side effect,因此,不能对其操作不能使用cpu缓存。由编译器优化和硬件重新排序引起的问题的...原创 2018-09-05 10:30:42 · 319 阅读 · 0 评论 -
Linux驱动----5、高级字符驱动程序操作
ioctl//用户空间的ioctl//... 一般用char *argp代替防止编译器进行类型检查int ioctl(int fd, unsigned long cmd, ...);//驱动程序ioctl原型//前两个参数对应应用程序传递过来的fd,可选参数arg无论用户空间使用的是整数还是指针都以//unsigned long的形式传递给驱动程序int (*ioctl)...原创 2018-09-02 17:24:30 · 385 阅读 · 0 评论 -
Linux驱动----6、时间延迟、内存分配
内核时间时间中断由系统定时硬件以周期性的间隔产生,这个间隔由内核根据HZ的值设定,大多数平台每秒有100次或1000次中断。计数器是一个64位变量,即使在32位架构上也是,称为jiffies_64,但是驱动程序开发者通常访问的是jiffies变量,它是unsigned long型变量,要么和jiffies_64相同,要么只是它的低32位。老的timeval使用秒和毫秒,新的timespec...原创 2018-09-04 09:44:37 · 432 阅读 · 0 评论 -
Linux驱动----4、并发和竞态
scull的缺陷scull是个设备,如果两个进程同时访问下面代码,都分配内存给指针dptr->data,后访问的会覆盖前者,前者内存无法释放造成内存泄漏。 只要代码将一个指针传递给了内核的其他部分,一个新的共享就可能建立。if (!dptr->data) { dptr->data = kmalloc(qset * sizeof(void *), GFP_KERNEL...原创 2018-08-08 15:25:40 · 165 阅读 · 0 评论 -
ldd3 源码编译错误之 scullc 字符设备驱动
转自:http://blog.chinaunix.net/uid-25381054-id-3261527.html错误1:make -C /lib/modules/3.2.0/build M=/home/wrk/works/drivers/ldd3/examples/scullc LDDINC=/home/wrk/works/drivers/ldd3/examples/scullc mod...转载 2018-08-03 11:34:31 · 334 阅读 · 0 评论 -
Linux驱动----2、字符设备驱动
1.设备号对字符设备的访问通过文件系统内的设备名称进行,这些名称也称为文件系统树的节点,位于/dev下。主设备号标志着设备对应的驱动程序,次设备号区分相同驱动程序下的不同设备。dev_t dev;//由主次设备号构成MAJOR(dev_t dev); //得到主设备号MINOR(dev_t dev);MKDEV(int major, int minor);//合成//静态分配设...原创 2018-08-02 22:24:19 · 285 阅读 · 0 评论 -
Linux驱动----3、调试技术和/prop
Klogd&&Syslogd1> 所有系统信息是输出到ring buffer中去的.dmesg所显示的内容也是从ring buffer中读取的.2> LINUX系统中/etc/init.d/sysklogd会启动2个守护进程:Klogd&&Syslogd3> klogd是负责读取内核信息的,有2种方式: sy...原创 2018-08-07 09:42:54 · 414 阅读 · 0 评论 -
Linux驱动----9、PCI驱动程序
本文参考:https://blog.csdn.net/cjecho/article/details/54934264PCI(Peripheral Component Interconnect)外围设备互联是一组完整的规范,定义了计算机各个不同部分之间应该如何交互。每个PCI外设由一个总线编号、一个设备编号、一个功能编号来标识。Linux支持PCI域,每个域可以拥有256个总线,每个总线 可以支...原创 2018-09-07 14:52:24 · 522 阅读 · 0 评论