Linux内核驱动
houxn22
这个作者很懒,什么都没留下…
展开
-
LTIB 常用命令详解
下面再写一点ltib的常用命令参数吧,虽然觉得对其编译内核和文件系统流程有了一定了解,但是对其命令参数用过的还不是很多,可以说是不甚了解,下面介绍一些,希望有用:首先一个比较有用的命令参数就是help,一个人忘记命令参数很常见,何况刚开始熟悉这个工具。下面这个命令行可以查看ltib命令的使用帮助:$ ./ltib --help ## 这个等转载 2014-06-24 10:36:54 · 534 阅读 · 0 评论 -
《Linux设备驱动开发详解》-- 互斥体(mutex)
尽 管 信号 量 已经 可 以实现互斥 的 功 能 , 而 且 包含 DECLARE_MUTEX() 、init_MUTEX ()等定义信号量的宏或函数, 从名字上看就体现出了互斥体的概念, 但是mutex 在 Linux 内核中还是真实地存在的。下面代码定义名为 my_mutex 的互斥体并初始化它。struct mutex my_mutex;转载 2014-06-12 14:05:47 · 3000 阅读 · 0 评论 -
《Linux设备驱动开发详解》-- 内核定时器
10.5.1 内核定时器编程软件意义上的定时器最终依赖硬件定时器来实现,内核在时钟中断发生后检测各定时器是否到期,到期后的定时器处理函数将作为软中断在底半部执行。实质上,时钟中断处理程序执行 update_process_timers()函数, 该函数调用 run_local_timers()函数,这个函数处理 TIMER_SOFTIRQ 软中断,运行当前处理器上到期的所有定时器转载 2014-06-12 17:04:00 · 759 阅读 · 0 评论 -
《Linux设备驱动开发详解》-- 信号量的使用(semaphore)
信号(semaphore) 是用于保护临界区的一种常用方法, 它的使用方式和自旋锁类似。与自旋锁相同,只有得到信号量的进程才能执行临界区代码。但是,与自旋锁不同的是,当获取不到信号时,进程不会原地打转而是进入休眠等待状态。Linux 系统中与信号量相关的操作主要有如下 4 种。1定义信号量下列代码定义名称为 sem 的信号量。struct semaphore sem;2转载 2014-06-12 11:17:25 · 749 阅读 · 0 评论 -
Linux地址空间的归纳总结
转自:http://alanwu.blog.51cto.com/3652632/1082195转载 2014-06-18 13:45:46 · 681 阅读 · 0 评论 -
RT-Signal 及其应用要点
http://www.ibm.com/developerworks/cn/linux/l-rtsignal/本文指出 POSIX RT-Signal 在应用中的使用方法和在设备驱动程序编写中的要点,以及内核中对应的技术内幕,特别的,纠正了著作 Linux Device Driver [3][4]中相关的错误内容。实时信号驱动可以形成一个高性能的可伸缩 I/O 处理框架。转载 2015-04-30 14:14:30 · 736 阅读 · 0 评论 -
《Linux设备驱动开发详解》-- Linux中断处理底半部机制(tasklet、工作队列和软中断)
1.tasklet tasklet 的使用较简单, 我们只需要定义 tasklet 及其处理函数并将两者关联, 例如:void my_tasklet_func(unsigned long); /*定义一个处理函数*/ DECLARE_TASKLET(my_tasklet, my_tasklet_func, data); /*定义一个 tasklet 结构 my_tasklet,与转载 2014-06-12 16:41:37 · 1348 阅读 · 0 评论 -
tasklet 和 工作队列
tasklet和定时器相关的另一个内核设施是taskled(小任务)机制。中断管理中大量使用了这种机制。task在很多方面类似内核定时器:它们始终在中断期间运行,始终会在调度它们的同一CPU上运行,而且都接收一个unsigned long参数,tasklet也会在“软件中断”上下文以原子模式执行。和内核同时器不同的是,我们不能要求tasklet在某个给定时间执行。软件中断是指打硬件转载 2015-05-14 14:27:11 · 3795 阅读 · 0 评论 -
Linux 字符设备驱动实例
/* * LEDs driver for GPIOs * * Copyright (C) 2007 8D Technologies inc. * Raphael Assenat * Copyright (C) 2008 Freescale Semiconductor, Inc. * * This program is free software; you can redistrib原创 2015-05-14 15:24:55 · 738 阅读 · 0 评论 -
《Linux设备驱动开发详解》-- 等待队列
基础知识:阻塞操作是指在执行设备操作时若不能获得资源则挂起进程,直到满足可操作的条件后再进行操作。被挂起的进程进入休眠状态,被从调度器的运行队列移走,直到等待的条件被满足。而非阻塞操作的进程在不能进行设备操作时并不挂起,它或者放弃,或者不停地查询,直至可以进行操作为止。驱动程序通常需要提供这样的能力: 当应用程序进行 read()、 write()等系统调用时,若设备的资源转载 2014-06-12 14:52:24 · 692 阅读 · 0 评论 -
《Linux设备驱动开发详解》-- 中断屏蔽
在单 CPU 范围内避免竞态的一种简单方法是在进入临界区之前屏蔽系统的中断。CPU 一般都具备屏蔽中断和打开中断的功能,这项功能可以保证正在执行的内核执行路径不被中断处理程序所抢占,防止某些竞态条件的发生。具体而言,中断屏蔽将使得中断与进程之间的并发不再发生,而且,由于 Linux 内核的进程调度等操作都依赖中断来实现,内核抢占进程之间的并发也就得以避免了。中断屏蔽的使用方法为:local转载 2014-06-12 13:39:41 · 588 阅读 · 0 评论 -
《Linux设备驱动开发详解》-- 自旋锁(spinlock)
7.4.1 自旋锁的使用自旋锁(spin lock)是一种对临界资源进行互斥手访问的典型手段,其名称来源于它的工作方式。为了获得一个自旋锁,在某 CPU 上运行的代码需先执行一个原子操作,该操作测试并设置(test-and-set)某个内存变量,由于它是原子操作,所以在该操作完成之前其他执行单元不可能访问这个内存变量。如果测试结果表明锁已经空闲,则程序获得这个自旋锁并继续执转载 2014-06-12 10:46:43 · 810 阅读 · 0 评论 -
利用LTIB生成的根文件系统修改定制我们的ramdisk文件
LTIB生成文件系统(ramdisk, jffs, jffs2, cramfs)镜像的子功能函数mk_fs_image位于安装目录的bin/Ltibutils.pm, 此文件是perl的模块库,定义了很多函数,由安装目录下的perl执行脚本ltib进行调用。 对于LTIB自动生成的文件系统位于安装目录下的rootfs目录(包含文件多,比较大) 在rootfs目录的基础上又进行转载 2014-06-30 10:04:32 · 722 阅读 · 0 评论 -
《Linux设备驱动开发详解》-- 原子操作
原子操作指的是在执行过程中不会被别的代码路径所中断的操作。Linux 内核提供了一系列函数来实现内核中的原子操作,这些函数又分为两类,分别针对位和整型变量进行原子操作。它们的共同点是在任何情况下操作都是原子的,内核代码可以安全地调用它们而不被打断。位和整型变量原子操作都依赖底层CPU 的原子操作来实现,因此所有这些函数都与 CPU 架构密切相关。7.3.1 整型原子操作1转载 2014-06-12 13:33:32 · 671 阅读 · 0 评论 -
Linux内核中内存相关的操作函数
1、kmalloc()/kfree() static __always_inline void *kmalloc(size_t size, gfp_tflags) 内核空间申请指定大小的内存区域,返回内核空间虚拟地址。在函数实现中,如果申请的内存空间较大的话,会从buddy系统申请若干内存页面,如果申请的内存空间大小较小的话,会从slab系统中申请内存空间。 gfp_t fl转载 2014-06-12 15:28:32 · 522 阅读 · 0 评论 -
《Linux设备驱动开发详解》-- Linux中断处理程序架构和Linux中断编程
设备的中断会打断内核中进程的正常调度和运行,系统对更高吞吐率的追求势必要求中断服务程序尽可能地短小精悍。但是,这个良好的愿望往往与现实并不吻合。在大多数真实的系统中,当中断到来时,要完成的工作往往并不会是短小的,它可能要进行较大量的耗时处理。图 10.2 描述了 Linux 内核的中断处理机制。 为了在中断执行时间尽可能短和中断处理需完成大量工作之间找到一个平衡点, Linux 将中断转载 2014-06-12 16:12:05 · 550 阅读 · 0 评论 -
有趣的数据结构——Linux内核中的链表
转自:http://blog.csdn.net/yanook/article/details/7199513 Linux内核中有很多种链表,如果对每一种链表都使用单独的数据结构去表示,那么需要对每个链表实现一组原语操作,包括初始化、插入、删除等。于是,Linux内核定义了一个很有趣的数据结构:list_headstruct list_head {转载 2014-06-12 10:29:57 · 847 阅读 · 0 评论 -
Linux设备驱动工程师之路——内核链表的使用
Linux设备驱动工程师之路——内核链表的使用K-Style转载请注明来自于衡阳师范学院08电2 K-Style http://blog.csdn.net/ayangke,QQ:843308498 邮箱:yangkeemail@qq.com 一、重要知识点 1.内核链表和普通链表的区别 内核链表是一个双向转载 2014-06-12 10:20:19 · 520 阅读 · 0 评论 -
《Linux设备驱动开发详解》-- Linux 中断编程
10.3.1 申请和释放中断在 Linux 设备驱动中,使用中断的设备需要申请和释放对应的中断,分别使用内核提供的 request_irq()和 free_irq()函数。1.申请 IRQ int request_irq(unsigned int irq, void (*handler)(int irq, void *dev_id, struct pt_regs转载 2014-06-12 16:24:57 · 507 阅读 · 0 评论 -
《Linux设备驱动开发详解》-- 内核延时
10.6.1 短延迟Linux 内核中提供了如下 3 个函数分别进行纳秒、微秒和毫秒延迟。void ndelay(unsigned long nsecs); void udelay(unsigned long usecs); void mdelay(unsigned long msecs); 上述延迟的实现原理本质上是忙等待, 它根据 CPU 频率进行一定次数的循环。 有转载 2014-06-13 09:00:54 · 582 阅读 · 0 评论 -
Linux中的work queue
工作队列(work queue)是Linux kernel中将工作推后执行的一种机制。这种机制和BH或Tasklets不同之处在于工作队列是把推后的工作交由一个内核线程去执行,因此工作队列的优势就在于它允许重新调度甚至睡眠。工作队列是2.6内核开始引入的机制,在2.6.20之后,工作队列的数据结构发生了一些变化,因此本文分成两个部分对2.6.20之前和之后的版本分别做介绍。转载 2014-06-12 14:30:06 · 678 阅读 · 0 评论 -
udev匹配规则的编写
Step1. 在终端中执行: udevadm monitor --environment --udev 【后面的--environment --udev参数可以不加】 然后手动触发需要监听的事件,例如拔插USB设备等,udevadm 会打印监听到的event信息;Step2. 在上一条的打印信息中选择则感兴趣的设备执行: udevadm info -a -p /path/to/de...原创 2018-04-24 22:04:38 · 1534 阅读 · 0 评论