
Linux驱动开发
文章平均质量分 82
eilianlau
这个作者很懒,什么都没留下…
展开
-
基于MTD的NANDFLASH设备驱动底层实现原理分析(五)
Linux内核在MTD的下层实现了通用的NAND驱动(/driver/mtd/nand/nand_base.c)因此芯片级的驱动实现不再需要我们关心mtd中的那些成员函数了主题转移到nand_chip数据结构中先了解了解nand_chip结构体struct nand_chip { void __iomem *IO_ADDR_R; //读8位I/O线的地址原创 2011-11-12 17:39:08 · 3387 阅读 · 0 评论 -
MTD原始设备与NANDFLASH硬件驱动交互
好久没写博客了,今天再次分析NANDFLASH驱动程序,每一次读源码总有一点的收获1、首先从入口函数开始probe函数将是我们遇到的第一个与具体硬件打交道,同时也相对复杂的函数对于很多外设的driver来说,只要能成功实现probe函数,那基本上完成这个外设的driver也就成功了一多半,基于MTD的NAND driver就是一个典型的例子。稍后就可以看到,在NAND driver的p原创 2011-12-02 10:56:39 · 1494 阅读 · 0 评论 -
基于MTD的NANDFLASH设备驱动底层实现原理分析(七)
上接:基于MTD的NANDFLASH设备驱动底层实现原理分析(六)初始化基本的硬件配置后probe函数就会开始与NAND芯片进行交互了,它要做的事情主要包括这几个方面:读取NAND芯片的ID,然后查表得到这片NAND芯片的如厂商,page size,erase size以及chip size等信息,接着,根据struct nand_chip中options的值的不同,或者在NAND芯片原创 2011-11-13 18:21:34 · 3590 阅读 · 0 评论 -
基于MTD的NANDFLASH设备驱动底层实现原理分析(六)
实在写不下去了,仔细的想了一想还是把mtd/nand/s3c2410.c好好的分析分析在Linux中NANDFLASH设备驱动是被注册成平台驱动的。我还是从函数的入口出发一步一个脚印的分析。突然间发现这些代码真的很经典由于这一次CPU是S3C2440所以分析过程中会把其他的CPU去掉七、mtd/nand/s3c2410.c函数的解析1、函数中出现的几个结构体struct s3c原创 2011-11-13 13:42:53 · 4191 阅读 · 5 评论 -
Linux2.6.39内核sk_buff的结构分析
sk_buff结构位于include/linux/skbuff.h中,其含义为“套接字缓冲区”,用在linux网络子系统中的各层之间的数据传递,是linux网络子系统数据传递的"神经枢纽"当发送数据包的时候,Linux内核的网络处理模块必须建立一个包含要传送的数据包的sk_buff,然后将sk_buff递交给下层,各层在sk_buff中添加不同的协议头直至交给网络设备发送,同理当网络设备接收到转载 2011-12-04 11:54:52 · 1104 阅读 · 0 评论 -
Linux2.6.39下dm9k驱动源码分析(一)
本文基于linux2.6.39内核CPU:S3C2440一、s3c2440和dm9k的电路连接如下图:从上图可以看出dm9k引用了16条数据线(sd0-sd15)和s3c2440(ldata0-ldata15)相连,引用了一条地址线(CMD)和S3C2440(ADDR2)相连。CPU就是通过CMD这条地址线来判断LDATA0-LDATA15这16条数据线传送的究竟是地址还是数据原创 2011-12-03 16:38:38 · 2290 阅读 · 0 评论 -
Linux2.6.39下dm9k驱动源码分析(二)
2.3、网卡打开操作问题:open函数在什么时候调用?答:网卡打开的时候,命令#ifconfig eth0 up,此时网卡被打开,在网卡open函数中应该完成以下操作:注册中断;设置寄存器,启动设备;启动发送队列,初始化dm9000,复位芯片,检查MII接口。static int dm9000_open(struct net_device *dev){ board_i原创 2011-12-04 17:39:56 · 1589 阅读 · 0 评论 -
2410下寄存器地址虚实映射的实现
2410下寄存器地址虚实映射的实现我们知道在我们的驱动里面一般操作的寄存器的地址都是虚拟地址, 然而一般在cpu的datasheet里描述的寄存器的地址都是物理地址, 那linux内核是如何把我们驱动中指定操作的虚拟地址转换成正真可寻址并操作的物理地址的呢? 这篇文档以s3c2410为例, 将详细的描述这么一个实现流程。 S3c2410使用的是arm920T的核,它支持MMU,转载 2011-12-18 23:25:29 · 1223 阅读 · 0 评论 -
ARM 学习笔记 (三) S3C2440 MMU 配置
接上回说; 在中断配置时 有一个函数 MMU_Init() 这个是MMU的初始化函数,用来初始化存储器管理单元的 (Memory Manage Unit )。那这个单元是来干嘛的呢,顾名思义,用来管理存储器的。 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以 内存容量虽然小转载 2011-12-18 23:14:10 · 5735 阅读 · 2 评论 -
linux中的物理地址和虚拟地址
在支持MMU的32位处理器平台上,Linux系统中的物理存储空间和虚拟存储空间的地址范围分别都是从0x00000000到0xFFFFFFFF,共4GB,但物理存储空间与虚拟存储空间布局完全不同。Linux运行在虚拟存储空间,并负责把系统中实际存在的远小于4GB的物理内存根据不同需求映射到整个4GB的虚拟存储空间中。n物理存储空间布局Linux的物理存储空间布局与处理器相关,详细情况可以转载 2011-12-18 23:07:23 · 1845 阅读 · 0 评论 -
基于MTD的NANDFLASH设备驱动底层实现原理分析(四)
进过前面3篇文章对NANDFLASH的一些硬件特性以及MTD的上层操作已经有了一个大体概念,这些东西的重要性就像你要吃饭那么你首先得学会拿筷子道理一样吧,应该一样的。五、MTD原始设备层和硬件驱动层的桥梁: 熟悉这几个重要的结构体:linux/mtd/mtd.hstruct mtd_info { u_char type; /**内存技原创 2011-11-12 15:06:44 · 3781 阅读 · 0 评论 -
Linux DM9000网卡驱动程序完全分析
[置顶]Linux DM9000网卡驱动程序完全分析说明1:本文分析基于内核源码版本为linux-2.6.31 说明2:本文在理解了linux中总线、设备和驱动模型的基础上加以分析代码 虽然Linux驱动程序应该是和具体的硬件平台分离的,但是为了更好的理解DM9000的驱动程序,这里还是结合一下Mini2440开发板,这样也可以更好的体会如何实现驱动和平台分离。本文分成以下转载 2011-12-03 14:04:28 · 1121 阅读 · 0 评论 -
Linux设备模型<一>认识Sysfs
话说自从那晚听宿舍那哥们听这首(冬天的秘密)我便喜欢上了。。。今晚很火大被那个小伙子给喷了,好心帮他却被找喷。。。这究竟是个什么社会"sysfs is a ram-based filesystem initially based on ramfs. It provides a meansto export kernel data structures, their attributes原创 2011-11-10 00:00:48 · 1746 阅读 · 0 评论 -
Linux内核制作与嵌入式根文件系统的构建
一、Linux内核的制作1.1)先抱怨两句再说一大早起来打开电脑发现电脑启动不起来,拆开电脑搞了好久发现原来是显卡出问题了。。。本来最近就穷显卡坏了。无语之中拿这个破机器去看医生咯,修好电脑后再打开电脑一看启动起来了,但是。。。。显示器不显示了!!!!!!!什么逻辑 闲话少说、手动起来1.2)准备工作(经移植后的源码准备)1.3)开始内核制作1.3.1)进入Linux内原创 2011-11-09 02:12:59 · 4065 阅读 · 2 评论 -
Linux设备模型<三>总线、设备、驱动程序
冬天的早上,突然开始暖和起来了。。心中散发出:那是春天的气息哈,上午的课选择果断的跑路掉。看来我还是个调皮的孩子。明天好像还是光棍节呢。。这哥们问我怎么过?你告诉我怎么过啊。。1)在Linux设备模型中用bus_type来描述总线,那么什么是总线呢?总线是处理器与一个或者多个设备之间的通道。在设备模型中所有的设备都通过总线相连的。 >struct bus_type {原创 2011-11-10 08:38:11 · 1185 阅读 · 0 评论 -
基于MTD的NANDFLASH设备驱动底层实现原理分析(三)
非常的说:我突然发现在写这些关于NAND驱动的文章的时候,原来我一直是在改写别人的博客。。。。。其实这并不要紧的,我也觉得这不仅仅是一种比较好的学习方法了,为什么呢,因为当我在看他的博客的时候,我明白了一点,然后当我自己要写的时候。。对这个东东又进一步了解一点了。。呵呵Copy也分档次了五、硬件时序到软件代码的演变过程对nand_base.c部分代码的分析该文件位于还是把那个读NAND原创 2011-11-12 13:56:20 · 4596 阅读 · 3 评论 -
Linux设备模型<四>实例一winter_kobject
一想到明天有那么多个1,就有点。。看来今晚得努力啊。面对前面那么多的结构体别说看了,我写的时候都够呛的。这么多的理论咚咚总得找点东西把他们消化消化一下吧前面我第一个讲的就是kobject,还记得它用来干嘛的不?它用来在sys下创建目录的。就这个。。。。我想了很久这么winter_kobject.c该怎么写?具体说该怎么修改人家的代码吧 嘿嘿。我觉得这不叫抄袭,大家都学过C语言,这应该叫做函原创 2011-11-10 16:33:54 · 1554 阅读 · 1 评论 -
Linux设备模型<五>实例二winter_bus
一大清早那是历经各种艰难。。这电脑。。什么连不上网啊。虚拟机连不上网。。各种无语。开发板都能ping通ubuntu主机了,但是主机就是打不开网页,真的鸭梨好大。挂载个网络文件系统,下载内核镜像 几KB的东西出现各种的TTTTTTTTTTTTTTTTTTTTTTTTTT。看来睡了一个晚上这电脑有点不乖了。不听话了经过昨晚好几个小时的纠结终于把这个总线、设备、驱动搞清还是按照总线、设备、驱原创 2011-11-11 11:12:18 · 1470 阅读 · 0 评论 -
基于MTD的NANDFLASH设备驱动底层实现原理分析(一)
经过UBOOT初步的移植,Linux内核初步的移植,Linux内核总线设备模型的分析,等一系列痛苦的折腾,目的就是想更好的来分析下NANDFLASH的驱动。。大概一共历经了半个月的时间,慢慢的对NANDFLASH驱动程序有感觉了。。。一、MTD体系结构:Linux内核提供MTD子系统来建立FLASH针对Linux的统一、抽象接口。MTD将文件系统与底层的FLASH存储器进行隔离。原创 2011-11-12 00:08:55 · 10462 阅读 · 3 评论 -
基于MTD的NANDFLASH设备驱动底层实现原理分析(二)
四、常见的NANDFLASH的操作 1、要实现对 Nand Flash 的操作,比如读取一页的数据,写入一页的数据等,都要发送对应的命令,而且要符合硬件的规定,如图: 比如说要实现读一页的数据,就要发送Read命令,而且分两个周期发送,即分两次发送对应的命令,第一次是 0x00h,第二次是 0x30h,而两次命令中间,需要发送对应的你所要读取的页的地址,对应地,其他原创 2011-11-12 11:14:05 · 4035 阅读 · 2 评论 -
Linux设备模型<二>底层模型
A)KobjectKobject实现了基本的面向对象的管理机制,是构造Linux2.6设备驱动模型的核心结构,与Sysfs文件系统有着紧密的联系,在内核中所注册的每一个Kobject对象在Sysfs文件系统中都有一个目录与之对应Kobject的结构定义为:struct kobject { const char *name; /*指原创 2011-11-10 00:08:42 · 1423 阅读 · 0 评论 -
Linux内核中ioremap映射的透彻理解
[经典]Linux内核中ioremap映射的透彻理解 几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种: (1)I/O映射方式(I/O-mapped) 典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O转载 2011-12-18 23:08:52 · 915 阅读 · 0 评论