![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux驱动开发
时光微凉_LEANG
你必须不断奔跑,才能留在原地!
展开
-
4-1 Linux内存管理
1、地址类型:物理地址、线性地址(虚拟地址)、逻辑地址物理地址:物理内存的地址逻辑地址:程序经过编译生成汇编中的地址 = 段基地址+段内偏移量线性地址:在CPU架构下,可以表示4G地址的空间逻辑地址--(段式管理单元)---线性地址----(页式管理单元)----物理地址段式管理单元:逻辑段的起始地址(段地址)必须是16的倍数,最后的四位全为0逻辑段最大的内存最大为6...原创 2019-10-24 22:18:56 · 113 阅读 · 0 评论 -
8-2 硬件访问
寄存器和内存的区别:寄存器和RAM主要不同寄存器操作有副作用(side effect或者边际效果):读取某个地址时可能导致该地址内容发生变化。I/O端口的操作步骤:申请:request_region申请后可以在/proc/ioports访问:inw释放:release_regionI/O内存:申请:request_mem_region映射:使用ior...原创 2019-10-23 23:07:36 · 102 阅读 · 0 评论 -
7-3 自动创建设备文件
udev(mdev)来实现设备文件的自动创建在驱动的初始化代码里调用class_creat 为该设备创建一个class,再使用device_creat为每个设备创建对应的设备。原创 2019-10-21 23:06:09 · 92 阅读 · 0 评论 -
7-2 内核等待队列
内核等待队列来实现进程的阻塞,等待队列可以看做是保存进程的容器,在阻塞进程时,将进程放入等待队列,当唤醒进程时,从等待队列中取出进程。实现方法:1、定义等待队列 wait_queue_head_t my_queue2、初始化等待队列init_waitqueue_head(&my_queue)或者3、定义并初始化等待队列DECLARE_WAIT_QUEUE_HEAD...原创 2019-10-21 23:05:15 · 104 阅读 · 0 评论 -
7-4 POLL设备方法
系统调用(用户空间) 驱动(内核空间)open openclose Releaseread writeioctl ioctllseek llseekselect pollselect系统调用:用于多路监控,当没有一个文件满足要求时,select将阻塞调用进程。int select(maxfd, *reasfds, *writefds, *exceptfds, ...原创 2019-10-21 23:04:36 · 93 阅读 · 0 评论 -
7-1 Linux驱动之IOCTL
在用户空间,使用ioctl系统调用来控制设备,原型如下:int ioctl(int fd, unsigned long cmd, ...)第一个参数,文件描述符。第二个参数:是否依赖于控制命令驱动的ioctl的原型:int (*ioctl)(struct inode *inode, struct file *flip, unsigned int cmd,unsigned ...原创 2019-10-20 11:58:40 · 119 阅读 · 0 评论