linux驱动
文章平均质量分 53
fengxin215
这个作者很懒,什么都没留下…
展开
-
i2c驱动
i2c驱动的注册过程: Linux中I2C总线的驱动分为两个部分,总线驱动(BUS)和设备驱动(DEVICE)。其中总线驱动的职责,是为系统中每个I2C总线增加相应的读写方法。但是总线驱动本身并不会进行任何的通讯,它只是存在在那里,等待设备驱动调用其函数。 设备驱动则是与挂在I2C总线上的具体的设备通讯的驱动。通过I2C总线驱动提供的函数,设备驱动可以忽略不同总线控制器的差异,不考虑其实现细节地原创 2014-03-25 16:13:07 · 212 阅读 · 0 评论 -
设备模型相关
http://www.cnblogs.com/gdt-a20/category/343489.html http://blog.chinaunix.net/uid-26620753-id-3058177.html http://liaowb1234.blog.163.com/ http://blog.csdn.net/sailor_8318 http://blog.csdn.net/kelly原创 2014-03-25 16:16:22 · 127 阅读 · 0 评论 -
IO端口和IO内存的区别及分别使用的…
http://blog.csdn.net/insoonior/article/details/8011192 IO端口和IO内存的区别及分别使用的函数接口 每个外设都是通过读写其寄存器来控制的。外设寄存器也称为I/O端口,通常包括:控制寄存器、状态寄存器和数据寄存器三大类。根据访问外设寄存器的不同方式,可以把CPU分成两大类。一类CPU(如M68K,Power PC等)把这原创 2014-03-25 16:17:29 · 389 阅读 · 0 评论 -
Linux驱动总结3- unlocked_io…
http://blog.chinaunix.net/uid-20937170-id-3033633.html 学习了驱动程序的设计,感觉在学习驱动的同时学习linux内核,也是很不错的过程哦,做了几个实验,该做一些总结,只有不停的作总结才能印象深刻。 我的平台是虚拟机,fedora14,内核版本为2.6.38.1.其中较之前的版本存在较大的差别,具体的实现已经在上一次总结中给出了。今天主要总结原创 2014-03-25 16:17:59 · 242 阅读 · 0 评论 -
Linux下逻辑地址-线性地址-物理地…
一、逻辑地址转线性地址 机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过MMU(CPU中的内存管理单元)转换成物理地址才能够被访问到。 我们写个最简单的hello world程序,用gccs编译,再反编译后会看到以下指令: mov 0x80495b0, �x 这里的内存地址0x80495b0 就是一个逻辑地址,必须加上隐含的DS 数据段的基地址,才能构成线性地址原创 2014-03-25 16:18:12 · 169 阅读 · 0 评论 -
Linux网络设备驱动
Linux网络设备驱动 网络设备驱动和字符设备驱动、块设备驱动主要有两点不同: 1、 网络驱动程序不再是对文件进行操作,而是由专门的网络接口struct net_device来实现。应用程序不能直接访问网络驱动程序,只能由网络字系统与它交互。此外,不像字符设备和块设备在/dev目录下有一个特殊文件来表示该设备,网络设备没有这样的入口点。 2、 网络接口在系统初始化时实时生成,对于核原创 2014-03-25 16:13:43 · 296 阅读 · 0 评论 -
sys文件系统分析
http://www.cnblogs.com/myblesh/articles/2367613.html 还记得上篇讲到的platform总线、设备、驱动的知识??这里我们先来看一段documentation/filesystems/sysfs.txt里关于sysfs文件系统的描述: sysfs is a ram-based filesystem initially based on ra原创 2014-03-25 16:17:51 · 770 阅读 · 0 评论 -
kmalloc分配内存大小不应大于128K
kmalloc分配内存大小,不应大于128K。其大小在kmalloc_sizes.h中定义 由于在usb相机驱动中用kmalloc分配了大于128K的地址空间,因此使得内核经常crash。原创 2014-03-25 16:12:43 · 674 阅读 · 0 评论 -
Linux设备模型的嵌入(总线、设备…
文章的例子和实验使用《LDD3》所配的lddbus模块(稍作修改)。 提示:在学习这部分内容是一定要分析所有介绍的源代码,知道他们与上一部分内容(kobject、kset、attribute等等)的关系,最好要分析一个实际的“flatform device”设备,不然会只学到表象,到后面会不知所云的。 总线 总线是处理器和一个或多个设备之间的通道,在设备模型中, 所有的设备都通过总线相连, 甚至是原创 2014-03-25 16:16:18 · 174 阅读 · 0 评论 -
深入分析 Linux 内核链表
一、 链表数据结构简介 链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链 表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序 性和组织链的空间损失。 通常链表数据结构至少应包含两个域:数据域和指针域,数据域用于存储数据,指针域原创 2014-03-25 16:16:27 · 131 阅读 · 0 评论 -
加载驱动模块时指定参数
在加载驱动模块时可以指定驱动中的一些参数。例如在驱动中有如下代码: module_param(debug, int, 0); MODULE_PARM_DESC(debug, "Debug level: 0=none, 1=inits, 2=warning, 3=config, 4=functions, 5=max"); 我们就可以在加载驱动时指定debug变量的初始值。原创 2014-03-25 16:12:39 · 491 阅读 · 0 评论 -
编译驱动模块方法
编译模块方法: make modules SUBDIRS=dirver/media/video原创 2014-03-25 16:13:28 · 239 阅读 · 0 评论 -
内核定时器
内核定时器 在开发驱动程序的时候,难免要遇到将某些工作推后一定时间的处理,或者周期性的轮询硬件的状态。Linux提供了内核定时器完成这类工作。 定时器的使用非常方便,只需要执行一些初始化的操作,设置一个超时时间,指定超时发生时执行的函数,然后激活定时器就可以了。它的处理和工作队列还是有点类似的。其实,在Linux内核开发中,很多的操作都是类似的。还有一点需要注意的,内核定时器并不是周期运行,它在原创 2014-03-25 16:13:33 · 171 阅读 · 0 评论 -
Linux设备驱动开发详解
http://book.51cto.com/art/200803/66876.htm原创 2014-03-25 16:16:42 · 151 阅读 · 0 评论 -
kobject,kset,子系统层次结构
内核通常用kobject 结构将各个对象连接起来组成一个分层的结构体系。 parent 是指向另外一个kobject 结构(分层结构中上一层的节点)的指针,主要用途是在 sysfs 层次中定位对象. 一 个 kset 是嵌入到相同类型结构的 kobject 的集合。但 struct kobj_type 关注的是对象的类型,而struct kset 关心的是对象的集合,可认为kset是kobj原创 2014-03-25 16:17:48 · 219 阅读 · 0 评论 -
linux usb
1、 简述: USB 出自豪门,一问世便有 IBM,Microsoft,compaq 等前呼后拥,不红实在是没有道理,以致于连三岁小毛孩都知道买游戏手柄要买 USB 的。 USB 名气这么大,但 USB 是什么呢?要是想找份写驱动的活谋生,常会被问到这样的要求: “ 给我讲讲 USB 。 ” 无论你是谁,遇到这样的问题一定要扭头就跑,不然一定被雷死。 USB 使用方便,硬件设计也简单,但开发人原创 2014-03-25 16:18:17 · 452 阅读 · 0 评论 -
创建节点的问题
自学驱动以来,一直都是在加载模块后采用手动创建节点,虽然这个过程比较简单,毕竟还是有点麻烦,尤其是在调试模块的时候。 #insmod module_name.ko #mknod /dev/module_name c MAJOR MINOR # 在2.4里设备文件采用的是devfs,在2.6里已经用udev取代devfs,为解决上面那样手动创建节点的麻烦,我们可以在程序里加上创建节点这项原创 2014-03-25 16:16:11 · 150 阅读 · 0 评论 -
个人对kobject的一点研究
在LINUX中最让人不解的大概就是/sys下面的内容了 下面首先让我们来创建一个简单的platform设备,并从这个设备的视角进行深入,在此篇文章的深入过程中,我们只看kobeject的模型 我所使用的内核版本号为2.6.26,操作系统的内核版本号为2.6.27-7,暂未发现2.6.27-7与2.6.26的重大不同 首先写一个简单的模块 #include #include #incl原创 2014-03-25 16:15:41 · 149 阅读 · 0 评论 -
U-BOOT源码分析及移植
U-BOOT源码分析及移植 本文从以下几个方面粗浅地分析u-boot并移植到FS2410板上: 1、u-boot工程的总体结构 2、u-boot的流程、主要的数据结构、内存分配。 3、u-boot的重要细节,主要分析流程中各函数的功能。 4、基于FS2410板子的u-boot移植。实现了NOR Flash和NAND Flash启动,网络功能。 这些认识源于自己移植u-boot过程中查找的资料和对原创 2014-03-25 16:14:33 · 145 阅读 · 0 评论 -
SPI设备的驱动
今天折腾了一天的SPI设备的驱动加载,甚至动用了逻辑分析仪来查看spi总线的波形,主要包括两个SPI设 备,at45db321d和mcp2515,一个是串行的dataflash,一个是can总线设备芯片。前者对于我们来说非常重要,我们可以借助该设备 对uboot和kernel以及根文件系统进行更新。 预备知识:设备和驱动是如何匹配的?系统的热插拔是如何实现的? 首先一点,设备和驱动原创 2014-03-25 16:16:05 · 209 阅读 · 0 评论 -
linux设备模型bus,device,driver(…
在看基于platform总线的设备驱动时,总理不清三者之间的关系,后来通过看国嵌的视频教程, 到bus,device,driver,才对linux的设备模型有了一个更深入的了解。于是,便在开发板上,测试了一下,在此,把学过的东西,做下总结。 linux2.6提供了新的设备模型:总线、驱动、设备。基本关系简要的概括如下: 驱动核心可以注册多种类型的总线。 每种总线下面可以挂载许多设备。(通过k原创 2014-03-25 16:16:16 · 141 阅读 · 0 评论 -
Linux内核部件分析
http://blog.csdn.net/qb_2008/article/category/896982 http://blog.csdn.net/z2007b/article/details/6388753原创 2014-03-25 16:17:46 · 177 阅读 · 0 评论 -
浅析linux 2.6.23驱动注册函数driv…
浅析linux 2.6.23驱动注册函数driver_register() 文章来源:http://gliethttp.cublog.cn int driver_register(struct device_driver * drv) { if ((drv->bus->probe && drv->probe) || //drv和drv所属的bus之中只要1个提供该函数即可,否则也只能调原创 2014-03-25 16:13:22 · 249 阅读 · 0 评论 -
内核源码src.rpm安装方法
内核源码src.rpm安装方法: 1、rpm -ivh kernel-2.6.18-1.2798.fc6.src.rpm 2、cd /usr/src/Redhat/SPECS 3、rpmbuild -bp --target=i686 kernel-2.6.spec debian/ubuntu 安装内核源码的方法:apt-get install linux-source原创 2014-03-25 16:13:26 · 531 阅读 · 0 评论 -
让嵌入式Linux支持LCD console
我现在使用的平台:三星S3C2410,640*480 TFT LCD;2.4.18的内核,已经具备了USB键盘支持; 打早就希 望可以将2410上跑的Linux的控制台放到LCD上去,然后用USB键盘作为输入,这样就真的像一个小终端了。在网上找了一些资料,大部分只是说可以 将kernel的启动参数的“console”设置为“tty0”即可,试了一下,修改之后的确可以把内核启动的信息打印到LCD上,原创 2014-03-25 16:13:55 · 410 阅读 · 0 评论 -
编译kernel遇到问题
编译模块.o文件时,遇到下面的错误: parse error before "this_object_must_be_defined_as_export_objs_in_the_Makefile" 【错误原因】 出现这个错误的根本原因是,使用了模块方式来编译程序,并且,可能在程序中使用了EXPORT_SYMBOL来导出某些符号,而编译的时候并没有指定这个模块是需要导出符号表的,从而导致出错。原创 2014-03-25 16:13:52 · 487 阅读 · 0 评论 -
V4L2驱动程序架构
http://blog.csdn.net/shui1025701856/article/details/7459868原创 2014-03-25 16:16:40 · 131 阅读 · 0 评论 -
DAVINCI DM365-DM368开发攻略…
http://zjbintsystem.blog.51cto.com/964211/768652 2012年的春节就这样过了,假期期间,在接到的大项目没有进展的情况下(团队的人都回家过年了),利用这三天深圳最冷的时间(5°C):1月 25~27号,赶紧完成这篇文章的稿子,毕竟很长时间没有更新博客了,后面一上班就得忙几个客户的大项目;在这里也顺便纪念一下去年故去的C语言之父—— 丹尼斯·里奇,也原创 2014-03-25 16:17:12 · 671 阅读 · 0 评论 -
mmap
mmap作为struct file_operations的重要一个元素,mmap主要是实现物理内存到虚拟内存的映射关系,这样可以实现直接访问虚拟内存,而不用使用设备相关的 read、write操作,mmap的基本过程是将文件映射到虚拟内存中。在之前的一篇博客中谈到了mmap实现文件复制的操作。 关于linux中的mmap调用如下,最好的办法查看命令,man mmap: 必要的头文件 #includ原创 2014-03-25 16:18:14 · 227 阅读 · 0 评论 -
vmallc与kmalloc
琢磨了很久也参考了很多资料,发现很多都说的有点含糊,在这里先介绍一下Linux中对实际内存的一个分配,Linux内核将实际内存(注意是实际内存,这 里暂且考虑不大于1G的内存)分为三个区段:可用于DMA的内存、常规内存以及高端内存。这里只介绍一下高端内存与地段内存。 高端内存是指物理地址大于 896M 的内存。对于这样的内存,无法在“内核直接映射空间”进行映射。并没有和内核地址空间建立一一对应原创 2014-03-25 16:14:20 · 324 阅读 · 0 评论 -
SPI内核驱动模型-dm8127
利用TI提供的已有SPI内核驱动模型,该方案需要我们了解内核的SPI驱动模型是如何实现的。 3.1. SPI内核驱动模型 在2.6的linux内核中,SPI的驱动架构可以分为如下三个层次:SPI 核心层、SPI控制器驱动层和SPI设备驱动层。Linux 中SPI驱动代码位于drivers/spi目录。 3.1.1. SPI核心层 SPI核心层是Linux的SPI核心部分,提供了核心原创 2014-03-25 16:17:24 · 342 阅读 · 0 评论 -
Linux内核中常见内存分配函数
1.原理说明 Linux内核中采 用了一种同时适用于32位和64位系统的内 存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系 统中,用到了四级页表,如图2-1所示。四级页表分别为: * 页全局目录(Page Global Directory) * 页上级目录(Page Upper Directory) * 页中间目录(Page Middle Directory)原创 2014-03-25 16:18:08 · 225 阅读 · 0 评论 -
统计中断时间间隔
以下是一个统计中断时间间隔的中断服务程序。 irqreturn_t short_interrupt(int irq, void *dev_id, struct pt_regs *regs) { static long mytime=0; static int i=0; struct net_device *dev=(struct net_device *)dev_id; if(i==0){ m原创 2014-03-25 16:10:38 · 590 阅读 · 0 评论 -
《Linux Kernel Development》读书…
《Linux Kernel Development》读书笔记 http://www.cppblog.com/luckycat/archive/2010/03/03/108836.html 《Linux内核情景分析》这本书读过了一遍,不想继续读第二遍了. 《Linux Kernel Development》这本书前后读了3遍,写得实在是好,正所谓"布衣暖,菜根香,好书滋味长". 去原创 2014-03-25 16:14:18 · 221 阅读 · 0 评论 -
编译驱动Makefile
KERNEL_VERSION := $(shell uname -r) KERNEL_DIR := /lib/modules/$(KERNEL_VERSION)/build INSTALL_MOD_DIR := kernel/drivers/media/video/gspca #CROSS_COMPILE :=arm-none-linux-gnueabi- PWD原创 2014-03-25 16:18:27 · 259 阅读 · 0 评论