LDD学习笔记
文章平均质量分 64
yuweixian
好好学习
展开
-
字符设备文件转
4.1.1. 关于file_operations结构体 结构体file_operations在头文件 linux/fs.h中定义,用来存储驱动内核模块提供的对设备进行各种操作的函数的指针。该结构体的每个域都对应着驱动内核模块用来处理某个被请求的事务的函数的地址。举个例子,每个字符设备需要定义一个用来读取设备数据的函数。结构体 file_operations中存储转载 2010-05-01 21:54:00 · 436 阅读 · 0 评论 -
Spinlock简介
作者 : cjc86在 这篇文章中,我将会介绍 Kernel 提供用来使用 spinlock 的 function。除此之外,我还会告诉各位,为何在 SMP 的环境里,使用 spinlock 会比将所有 CPU 的中断 disable 这个方法来的有效率,我也会告诉各位如何针对不同的使用需求,使 spinlock 的 cost 再降低,进而使系统的效能更好... 前言转载 2010-05-09 09:30:00 · 358 阅读 · 0 评论 -
自旋锁 spinlock 理解
自旋锁spinlock是一种对临界资源进行互斥手访问的典型手段,其名称源于他的工作方式。为了获得一个自旋锁,在某cpu上运行的代码需先执行一个原子操作,该操作测试并设置test-and-set某个内存变量,由于他是原子操作,所以在该操作完成之前其它执行单元不可能访问这个内存变量。 如果测试结果表明锁已经空闲,则程序获得这个自旋锁并继续执行;如果测试结果表明锁仍被占用,程序将在一原创 2010-05-09 09:49:00 · 517 阅读 · 0 评论 -
arm linux 等待队列简单分析
Author-------Dansen-----xzd2734@163.comwait_queue_head_t wait_q;首先看看wait_queue_head_t这个等待队列的结构在wait.h中定义了这个结构typedef struct __wait_queue_head wait_queue_head_t;struct __wait_queue_head转载 2010-05-09 10:24:00 · 502 阅读 · 0 评论 -
linux内核register_chrdev_region()系列函数
内核中所有已分配的字符设备编号都记录在一个名为 chrdevs 散列表里。该散列表中的每一个元素是一个 char_device_struct 结构,它的定义如下: static struct char_device_struct { struct char_device_struct *next; // 指向散列冲突链表中的下一个元素的指针转载 2010-05-11 12:29:00 · 389 阅读 · 0 评论 -
cdev 内存分配
三。字符设备的注册内核内部使用struct cdev结构来表示字符设备。在内核调用设备的操作之前,必须分配并注册一个或多个struct cdev。struct cdev的定义以及相关的一些辅助函数在头文件:中。 struct cdev { struct kobject kobj; struct module *原创 2010-05-11 13:04:00 · 1164 阅读 · 0 评论 -
Linux中等待队列机制分析
什么是等待队列? 在软件开发中任务经常由于某种条件没有得到满足而不得不进入睡眠状态,然后等待条件得到满足的时候再继续运行,进入运行状态。这种需求需要等待队列机制的支持。Linux中提供了等待队列的机制,该机制在内核中应用很广泛。 在Linux内核中使用等待队列的过程很简单,首先定义一个wait_que转载 2010-05-13 20:20:00 · 550 阅读 · 1 评论 -
对于Tekkaman completion 的一点疑问?? 没有 解决
[Tekkaman2440@SBC2440V4]#./completion_testwprocess 817 (completion_test) awakening the readers...awoken 814 (completion_test)write code=0[Tekkaman2440@SBC2440V4]#r原创 2010-05-17 17:42:00 · 441 阅读 · 0 评论 -
scull内存驱动
来自 http://dev.firnow.com/course/6_system/linux/Linuxjs/2008108/149162.html /* * scull.h -- definitions for the char module * * Copyright (C) 2001 Alessandro Rubini and Jonathan Corbet *转载 2010-05-17 20:29:00 · 540 阅读 · 0 评论 -
_io _ior 笔记
_IO, _IOR, _IOW, _IOWR 宏的用法与解析在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值。cmd除了可区别数字外,还包含有助于处理的几种相应信息。 cmd的大小为 32位,共分 4 个域:bit31~bit30 2位为 “区别读写” 区,作用是区分是读取命令还是写入命令。bit转载 2010-05-19 18:05:00 · 631 阅读 · 1 评论 -
转一转 怎么样学习驱动步骤
linux驱动开发学习的步骤 1. 学会写简单的makefile 2. 编一应用程序,可以用makefile跑起来 3. 学会写驱动的mak转载 2010-05-24 19:09:00 · 447 阅读 · 0 评论 -
#define A (* (volatile unsigned long *) 详解
#define A (* (volatile unsigned long *) 0x48 ) // 8位处理#define A (* (volatile unsigned long *) 0x48000000) // 32位处理器对于不同的计算机体系结构,设备可能是端口映射,也可能是内存映射的。如果系统结构支持独立的IO地址空间,并且是端口映射,就必须使用汇编语原创 2010-05-25 20:10:00 · 754 阅读 · 0 评论 -
Linux设备驱动程序学习(1)-字符设备驱动程序
Linux设备驱动程序学习(1)-字符设备驱动程序今天进入《Linux设备驱动程序(第3版)》第三章字符设备驱动程序的学习。这一章主要通过介绍字符设备scull(Simple Character Utility for Loading Localities,区域装载的简单字符工具)的驱动程序编写,来学习Linux设备驱动的基本知识。scull可以转载 2010-05-06 21:30:00 · 435 阅读 · 0 评论 -
linux设备驱动 IO Port
1. I/O Port 和硬件打交道离不开I/O Port,老的ISA设备经常是占用实际的I/O端口,在linux下,操作系统没有对I/O口屏蔽,也就是说,任何驱动程序都可对任意的I/O口操作,这样就很容易引起混乱。每个驱动程序应该自己避免误用端口。 有两个重要的kernel函数可以保证驱动程序做到这一点。转载 2010-05-04 12:49:00 · 799 阅读 · 0 评论 -
系统调用
1什么是系统调用 系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口——它好比一个中间人,原创 2010-05-02 21:01:00 · 471 阅读 · 0 评论 -
linux 内核结构
原创 2010-05-01 21:59:00 · 274 阅读 · 0 评论 -
linux设备驱动开发详解——globalmem
linux设备驱动开发详解——globalmem 收藏 常见的两种错误:1.在插入模块的时候出现如下问题: # insmod globalmem.ko in转载 2010-05-04 12:37:00 · 582 阅读 · 0 评论 -
linux cat echo cal date clear命令
cat 命令使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName 说明:把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案) 参数: -n 或 --number 由 1 开始对所有输出的行数编号 -b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号 -s转载 2010-05-04 12:39:00 · 822 阅读 · 0 评论 -
linux 中断处理
中断处理 在 2.4 内核和 2.6内核中都使用 request_irq() 函数来注册中断服务函数。在 2.4 内核中,需要包含的头文件是 #include ,2.6 内核中需要包含的头文件则是 #include 。函数原型如下:2.4 内核int request_irq (unsigned int irq, void转载 2010-05-04 12:53:00 · 408 阅读 · 0 评论 -
linux 基础复习(9)设备驱动入门转
Linux 内核中采用可加载的模块化设计(LKMs,Loadable Kernel Modules),一般情况下编译的Linux 内核是支持可插入式模块的,也就是将最基本的核心代码编译在内核中,其他的代码可以选择在内核中,或者编译为内核的模块文件。常见的驱动程序也是作为内核模块动态加载的。 模块相关命令lsmod 列出当前系统加载的模块 rmmod 将当前模转载 2010-05-01 21:51:00 · 411 阅读 · 0 评论 -
使用 Linux 系统调用的内核命令
2007 年 4 月 17 日Linux® 系统调用 —— 我们每天都在使用它们。不过您清楚系统调用是如何在用户空间和内核之间执行的吗?本文将探究 Linux 系统调用接口(SCI),学习如何添加新的系统调用(以及实现这种功能的其他方法),并介绍与 SCI 有关的一些工具。 系统调用就是用户空间应用程序和内核提供的服务之间的一个接口转载 2010-05-02 20:49:00 · 397 阅读 · 0 评论 -
内核编程接口
原创 2010-05-02 21:22:00 · 399 阅读 · 0 评论 -
linux 设备驱动编程
目 录驱动 I/O端口 from smth 基本结构 驱动程序 具体实现 PCI loopback Sis 900 ISA总线DMA的实现 驱动 Linux系统支持三种类型的硬件设备:字符设备、块设转载 2010-05-02 10:57:00 · 460 阅读 · 0 评论 -
linux 设备驱动编程
目 录驱动 I/O端口 from smth 基本结构 驱动程序 具体实现 PCI loopback Sis 900 ISA总线DMA的实现 驱动转载 2010-05-02 10:59:00 · 377 阅读 · 0 评论 -
Linux声音设备编程实例
由于这些文件不是普通的文件,所以我们不能用ANSI C(标准C)的fopen、fclose等来操作文件,而应该使用系统文件I/O处理函数(open、read、write、lseek和close)来处理这些设备文件。ioctl()或许是Linux下最庞杂的函转载 2010-05-02 11:06:00 · 369 阅读 · 0 评论 -
文件和设备编程
目 录文件和设备编程 文件访问原语 网卡驱动编写 概述 设备驱动 需要注意 参考 设备驱动 概述 数据结构 初始化 管理流程 添加字符设备 添加块设备 一转载 2010-05-02 20:39:00 · 1454 阅读 · 0 评论 -
io内存映射ioremap() 做点笔记
unsigned long GPBDAT,GPFDAT,GPGDAT;GPBDAT=(unsigned long )ioremap(0x56000014,4);GPFDAT=(unsigned long )ioremap(0x56000054,4);GPGDAT=(unsigned long )ioremap(0x56000064,4);switch(irq){原创 2010-05-25 20:11:00 · 952 阅读 · 0 评论