linux驱动
文章平均质量分 80
bugouyonggan
这个作者很懒,什么都没留下…
展开
-
linux 内核驱动中__attribute__((alias(#x)))别名问题
本篇为《linux启动时对编译进内核驱动模块的加载》的姊妹篇,主要是module模式下驱动的加载分析.#ifndef MODULE# define MODULE#endif定义#define MODULE是为了include/linux/init.h头文件中使用模块系统函数,[2007-07-14gliethttp]如使用模块module_init(),在《linux启动时对编转载 2012-11-01 15:17:14 · 3401 阅读 · 0 评论 -
基于MTD的NANDFLASH设备驱动底层实现原理分析 一
一、MTD体系结构:Linux内核提供MTD子系统来建立FLASH针对Linux的统一、抽象接口。MTD将文件系统与底层的FLASH存储器进行隔离。 引入MTD后Linux系统中对FLASH的设备驱动分为4层 设备节点:用户在/dev目录下使用mknod命令建立MTD字符设备节点(主设备号为90),或者MTD块设备节点(主设备号为31),使用该设备节转载 2013-06-28 16:46:49 · 1590 阅读 · 0 评论 -
USB驱动分析 +<bus,device,driver三者关系>
USB驱动分析 + 来自:http://blog.chinaunix.net/uid-20691722-id-3154640.html=======================================================这个故事中使用的是2.6.10的内核代码.Linux内核代码目录中, 所有去设备驱动程序有关的代码都在drive转载 2013-08-02 17:40:36 · 2531 阅读 · 0 评论 -
浅析usb转serial串口设备在linux内核中枚举创建及生成tty设备的全过
浅析usb转serial串口设备在linux内核中枚举创建及生成tty设备的全过 1.usb_register和usb_register_driver用来注册一个interface接口驱动for_devices = 0;2.usb_register_device_driver用来注册一个usb设备驱动,for_devices = 1;用来解析转载 2013-08-02 18:52:19 · 2908 阅读 · 0 评论 -
Linux设备模型(热插拔、mdev 与 firmware)
转自:http://blog.chinaunix.net/space.php?uid=20543672&do=blog&cuid=460882热插拔有 2 个不同角度来看待热插拔: 从内核角度看,热插拔是在硬件、内核和内核驱动之间的交互。 从用户角度看,热插拔是内核和用户空间之间,通过调用用户空间程序(如hotplug、udev 和 mdev)的交互。 当需要通知用户内转载 2013-09-12 11:31:32 · 847 阅读 · 0 评论 -
hotplug
hotplug - Dynamic Hardware Configurationby Chris LumensSeptember 8, 2004What is hotplug?hotplug is a system for managing devices that can be dynamically attached to and removed from th转载 2013-09-12 14:25:03 · 2012 阅读 · 0 评论 -
USB gadget设备驱动解析
作者:刘洪涛,华清远见嵌入式学院金牌讲师。利用Linux USB gadget设备驱动可以实现一些比较有意思的功能,举两个例子: 1、一个嵌入式产品中的某个存储设备,或是一个存储设备的某个分区,可以作为一个U盘被PC;设别,从而非常方便的完成文件交互,这个功能被广泛的应用于手机、数码相机等产品中。2、一个嵌入式设备通过USB连接到你的PC后,在你的PC端会出现一个新的网络连接,在嵌入式设备转载 2013-10-31 16:43:23 · 15140 阅读 · 1 评论 -
Linux下USB Core的工作原理及设备驱动技术
Linux下USB Core的工作原理及设备驱动技术Linux下USB Core的工作原理及设备驱动技术Linux以其稳定、高效、易定制、硬件支持广泛、源代码开放等特点,已在嵌入式领域迅速崛起,被国际上许多大型的跨国企业用作嵌入式产品的系统平台。USB是Universal Serial Bus (通用串行总线)的缩写,是1995年由Microsoft、Compaq、IBM等转载 2013-10-31 16:28:19 · 2268 阅读 · 0 评论 -
Linux设备驱动子系统 - USB Gadget
1. 前言2. 源码架构3. 枚举过程1. 前言Gadget,小饰品。USB Gadget,就是指所开发的电子设备以USB从设备的模式通过USB连接到主机。比如手机用USB线插入PC后,手机就是USB Gadget。本文以Mavell为例,以Gadget插入主机的全过程为主线,分析USB Gadget的架构。 2. 源码架构USB的源码位转载 2013-11-01 18:11:02 · 1206 阅读 · 0 评论 -
linux tty pty pts 概念 区别
基本概念:1. tty(终端设备的统称):tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘与显示器取代,所以现在叫终端比较合适。终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。2. pty(虚拟终端):但是如果我们远程telnet到主机或使用转载 2013-12-03 13:13:05 · 799 阅读 · 0 评论 -
Linux中tty框架与uart框架之间的调用关系剖析
在串口驱动移植中static struct platform_device sc16550_device结构体在配置好以后,使用了linux内核模型的platform总线机制中设备注册接口函数:platform_device_register(&sc16550_device);将 sc16550_device 设备挂载到了platform bus上。上文已经提到驱动所使用的正是 8250来进行驱动转载 2013-12-03 16:31:00 · 1482 阅读 · 0 评论 -
Nand flash读写范围的问题
很多时候对nand的操作都是通过主控的nand控制器直接完成,或者更多时候是通过MTD标准操作接口完成读写擦的过程,然而有些细节问题有必要在这里讨论一下,我分为以下几点进行说明:flash读写范围的问题" title="Nand flash读写范围的问题" style="margin:0px; padding:0px; border:0px; list-style:none">flas转载 2014-02-12 18:14:37 · 1859 阅读 · 0 评论 -
嵌入式linux的tftp安装配置及tftp命令用法
嵌入式linux的tftp安装配置及tftp命令用法 TFTP协议简介 TFTP是用来下载远程文件的最简单网络协议,它其于UDP协议而实现。嵌入式linux的tftp开发环境包括两个方面:一是linux服务器端的tftp-server支持,二是嵌入式目标系统的tftp-client支持。因为u-boot本身内置支持tftp-client,所以嵌入式目标系统端就不用配置了转载 2013-05-03 09:23:02 · 2897 阅读 · 0 评论 -
Linux __setup解析
__setup这条宏在Linux Kernel中使用最多的地方就是定义处理Kernel的启动参数的函数及数据结构,宏定义如下:#define __setup(str, fn) \__setup_param(str, fn, fn, 0)#define __setup_param(str, unique_id, fn, early) \static char __setu转载 2014-07-08 14:02:52 · 580 阅读 · 0 评论 -
如何编写linux下nand flash驱动
http://www.cnblogs.com/sankye/articles/1638852.html向作者Sankye致敬【编写驱动之前要了解的知识】1. 硬件特性:【Flash的硬件实现机制】Flash全名叫做Flash Memory,属于非易失性存储设备(Non-volatile Memory Device)转载 2014-07-09 16:50:38 · 3155 阅读 · 0 评论 -
mtd nandflash 分析
一、MTD 的概念和层次MTD(memory technology device 存储 技术设备 ) 是用于访问 memory 设备( ROM 、 flash )的 Linux 的子系统。 MTD 的主要目的是为了使新的 memory 设备的驱动更加简单,为此它在硬件和上层之间提供了一个抽象的接口。 MTD 的所有源代码在 /drivers/mtd 子目录下 。[1]传统上, UNIX 只转载 2014-07-09 17:07:55 · 3615 阅读 · 0 评论 -
dma
DMA本来不属于CPU体系架构部分的内容,只因为在开发中经常要用到其相关的知识,所以这里就其基本概念、工作原理、常见问题做一个总结。DMA概述DMA的英文拼写是“Direct Memory Access”,汉语的意思就是直接内存访问。DMA既可以指内存和外设直接存取数据这种内存访问的计算机技术,又可以指实现该技术的硬件模块(对于通用计算机PC而言,DMA控制逻辑由CPU和DMA控制转载 2014-01-03 18:35:25 · 6481 阅读 · 1 评论 -
Nandflash中的ECC原理及实现
Nandflash中的ECC原理及实现 2012-03-17 12:37:32| 分类: ARM外设|举报|字号 订阅ECC的全称是Error Checking and Correction,是一种用于Nand的差错检测和修正算法。如果操作时序和电路稳定性不存在问题的话,NAND Flash出错的时候一般不会造成整个Block或是Page不能读取转载 2014-10-16 15:13:16 · 2246 阅读 · 0 评论 -
基于MTD的NANDFLASH设备驱动底层实现原理分析 三
实在写不下去了,仔细的想了一想还是把mtd/nand/s3c2410.c好好的分析分析在Linux中NANDFLASH设备驱动是被注册成平台驱动的。我还是从函数的入口出发一步一个脚印的分析。突然间发现这些代码真的很经典由于这一次CPU是S3C2440所以分析过程中会把其他的CPU去掉七、mtd/nand/s3c2410.c函数的解析1、函数中出现的几个结构体转载 2013-06-28 16:51:27 · 953 阅读 · 0 评论 -
基于MTD的NANDFLASH设备驱动底层实现原理分析 二
进过前面对NANDFLASH的一些硬件特性以及MTD的上层操作已经有了一个大体概念,这些东西的重要性就像你要吃饭那么你首先得学会拿筷子道理一样吧,应该一样的。五、MTD原始设备层和硬件驱动层的桥梁: 熟悉这几个重要的结构体:linux/mtd/mtd.hstruct mtd_info { u_char type; /*转载 2013-06-28 16:49:05 · 1097 阅读 · 0 评论 -
关于module_param()宏
为了增加驱动程序的灵活性,内核允许对驱动程序指定参数,而这些参数可在加载驱动程序模块时改变。这些参数的值可由 insmod 或者 modprobe 在加载时指定; 后者也可以从它的配置文件(/etc/modprobe.conf)读取参数的值。这两个命令可在命令行里接受几种参数类型的赋值。在用户态下编程可以通过main()的来传递命令行参数,而编写一个内核模块则通过modul转载 2013-06-27 15:24:47 · 1257 阅读 · 1 评论 -
GNU C __attribute__ 机制简介
今天在看linux源代码的时候,碰到了__attribute__,在网上查到下面的解释,贴出来给像我一样linux初学者,希望有所帮助。…………………………………………………………………………………………………………………………………………………………………………………………GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属转载 2012-11-01 15:19:41 · 762 阅读 · 0 评论 -
class_create(),class_device_create()或device_create()自动创建设备文件结点
从linux内核2.6的某个版本之后,devfs不复存在,udev成为devfs的替代。相比devfs,udev有很多优势,在此就不罗嗦了,提醒一点,udev是应用层的东东,不要试图在内核的配置选项里找到它;加入对udev的支持很简单,以作者所写的一个字符设备驱动为例,在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用 class_device_creat转载 2012-11-30 11:04:02 · 558 阅读 · 0 评论 -
基于linux-2.6.35的class_create(),device_create解析
从linux内核2.6的某个版本之后,devfs不复存在,udev成为devfs的替代。提醒一点,udev是应用层的,不要试图在内核的配置选项里找到它;加入对udev的支持很简单,以作者所写的一个字符设备驱动为例,在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用device_create创建对应的设备。大致用法如下:struct class *m转载 2012-11-30 14:35:52 · 683 阅读 · 0 评论 -
io端口和io内存
linux中的 IO端口映射和IO内存映射(一)地址的概念1)物理地址:CPU地址总线传来的地址,由硬件电路控制其具体含义。物理地址中很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上 (如显存、BIOS等)。在程序指令中的虚拟地址经过段映射和页面映射后,就生成了物理地址,这个物理地址被放到CPU的地址线上。 物理地址空间,一部分给物理RAM(内存)用,转载 2012-12-11 16:19:44 · 7488 阅读 · 1 评论 -
linux中 probe函数的何时调用的
所以的驱动教程上都说:只有设备和驱动的名字匹配,BUS就会调用驱动的probe函数,但是有时我们要看看probe函数里面到底做了什么,还有传递给probe函数的参数我们就不知道在哪定义(反正不是我们在驱动里定义的),如果不知道传递进的参数,去看probe函数总是感觉不求甚解的样子(你对系统不求甚解,系统也会对你的要求不求甚解的),心里对自己写出的程序没底,保不齐那天来个bug,就悲剧了。转载 2012-12-29 16:38:46 · 1015 阅读 · 2 评论 -
linux 工作队列
INIT_DELAYED_WORK()是一个宏,我们给它传递了两个参数.&hub->leds和led_work.对设备驱动熟悉的人不会觉得INIT_DELAYED_WORK()很陌生,其实鸦片战争那会儿就有这个宏了,只不过从2.6.20的内核开始这个宏做了改变,原来这个宏是三个参数,后来改成了两个参数,所以经常在网上看见一些同志抱怨说最近某个模块编译失败了,说什么make的时候遇见这么一个错误:转载 2012-12-19 17:07:27 · 870 阅读 · 0 评论 -
linux 异步非阻塞IO
Linux2.6异步I/O AIO的基本思想: 允许进程发起很多I/O操作,而不用阻塞或等待任何操作完成,稍后或在 接收到I/O操作完成通知时,进程可以检索I/O操作结果 在异步非阻塞I/O中,我们可以同时发起多个传输操作,这需要每个传输操作都有唯一的上下文 ,这样我们才能在他们完成时区分到底是哪个传输操作完成了,这个 工作可以通过aiocb结转载 2012-12-19 15:00:29 · 1916 阅读 · 0 评论 -
使用printk调试kernel
printk(KERN_ERR "\n\nfile: %s \t line = %d\t function: %s\n", __FILE__, __LINE__, __func__);printk("KERNEL:File: %s\t line = %d\t function: %s\n", __FILE__, __LINE__, __func__);调试kernel增加一些打印信息,转载 2013-01-23 17:30:53 · 2838 阅读 · 0 评论 -
编写Linux驱动常见错误
工作中遇到的编写Linux驱动的常见错误和注意事项整理。 问题1、驱动的init函数声明错误出错:[root@localhost]# insmod phyinfo.ko insmod: error inserting 'phyinfo.ko': -159951552 Success 原因:驱动实现不对:static void phyinfo_init(vo转载 2013-01-23 17:32:46 · 1524 阅读 · 0 评论 -
linux spi驱动分析整理
1、SPI总线: SPI(同步外设接口)是由摩托罗拉公司开发的全双工同步串行总线,其接口由 MISO(串行数据输入),MOSI(串行数据输出),SCK(串行移位时钟),SS/CS(从使能信号)四种信号构成(当然了,现在芯片技术日新月异,SPI 模块的结构也在变化中,象 OMAP 系列中的 SPI 模块还支持 5 线的一种模式),SS /CS决定了唯一的与主设备通信的从设备,主设转载 2013-02-20 17:40:28 · 1459 阅读 · 0 评论 -
Linux内核模块LKM编译-自制Makefile模板
原文地址:Linux内核模块LKM编译-自制Makefile模板 作者:tekkamanninja 前段时间对内核的模块重新做了研究,对内核模块的编译流程也作了一定的了解,比起5年前有更深入的认识。 根据LDD3的内核模块makefile和原理说明,我根据自己的需要做了适当的修改使得这个Makefile脚本可以方便被应用于不同的简单模块编译,并可以在模块需要编转载 2013-04-23 17:12:55 · 1997 阅读 · 0 评论 -
completion
Completioncompletion是一种轻量级的机制,它允许一个线程告诉另一个线程某个工作已经完成。代码必须包含。使用的代码如下: DECLARE_COMPLETION(my_completion);/* 创建completion(声明+初始化)*/////////////////////////////////////////////////////////转载 2013-05-06 17:11:56 · 843 阅读 · 0 评论 -
linux之DMA API
通用设备的动态DMA映射by JHJ(jianghuijun211@gmail.com) 本文描述DMA API。更详细的介绍请参看Documentation/DMA-API-HOWTO.txt。API分为两部分,第一部分描述API,第二部分描述可以支持非一致性内存机器的扩展API。你应该使用第一部分所描述的API,除非你知道你的驱动必须要支持非一致性平台。转载 2013-05-13 17:16:47 · 15610 阅读 · 0 评论 -
SEP4020 Linux DMA驱动编写心得及使用流程
SEP4020 DMA驱动编写心得及使用流程照例,一个驱动写完后要记录点东西,日后有问题绝对是珍贵的参考资料。前两天看了s3c2410的linux dma驱动,写的很巧妙,我们的SEP4020也有必要编写一个专用的DMA驱动程序。SEP4020以前的驱动中,在使用DMA时(如nand、iis、sd、usb)都是在驱动中各自配置,一般使用while循环来等待DMA传输完成。这种方转载 2013-05-13 17:22:12 · 1552 阅读 · 0 评论 -
关于字节顺序的转换 -- linux-2.4.26\include\linux\byteorder
在处理网络数据包的时候,牵涉到字节顺序的变换,下边是源代码,很清晰的表示了怎么进行大端小端的字节转换。主要是在编程中要知道这几个宏定义的意义。#ifndef _LINUX_BYTEORDER_SWAB_H#define _LINUX_BYTEORDER_SWAB_H/* * linux/byteorder/swab.h * Byte-swapping, independen原创 2013-06-13 18:40:10 · 1058 阅读 · 0 评论 -
mtd 介绍
MTD,Memory Technology Device即内存技术设备字符设备和块设备的区别在于前者只能被顺序读写,后者可以随机访问;同时,两者读写数据的基本单元不同。字符设备,以字节为基本单位,在Linux中,字符设备实现的比较简单,不需要缓冲区即可直接读写,内核例程和用户态API一一对应,用户层的Read函数直接对应了内核中的Read例程,这种映射关系由字符设备的file_op转载 2013-06-25 10:29:15 · 24781 阅读 · 0 评论 -
mtd坏块管理
0.NAND的操作管理方式 NAND FLASH的管理方式:以三星FLASH为例,一片Nand flash为一个设备(device),1 (Device) = xxxx (Blocks),1 (Block) = xxxx (Pages),1(Page) =528 (Bytes) = 数据块大小(512Bytes) + OOB 块大小(16Bytes,除OOB第六字节外,通常至少把O转载 2013-06-27 15:49:13 · 3230 阅读 · 0 评论 -
NandFlash详述
NandFlash详述 2012-03-17 12:49:59| 分类: ARM外设|举报|字号 订阅转自:http://www.cnblogs.com/sankye/articles/1638852.html 想念东北的下雪的冬天1. 硬件特性:【Flash的硬件实现机制】Flash全名叫做Flash Mem转载 2014-10-16 15:08:39 · 1239 阅读 · 0 评论