自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(13)
  • 收藏
  • 关注

原创 linux设备驱动(十四)--内存分配

linux内核为设备驱动程序提供了一致的内存管理接口,所以模块不涉及到分段、分页的问题。kmalloc函数kmalloc与malloc相似,除非被阻塞,否则这个函数可运行的很快,而且不对获取的空间清零,也就是说,分配给它的区域仍然保持着原有数据。它分配的内存在物理内存中是连续的。原型如下:#include void *kmalloc(size_t size,int flags);最常用的标志是:GFP_KERNEL,它表示内存分配(最终总是调用get_free_page来实现的,这就是GFP_的由来)是代表

2010-09-15 11:48:00 1426

原创 linux设备驱动(十六)--中断(一)

中断处理可以让设备在产生某个事件时通知处理器的方法就是中断。一个“中断”仅是一个信号,当硬件需要获得处理器对它的关注时,就可以发送这个信号。 Linux 处理中断的方式非常类似在用户空间处理信号的方式。 大多数情况下,一个驱动只需要为它的设备的中断注册一个处理例程,并当中断到来时进行正确的处理。本质上来讲,中断处理例程和其他的代码并行运行。因此,它们不可避免地引起并发问题,并竞争数据结构和硬件。 透彻地理解并发控制技术对中断来讲非常重要。安装中断处理例程内核维护了一个中断信号线的注册表,该注册表类似

2010-09-28 17:13:00 1646

原创 linux设备驱动(十五)--与硬件通信

在学习之前,首先了解下ARM和PC总线的结构。http://linux.chinaunix.net/bbs/thread-1124985-1-1.html

2010-09-25 17:26:00 746

原创 BSP和LTIB

<br />BSP称为板级支持包,一般随着板子来进行发布。<br />LTIB——Linux Target Image Build,一般和BSP一起发布,可以参考如下:<br />http://savannah.nongnu.org/projects/ltib<br /> <br />安装freescale的BSP包时,要以非root用户身份,在/opt目录下建立文件夹(如果权限不够则修改/opt为777权限)。然后再以非root用户身份安装BSP,否则会报错。

2010-09-25 11:17:00 470

原创 linux设备驱动学习(十三)--时间与延迟

度量时间差:时钟中断由系统定时硬件以周期性的间隔产生,这个间隔由内核根据 HZ 值来设定,HZ 是一个体系依赖的值,在 中定义或该文件包含的某个子平台相关文件中。作为通用的规则,即便如果知道 HZ 的值,在编程时应当不依赖这个特定值,而始终使用HZ。对于当前版本,我们应完全信任内核开发者,他们已经选择了最适合的HZ值,最好保持 HZ 的默认值。每次当时钟中断发生时,内核内部计数器的值就增加一。这个计数器在系统引导时被初始化为0。这个计数器是一个 64-位 变量( 即便在 32-位的体系上)并且称为 “jif

2010-09-13 17:14:00 1738 1

转载 nandflash driver详细分析

<br />转自:http://xgc94418297.blog.163.com/blog/<br /><br />今天学习了NandFlash的驱动,硬件操作非常简单,就是这个linux下的驱动比较复杂,主要还是MTD层的问题,用了一下午时间整理出来一份详细的分析,只是分析函数结构和调用关系,具体代码实现就不看了,里面有N个结构体,搞得我头大。<br /> <br />我用linux2.6.25内核,2440板子,先从启动信息入手。<br />内核启动信息,NAND部分:<br />S3C24XX NAN

2010-09-13 11:59:00 486

原创 LINUX设备驱动学习(十二)---内核数据结构

这里按照http://blog.chinaunix.net/u1/34474/showart.php?id=418515的学习路线,开始内核数据结构的学习。将linux 移植到新的体系结构时,开发者遇到的若干问题都与不正确的数据类型有关。坚持使用严格的数据类型和使用 -Wall -Wstrict-prototypes 进行编译可能避免大部分的 bug。内核数据使用的数据类型主要分为 3 个类型: 标准 C 语言类型、确定大小的类型和特定内核对象的类型。标准C语言类型当需要“一个2字节填充符”或“用一个4字节

