Linux Driver
文章平均质量分 83
hustyangju
这个作者很懒,什么都没留下…
展开
-
LINUX设备驱动开发入门之环境搭建
一个基本的Linux设备驱动开发环境由宿主机和目标机组成,宿主机就是用来做驱动开发工作的主机,目标机就是用来运行和测试设备驱动的主机,在宿 主机上需要有开发工具(gcc,gdb,make等)和linux源码(版本要对应目标机上的linux内核),而目标机上只要运行linux即可。由于 步骤有所不同,下面分为普通Linux设备驱动开发和嵌入式Linux设别驱动开发两种情况来讲述环境的搭建和驱动程序的原创 2014-02-24 21:17:26 · 2268 阅读 · 0 评论 -
Linux设备驱动:kobject原理与实例分析
1、Sysfs文件系统"sysfsis a ram-based filesystem initially based on ramfs. It provides ameans to export kernel data structures, their attributes, and thelinkages between them to userspace.”Linux2.6内原创 2014-10-30 10:47:51 · 2951 阅读 · 0 评论 -
linux中断处理下文: 工作队列分析
工作队列(work queue)是另外一种将工作推后执行的形式,它和前面讨论的tasklet有所不同。工作队列可以把工作推后,交由一个内核线程去执行,也就是说,这个下半部分可以在进程上下文中执行。这样,通过工作队列执行的代码能占尽进程上下文的所有优势。最重要的就是工作队列允许被重新调度甚至是睡眠。那么,什么情况下使用工作队列,什么情况下使用tasklet。如果推后执行的任务需要睡眠,那么就原创 2014-03-10 15:40:54 · 1567 阅读 · 0 评论 -
linux字符cdev和inode的联系
Char Device Driver 相关数据结构: struct cdev { struct kobject kobj; struct module *owner; const struct file_operations *ops; struct list_head list; dev_t dev; unsigned int count;原创 2014-04-15 09:56:00 · 1485 阅读 · 2 评论 -
嵌入式linux驱动开发环境搭建(亲测成功)
一开发环境:(1)主机:vmware8+fedora14,内核版本为2.6.35,主机自带GCC版本4.5。(这两点很重要,所有的问题都与这两个因素有关)。(2)目标机:S3C6410(arm11)(3)目标机内核:linux2.6.24(4)交叉编译工具:arm-linux-gcc-4.2.2二搭建交叉编译环境:首先搭建PC上的编译环境,因为编译的驱动是在板子上运行的,第原创 2014-03-07 18:06:13 · 3664 阅读 · 0 评论 -
linux等待队列
Linux内核的等待队列是以双循环链表为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。在Linux2.4.21中,等待队列在源代码树include/linux/wait.h中,这是一个通过list_head连接的典型双循环链表,如下图所示。在这个链表中,有两种数据结构:等待队列头(wait_queue_head_t)和等待队列项(wait_queue_t)。原创 2014-03-07 13:54:59 · 2758 阅读 · 0 评论 -
S3C6410 SPI全双工读写流程分析(原创)
原创博文,知识共享!转载请注明出处:S3C6410 SPI全双工读写流程分析一、SPI控制器datasheet1详细请参考:http://blog.csdn.net/hustyangju/article/details/204746592 SPI的所有寄存器都是映射到内核空间的,采用基地址+偏移地址的方式访问static volatile void __iomem *原创 2014-03-13 13:04:47 · 7369 阅读 · 1 评论 -
linux驱动调试之printk()
对于做嵌入式或者熟悉linux内核的人来说,对printk这个函数一定不会感到陌生。printk相当于printf的孪生姐妹,她们一个运行在用户态,另一个则在内核态被人们所熟知。 printk是在内核中运行的向控制台输出显示的函数,Linux内核首先在内核空间分配一个静态缓冲区,作为显示用的空间,然后调用sprintf,格式化显示字符串,最后调用tty_write向终端进行信息的显示原创 2014-03-12 11:16:44 · 1793 阅读 · 0 评论 -
linux驱动的类class及其节点
一个类是一个设备的高级视图, 它抽象出低级的实现细节. 驱动可以见到一个SCSI 磁盘或者一个 ATA 磁盘, 在类的级别, 它们都是磁盘. 类允许用户空间基于它们做什么来使用设备, 而不是它们如何被连接或者它们如何工作. 几乎所有的类都在 sysfs 中在 /sys/class 下出现. 因此, 例如, 所有的网络接口可在 /sys/class/net 下发现, 不管接口类型. 输入设原创 2014-03-11 15:28:15 · 3863 阅读 · 0 评论 -
class_create(),device_create(),device_create_file()
开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点(包括ldd3中不少例子也是这样),实际上现在Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点。内核中定义了struct class结构体,顾名思义,一个struct class结构体类型变量对应一个类,内核同时提供了class_creat原创 2014-03-11 16:01:05 · 3615 阅读 · 0 评论 -
Linux 设备驱动poll轮询编程
Linux系统下网络模型数select最为常用,当然,select只是检测文件系统数据状态,并不只局限于网络编程,select的功能需要底层驱动提供支持,其中核心应用即为等待队列,其他模型,如poll和epoll,对驱动来说并无区别,驱动只是返回数据状态而已。驱动支持select,需要实现file_operations结构中的poll函数指针,其实现也非常简单,只是poll_wait函数的调用,原原创 2014-03-11 14:54:11 · 2680 阅读 · 0 评论 -
S3C6410的SPI控制器
1. SPI控制器1.1 概述SPI总线是一种全双工串行同步通讯协议,SPI(Serial Peripheral Interface)串行外围接口能够支持串行数据传输,其包含两个独立的8/16/32位移位寄存器分别用于发送和接收。在SPI传输期间,数据同步发送(串行移出)和接收在(串行移入)。 1.2 SPI控制器支持下面的特征1)原创 2014-03-04 17:34:10 · 2578 阅读 · 0 评论 -
预定义宏__LINE__,__FILE__解析
#line指令改变_ _ _LINE_ _ _和_ _ _FILE_ _ _的内容。_ _ _LINE_ _ _和_ _ _FILE_ _ _都是编译程序中预定义的标识符。标识符_ _ _LINE_ _ _的内容是当前被编译代码行的行号,_ _ _FILE_ _ _的内容是当前被编译源文件的文件名。#line的一般形式是: #line number"filename"其中,num原创 2014-03-05 10:56:13 · 1261 阅读 · 0 评论 -
linux内核SPI总线驱动分析
下面有两个大的模块:一个是SPI总线驱动的分析 (研究了具体实现的过程)另一个是SPI总线驱动的编写(不用研究具体的实现过程)SPI总线驱动分析1 SPI概述 SPI是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口,是Motorola首先在其MC68HC原创 2014-03-04 13:37:04 · 2105 阅读 · 0 评论 -
ARM-Linux驱动相关头文件知识点
#include 在linux-2.6.31/include/linux下面寻找源文件#include 在linux-2.6.31/arch/arm/include/asm下面寻找源文件#include 在linux-2.6.31/arch/arm/mach-s3c2410/include/mach下面寻找源文件#include 在linux-2.6.31/arch/arm/p原创 2014-03-03 14:25:55 · 1570 阅读 · 0 评论 -
内核编译错误:Makefile‘混和的隐含和普通规则’错误的解决
工作环境: fedora19目标平台:s3c6410开发包内核版本:2.6.24交叉编译工具:gcc-3.4.1用gcc-3.4.6交叉编译6410内核,执行make命令,会提示"*** 混和的隐含和普通规则。 停止。"的错误。这是由于fedora19的Make工具对低版本内核Makefile一些旧的规则兼容不是很好,只需要修改一下开发包内核原码里的Makefile。对文件/hom原创 2014-02-25 11:10:26 · 1460 阅读 · 0 评论 -
make clean、 make mrproper、make distclean的区别
内核编译时, 到底用make clean, make mrproper还是make distclean在编译内核时, 被make clean, make mrproer 和 make distclean搞的纠结, 稍微总结一下这三者之间的区别:解压内核源码包后, 到内核源代码目录树的顶层目录, 执行# make helpCleaning targets:clean原创 2014-02-25 11:01:08 · 982 阅读 · 0 评论 -
Linux内核调试printk()总结
我们在使用printk()函数中使用日志级别为的是使编程人员在编程过程中自定义地进行信息的输出,更加容易地掌握系统当前的状况。对程序的调试起到了很重要的作用。(下文中的日志级别和控制台日志控制级别是一个意思)printk(日志级别 "消息文本");这里的日志级别通俗的说指的是对文本信息的一种输出范围上的指定。日志级别一共有8个级别,printk的日志级别定义如下(在linu原创 2014-10-30 11:27:11 · 2007 阅读 · 0 评论