Linux相关
文章平均质量分 79
luckdog01
这个作者很懒,什么都没留下…
展开
-
File_operations结构体
struct file_operations是一个字符设备把驱动的操作和设备号联系在一起的纽带,是一系列指针的集合,每个被打开的文件都对应于一系列的操作,这就是file_operations,用来执行一系列的系统调用。linux-2.6.22/include/linux/fs.hstruct file_operations { struct module *owner;转载 2008-07-29 18:20:00 · 415 阅读 · 0 评论 -
探索 Linux 内存模型
探索 Linux 内存模型理解 Linux 设计的第一步 <!--document.write(将此页作为电子邮件发送);//--> 未显示需要 JavaScript 的文档选项级别: 初级Vikram Shukla (vikshukl@i转载 2008-08-05 15:06:00 · 325 阅读 · 0 评论 -
Linux设备驱动程式学习(13)-Linux设备模型(总线、设备、驱动程式和类)
文章的例子和实验使用《LDD3》所配的lddbus模块(稍作修改)。总线总线是处理器和一个或多个设备之间的通道,在设备模型中, 任何的设备都通过总线相连, 甚至是内部的虚拟"platform"总线。总线能够相互插入。设备模型展示了总线和他们所控制的设备之间的实际连接。在 Linux 设备模型中, 总线由 bus_type 结构表示, 定义在 : struct bus_type { cons转载 2008-07-29 18:54:00 · 419 阅读 · 0 评论 -
Linux设备驱动程式学习(12)
-Linux设备模型(底层原理简介)以《LDD3》的说法:Linux设备模型这部分内容能够认为是高级教材,对于多数程式作者来说是不必要的。但是我个人认为:对于一个嵌入式Linux的底层程式员来说,这部分内容是很重要的。以我学习的ARM9为例,有很多总线(如SPI、IIC、IIS等等)在Linux下已被编写成了子系统,无需自己写驱动;而这些总线又不像PCI、USB等在《LDD3》上有教程,有时还要转载 2008-07-29 18:49:00 · 430 阅读 · 0 评论 -
Linux设备驱动程式学习(5)-高级字符驱动程式操作[(2)阻塞型I/O和休眠]
这一部分主要讨论:假如驱动程式无法立即满足请求,该如何响应?(65865346)一、休眠进程被置为休眠,意味着他被标识为处于一个特别的状态并且从调度器的运行队列中移走。这个进程将不被在任何 CPU 上调度,即将不会运行。 直到发生某些事情改变了那个状态。安全地进入休眠的两条规则:(1) 永远不要在原子上下文中进入休眠,即当驱动在持有一个自旋锁、seqlock或 RCU 锁时不能睡眠;关闭中断也不转载 2008-07-29 18:43:00 · 500 阅读 · 0 评论 -
Linux设备驱动程式学习(4)-高级字符驱动程式操作[(1)ioctl and llseek]
今天进入《Linux设备驱动程式(第3版)》第六章高级字符驱动程式操作的学习。一、ioctl大部分设备除了读写能力,还可进行超出简单的数据传输之外的操作,所以设备驱动也必须具备进行各种硬件控制操作的能力. 这些操作常常通过 ioctl 方法来支持,他有和用户空间版本不同的原型:int (*ioctl) (struct inode *inode, struct file *filp,转载 2008-07-29 18:43:00 · 898 阅读 · 0 评论 -
Linux设备驱动程式学习(3)-并发和竞态
今天进入《Linux设备驱动程式(第3版)》第五章并发和竞态的学习。 对并发的管理是操作系统编程中核心的问题之一。 并发产生竞态,竞态导致共享数据的非法访问。因为竞态是一种极端低可能性的事件,因此程式员往往会忽视竞态。但是在电脑世界中,百万分之一的事件可能没几秒就会发生,而其结果是灾难性的。一、并发及其管理 竞态通常是作为对资源的共享访问结果而产生的。在设计自己的驱动程式时,第一个要记住的规则是转载 2008-07-29 18:42:00 · 312 阅读 · 0 评论 -
Linux设备驱动程式学习(3-补)-Linux中的循环缓冲区
参考资料:《Linux内核中的循环缓冲区》作者:西邮 王聪 严重感谢文章作者! 但是(可能是源码版本问题)有些结论并不正确: “而kfifo_init只会接受一个已分配好空间的fifo->buffer,不能和kfifo_free搭配,用kfifo_init分配的kfifo只能用kfree释放。” 阅读源码能够得出这样的结论:kfifo_init和kfifo_alloc分配的kfifo都能用转载 2008-07-29 18:49:00 · 412 阅读 · 0 评论 -
Linux设备驱动程式学习(10)-时间、延迟及延缓操作
度量时间差时钟中断由系统定时硬件以周期性的间隔产生,这个间隔由内核根据 HZ 值来设定,HZ 是个体系依赖的值,在 中定义或该文档包含的某个子平台相关文档中。作为通用的规则,即便假如知道 HZ 的值,在编程时应当不依赖这个特定值,而始终使用HZ。对于当前版本,我们应完全信任内核研发者,他们已选择了最适合的HZ值,最好保持 HZ 的默认值。 对用户空间,内核HZ几乎完全隐藏,用户 HZ 始终扩展转载 2008-07-29 18:48:00 · 633 阅读 · 0 评论 -
Linux设备驱动程式学习(8)-分配内存
Linux设备驱动程式学习(8)-分配内存内核为设备驱动提供了一个统一的内存管理接口,所以模块无需涉及分段和分页等问题。 我已在第一个scull模块中使用了 kmalloc 和 kfree 来分配和释放内存空间。 kmalloc 函数内幕kmalloc 是个功能强大且高速(除非被阻塞)的工具,所分配到的内存在物理内存中连续且保持原有的数据(不清零)。原型:#include linux/slab.转载 2008-07-29 18:47:00 · 630 阅读 · 0 评论 -
Linux设备驱动程式学习(7)-内核的数据类型
由于前面的学习中有用到 第十一章 内核数据结构类型 的知识,所以我先看了。要点如下: 将linux 移植到新的体系结构时,研发者碰到的若干问题都和不正确的数据类型有关。坚持使用严格的数据类型和使用 -Wall -Wstrict-prototypes 进行编译可能避免大部分的 bug。内核数据使用的数据类型主要分为 3 个类型: 标准 C 语言类型、确定大小的类型和特定内核对象的类型。 标准 C转载 2008-07-29 18:45:00 · 513 阅读 · 0 评论 -
Linux设备驱动程式学习(6)-高级字符驱动程式操作[(3)设备文档的访问控制]
Linux设备驱动程式学习(6)-高级字符驱动程式操作[(3)设备文档的访问控制]提供访问控制对于一个设备节点来的可靠性来说有时是至关重要的。这部分的内容只是在open和release方法上做些修改,增加一些检查机制既可。 独享设备最生硬的访问控制方式是只允许一个设备一次被一个进程打开(独享),这是个设备驱动最简单的访问控制。实现十分简单,具体的代码看实转载 2008-07-29 18:43:00 · 334 阅读 · 0 评论 -
Linux设备驱动程式学习(2)-调试技术
今天进入《Linux设备驱动程式(第3版)》第四章调试技术的学习。 一、内核中的调试支持在前面已建议过:学习编写驱动程式要构建安装自己的内核(标准主线内核)。最重要的原因之一是:内核研发者已建立了多项用于调试的功能。但是由于这些功能会造成额外的输出,并导致能下降,因此发行版厂商通常会禁止发行版内核中的调试功能。为了实现内核调试,我在内核配置上增加了几项: Kernel hacking ---原创 2008-07-29 18:41:00 · 560 阅读 · 0 评论 -
Linux设备驱动程式学习(1)-字符设备驱动程式
今天进入《Linux设备驱动程式(第3版)》第三章字符设备驱动程式的学习。这一章主要通过介绍字符设备scull(Simple Character Utility for Loading Localities,区域装载的简单字符工具)的驱动程式编写,来学习Linux设备驱动的基本知识。scull能够为真正的设备驱动程式提供样板。一、主设备号和此设备号主设备号表示设备对应的驱动程式;次设备号由内核使用转载 2008-07-29 18:39:00 · 358 阅读 · 0 评论 -
Linux设备驱动程式学习(0)
Linux设备驱动程式学习(0)-Hello, world!模块一个学习Linux设备驱动程式都会碰到的第一个例程:#include linux/init.h>#include linux/module.h> MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void){ printk(KERN_ALERT "Hello, Tekkam转载 2008-07-29 18:25:00 · 436 阅读 · 0 评论 -
Linux 2.4.x内核同步机制
本文将Linux内核中用于同步的几种机制集中起来分析,强调了它们之间在实现和使用上的不同。同步通常是为了达到多线程协同的目的而设计的一种机制,通常包含异步信号机制和互斥机制作为其实现的底层。在Linux 2.4内核中也有相应的技术实现,包括信号量、自旋锁、原子操作和等待队列,其中原子操作和等待队列又是实现信号量的底层。等待队列和异步信号wait queue转载 2008-08-06 11:25:00 · 424 阅读 · 0 评论