2010-09-09 19:43:00 668

原创 LINUX设备驱动学习(十一)--设备的访问控制

设备文件的访问控制:独享设备,限制每次只有一个用户访问(单用户访问),阻塞型用户访问,打开时复制设备。独享设备主要是让驱动程序维护一个atomic_t变量,该变量初始化为1,表明可用,在open时会减小并测试scull_s_available,并在其他进程打开该设备时拒绝打开该设备。代码示例:static atomic_t scull_s_available = ATOMIC_INIT(1);static int scull_s_open(struct inode *inode,struct file *f

2010-09-09 11:52:00 569

原创 LINUX设备驱动学习(十)--异步通知

异步通知:使用异步通知机制可以提高查询设备的效率。通过使用异步通知,应用程序可以在数据可用时收到一个信号,而无需不停地轮询。设置异步通知的步骤:1.首先制定一个进程作为文件的属主。通过使用fcntl系统调用执行F_SETOWN命令时,属主进程的ID号就会保存在filp->f_owner中,目的是为了让内核知道应该通知哪个进程。2.在设备中设置FASYNC标志。通过fcntl调用的F_SETFL来完成。设置晚以上两步后,输入文件就可以在新数据到达时请求发送一个SIGIO信号,该信号被发送到存放在filp->f

2010-09-08 16:07:00 2810 1

原创 linux设备驱动学习(九)--高级字符设备驱动

高级休眠执行步骤:1.将进程置于休眠的第一个步骤是分配并初始化一个wait_queue_t结构,然后加入到对应的等待序列。2.设置进城的状态,将其标记问休眠。TASK_RUNNING表示进程可运行,尽管进程并不一定在任何给定时间都运行在某个处理器上。TASK_INTERRUPTIBLE和TASK_UNINTERRUPTIBLE对应两种休眠状态。在2.6内核中,通常不需要驱动程序代码来操作进城状态,但是如果需要:void set_current_state(int new_state);在老代码中:curre

2010-09-07 15:46:00 739

原创 linux设备驱动学习(八)---阻塞式I/O与休眠

阻塞型I/O与休眠当一个进程被置入休眠时,他会被标记为一种特殊的状态并从调度器的运行队列调走(将该进程加入到等待队列中,等待唤醒)。休眠中的进程会被搁置在一边,等待唤醒。要想安全的进行休眠需要注意:1.永远不要在原子上下文中进入休眠.原子上下文是指:在执行多个步骤时,不能有任何的并发访问。对休眠来说,我们的驱动程序不能拥有自旋锁、seqlock或者RCU锁时休眠。如果我们已经禁止了中断,也不能休眠。但在拥有信号量时允许休眠。如果代码在拥有信号量时休眠,任何其他等待该信号量的线程也会休眠,一次拥有信号量而休眠

2010-09-06 20:32:00 1343

转载 常见的链表题目

一些常见的单链表题目,总结思路和实现代码。1.单链表的反序2.给单链表建环3.检测单链表是否有环4.给单链表解环5.检测两条链表是否相交6.不输入头节点,删除单链表的指定节点(只给定待删除节点指针)1.单链表的反序 view plaincopy to clipboardprint?//逆转链表,并返回逆转后的头节点   node* reverse(node *head)   {       if(head == NULL || head->next == NULL)       {           re

2010-09-03 09:58:00 236

原创 linux设备驱动学习(七)

高级字符设备驱动一、ioctl大部分设备除了读写能力,还可进行超出简单的数据传输之外的操作,所以设备驱动也必须具备进行各种硬件控制操作的能力. 这些操作常常通过 ioctl 方法来支持,它有和用户空间版本不同的原型:int(*ioctl)(struct inode *inode,structfile*filp,              unsignedint cmd,unsignedlongarg);需要注意的是:不管可选的参数arg是否由用户给定为一个整数或一个指针,它都以一个unsigned long

2010-09-02 11:41:00 516

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除