linux驱动学习
写了程序换酒钱
Want to be a geek!!!
展开
-
内核启动过程
以x86体系结构的计算机为例 第一步是BIOS从启动设备中导入主引导记录(MBR),接下来MBR中的代码查看分区表并从活动分区读取GRUB,LILO或SYSLINUX等引导装入程序(Bootloader),之后引导装入程序会加载压缩后的内核映像并将控制权传递给内核。内核获得控制权后,会将自身解压并投入运行。 x86的cpu有两种操作模式:实模式和保护模式。在实模式下,用原创 2013-07-11 15:33:52 · 1047 阅读 · 0 评论 -
内核定时器
内核中的许多部分的工作都高度依赖与时间信息。Linux内核利用硬件提供的不同的定时器以支持忙等待和睡眠等待等时间相关的服务。所谓忙等待,就是cpu不停的运转。但是睡眠等待,进程将放弃cpu。所以,只有在睡眠等待不可行的情况下,才考虑使用忙等待。内核也提供了相关的api,使可以在一段时间之后调用某函数运行。在内核中存在这一些重要的与定时器相关的变量。 HZ和Jiffies 系统定时器能以可编程的原创 2013-07-14 07:09:57 · 1026 阅读 · 0 评论 -
内核并发处理
随着硬件的发展,SMP(对称多处理器)已经很普遍,如果内核的调度机制是可抢占的,那么SMP和内核抢占是多线程执行的两种场景。当多个线程同时访问内核的数据结构时,我们就需要对其做串行化处理。 自旋锁和互斥体 访问共享资源的代码区称为临界区。自旋锁(spinlock)和互斥体(mutex, mutual exclusion)是保护内核临界区的两种基本机制。 自旋锁可以确定在同时只有一个线程进入临原创 2013-07-15 16:54:43 · 1272 阅读 · 0 评论 -
工作队列
工作队列是内核中用于进行延后工作的一种方式。延后工作在很多地方使用到,比如 1.1个错误中断发生后,触发网络适配器重新启动; 2.同步磁盘缓冲区的文件系统任务; 3.给磁盘发送一个命令,并跟踪存储协议状态机。等等 工作队列辅助库向用户提供了两个接口结构:workqueue_struct和work_struct,使用工作队列的步骤如下 1.创建一个工作队列(或一个workqueue_str原创 2013-07-16 15:48:41 · 1100 阅读 · 0 评论 -
中断处理
查看设备状态有两种方式,一种是轮询,一种是中断,可是轮询代价太大,如果是简单的系统,处理的时间单一,比如只有一个按键操作,那么可以轮询,如果是操作系统的,则是对响应来说是灾难性的。 中断的引入是由I/O操作的不确定性以及与CPU之间的速度矛盾。设备通过某种硬件信号来异步地唤起CPU的注意,说明中断的到来,是否处理。这些硬件的信号就是中断。每个中断设备都被分配一个相关的标识符,被称为中断请求(IR原创 2013-07-18 07:47:10 · 1154 阅读 · 0 评论 -
container_of 理解
问题:如何通过结构中的某个变量获取结构本身的指针??? 关于container_of见kernel.h中: /** * container_of - cast a member of a structure out to the containing structure * @ptr: the pointer to the member. * @type: the t转载 2013-07-27 09:45:11 · 781 阅读 · 0 评论