![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
驱动笔记
开心an
这个作者很懒,什么都没留下…
展开
-
块设备驱动学习笔记(一)
一、块设备与字符设备的I/O操作比较n 块设备只能以块为单位接受输入和返回输出。字符设备则以字节为单位。(linux中的块可以是字节)n 块设备对于I/O请求有缓冲区。可以对读写的顺序进行调整。字符设备只能顺序读写。二、相关概念与重要结原创 2011-09-01 16:48:24 · 2434 阅读 · 0 评论 -
linux网络设备应用与驱动编程学习笔记(2)——网络驱动基础
一、网络模型OSI网络参考模型应用层,表示层,会话层,传输层,网络层,数据链路层,物理层 tcp/ip网络模型应用层(数据段),传输层(数据包),网络互连层(数据帧),主机到网络层(比特)以太网工作在主机到网络层。IP层对应网络互连层,它是一个无连接,原创 2011-09-20 16:53:57 · 3590 阅读 · 0 评论 -
linux内存学习笔记(一)
一、内存管理单元MMU该单元辅助操作系统进行内存管理,提供虚拟地址和物理地址的映射、内存访问权限保护和Cache缓存控制等硬件支持。(1) TLB:它缓存少量的虚拟地址与物理地址的转换关系。“快表”(2) TTW:包含所有虚拟地址与物理地址的转原创 2011-08-26 10:32:50 · 571 阅读 · 0 评论 -
linux内存学习笔记(二)——设备地址到用户空间
系统调用mmapcaddr_t mmap(caddr_t addr,size_t len,int prot,int flags,int fd,off_t offset);prot,指定访问权限,PROT_READ(可读),PROT_WRITE(可写)原创 2011-08-26 10:34:34 · 1227 阅读 · 0 评论 -
linux内存学习(四)——概念分析
内容来源:网络l Linux最常见的可执行文件格式为elf(Executable and Linkable Format)。在elf格式的可执行代码中,ld总是从0x8000000开始安排程序的“代码段”,对每个程序都是这样。至于程序执行时在物理内存中的实际地原创 2011-08-26 10:37:40 · 713 阅读 · 0 评论 -
Linux时间学习笔记
(来自《系统时钟硬件与LINUX时间表示[1-4]》)l PC机中的时间是有三种时钟硬件提供的,而这些时钟硬件又都基于固定频率的晶体振荡器来提供时钟方波信号输入。这三种时钟硬件是:(1)实时时钟(Real Time Clock,RTC);(2)可编程原创 2011-08-24 15:09:57 · 599 阅读 · 0 评论 -
linux内存学习笔记(三)——静态映射与DMA
一、静态映射概述在将linux移植到目标电路板时,通常会建立外设I/O内存到虚拟地址的静态映射。能过在map_desc结构体添加新成员即可完成静态映射任务。 struct map_desc{ unsigned long vir原创 2011-08-26 10:36:09 · 1314 阅读 · 0 评论 -
丰富linux驱动内容笔记(二)
一、驱动设计的分层和分隔分层设计可以提高代码的可重用性。它利用已有的代码,做一些重载或修改,就可以完成驱动程序设计。除了分层的设计思想外,还有分隔。一般用在总线外设控制器上,这样驱动就分为了两部分,一部分写控制器驱动,一部分写外设驱动,互不干涉。二、一些简述输入设原创 2011-08-29 16:31:30 · 1117 阅读 · 2 评论 -
linux网络设备应用与驱动编程学习3——lpc3250以太网控制器
一、以太网模块内部结构 特性:10M或100MbpsPHY器件,完全遵循802.3;独立的发送和接收缓冲区存储器,映射到共用的IRAM或EMC存储器;与外部PHY芯片通过MII或RMII接口连接。二、操作相关n 描述符数组DMA管理器利用存原创 2011-09-26 17:25:06 · 2240 阅读 · 0 评论 -
丰富linux驱动内容笔记——platform设备驱动
linux设备驱动关心总线、设备和驱动3个实体。总线会将设备和驱动绑定。一个现实的Linux设备和驱动通常都需要挂载在一种总线上。但是一些Soc中,它将外设控制器直接挂载到Soc内存空间,即CPU可以通过访问寄存器来控制它们。这些设备没有相应的实际总线。为解决这个问题,linux原创 2011-08-29 16:29:23 · 873 阅读 · 0 评论 -
linux网络设备应用与驱动编程学习4——模板与实例(B)——打开和释放方法
l open方法static int lpc32xx_net_open(struct net_device *ndev){ struct netdata_local *pldat = netdev_priv(ndev);原创 2011-09-27 10:31:16 · 1605 阅读 · 0 评论 -
linux网络设备应用与驱动编程学习4——模板与实例(A)
源码来自lpc32xx_mii.c1. 模块初始化卸载static int __init lpc32xx_net_init(void){return platform_driver_register(&lpc32xx_net_driver);}原创 2011-09-27 10:24:47 · 4632 阅读 · 0 评论 -
linux网络设备应用与驱动编程学习4——模板与实例(C)——其它方法
为了便于分析,贴出对应的方法ndev->open = lpc32xx_net_open; ndev->stop = lpc32xx_net_close; ndev->hard_start_xmit = lpc32xx_net_hard_star原创 2011-09-27 16:46:09 · 1587 阅读 · 0 评论 -
smart3250中的静态I/O映射情况
根据网络大虾们的指导,基本上搞清楚了smart3250中的静态I/O映射情况。写个blog供以后参考。****************************网络摘录**************************************内核提供了在系统启动时通过map_desc结构体静态创建I/O资源到内核地址空间的线性映射表(即page table)的方式,这种映射表是一种一一映射原创 2011-12-22 11:16:56 · 1192 阅读 · 0 评论 -
spi从机驱动(lpc3250)
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include原创 2012-01-09 16:35:43 · 2599 阅读 · 2 评论 -
Linux设备模型学习笔记——结构体描述
l kobject是用来管理设备的。包括设备组成的层次结构,引用计数,属性管理。作为一个底层设备模型数据结构,它有自己的操作函数。比如初始化,引用计数,删除,注册等。不光是kobject,它的上层结构,kset,subsystem,bus_type,device,原创 2011-08-09 13:44:07 · 1134 阅读 · 0 评论 -
信号量学习笔记
对于linux的程序员来说,信号量是一个不能回避的问题。下面我简要地介绍下信号量在不同状态下的使用。一,内核态l 就是写驱动程序时遇到的信号量。1. 定义信号量struct semaphore sem;2. 初始化信号量原创 2011-08-12 16:42:17 · 1458 阅读 · 0 评论 -
块设备驱动学习笔记(二)——实例模板
vmem_disk驱动此驱动大体分成三个部分:加载、卸载模块,block_device_operations结构体中各方法的实现,I/O请求处理函数前两部分相对容易理解,现帖出最后一部分。 static void vmem_disk_transfer(struct原创 2011-09-01 16:51:14 · 1578 阅读 · 0 评论 -
初始mtd学习笔记
一、基本架构闪存是无需供电保持信息的可擦写的存储器。闪存与经过裁剪的、合适的设备驱动程序和文件系统一起使用。在linux系统中,这种特别设计的驱动程序和文件系统是由MTD子系统提供的。linux-MTD的组成1. MTD核心2. 映射驱动程原创 2011-09-02 13:02:00 · 1081 阅读 · 0 评论 -
终端驱动学习笔记
一、基本概念终端是一种字符型设备,通常使用tty简称各种类型的终端。linux的终端类型:/dev/ttySn,串行口终端/dev/pty,伪终端/dev/tty,当前进程的控制终端,可以是介绍的其它任何一种终端/dev/ttyn,tty1~tty6是虚拟终端原创 2011-09-05 17:07:47 · 2016 阅读 · 0 评论 -
I2C驱动学习笔记
一、I2C基本知识i2c总线是philips公司推出的一种串行总线。是具备多主机系统所需的,包括总线裁决和高低带器件同步功能的高性能串行总线。i2c总线有两根双向信号线,一根是数据线SDA,另一根是时钟线SCL,两线都是开漏输出,要接上拉电阻(典型10K)。3种数据传原创 2011-09-08 09:36:26 · 6004 阅读 · 1 评论 -
linux设备模型学习笔记——理论篇
花了一周时间细细地对看了ldd3的中文和英文版的《The Linux Device Model》一章,现做以下学习笔记:一、概述为什么需要一个设备模型?就是为了统一 获取系统信息的 数据结构系统。而且此数据结构系统要支持多种功能特性。目前设备模型能够支持的特性和任原创 2011-09-16 14:25:03 · 1235 阅读 · 0 评论 -
linux网络设备应用与驱动编程学习笔记(1)——应用编程(套接字)
想搞清楚一个陌生的东西是怎么一回事,真的不容易!有点像武侠小说中,想炼成绝世武功要闭关修炼一样。一、socket套接字简介客户端与服务器都围绕着通信端点的概念,即套接字。使用套接字要将客户和服务器分开来。一个套接字通过使用socket()函数惟一确定了一个端点。该端点原创 2011-09-20 16:49:43 · 1177 阅读 · 0 评论 -
内核定时器和延时学习笔记
一、相关结构与函数n timer_listlinux内核用timer_list表征一个定时器。struct timer_list { struct list_head entry; unsigned long exp原创 2011-08-23 13:31:50 · 864 阅读 · 0 评论 -
中断学习笔记
一、相关概念中断按来源分为内部中断和外部中断按中断入口的跳转方法可以分为向量中断和非向量中断。向量中断,不同的中断有不同的中断号,中断到来自动跳转;非向量中断,多个中断共享一个入口地址。进入中断后由软件判断是哪个中断。 linux中断处理机制:linux将中断分解原创 2011-08-19 15:14:50 · 734 阅读 · 0 评论 -
异步I/O学习笔记2
在《异步I/O学习笔记》中讲到的异步通知,实际上只能算是一种能够实现异步I/O的机制。在《linux设备开发详解》中,对异步通知和异步I/O 的概念区分并不清楚。我的理解是AIO表面直译就是异步I/O,实际上它又是实现异步I/O的另外一种机制。这两种机制都有这样一共通点:都可以在原创 2011-08-18 14:06:41 · 890 阅读 · 0 评论 -
异步IO笔记
异步通知:一旦设备就绪,就主动通知应用程序。比较准确的称谓是“信号驱动的异步I/O”阻塞、非阻塞,异步通知本身没有优劣,根据不同的应用场景合理选择。关于信号的接收处理在《进程通信笔记》中已经学习过。因为sigaction函数是一个比signal函数更新,更健壮的信号接原创 2011-08-17 15:14:02 · 571 阅读 · 0 评论 -
非阻塞I/O笔记
使用非阻塞I/O的应用程序通常会使用select()和poll()系统调用查询是否可以对设备进行无阻塞的访问。 l 应用程序中的轮询编程int select(int numfds,fd_set *readfds,fd_set *writefds,fd_原创 2011-08-17 10:40:54 · 607 阅读 · 0 评论 -
等待队列学习笔记
阻塞操作是指在执行设备操作时若不能获得资源则挂起进程,直到满足可操作的条件后再进行操作。驱动程序通过等待队列实现这样的能力。定义“等待队列头”wait_queue_head_t my_queue;初始化“等待队列头”init_waitqueue_head(&my_原创 2011-08-16 17:09:58 · 1118 阅读 · 0 评论 -
驱动并发控制笔记
控制临界区的访问的方法有:中断屏蔽,原子操作,自旋锁,和信号量等。1.中断屏蔽由于Linux系统的异步I/O,进程调度等很多重要操作都依赖于中断,中断对于内核的运行非常重要。长时间屏蔽中断是很危险的,有可能造成数据丢失甚至系统崩溃。local_irq_disable(原创 2011-08-16 11:13:07 · 656 阅读 · 0 评论 -
进程通信笔记
一、信号信号一般由某些错误条件生成,如内存段、浮点处理器错误或非法指令等。它们由shell或终端处理器生成来引起中断。它们还可以作为在进程间传递消息或修改行为的一种方式,明确地由一个进程发送给另外一个进程。信号可以被生成,捕获,响应,或忽略。 系统对信号的处理方法按情原创 2011-08-15 17:21:56 · 545 阅读 · 0 评论 -
lpc3250spi控制器驱动部分分析
本人是初学者,只为备忘。SPI驱动分SPI控制器驱动和SPI设备驱动SPI控制器驱动:以下是代码在arch-lpc32xx.c中。LPC3250有两个SSP控制器(可配置成两个SPI控制器)。它将两个控制器注册成平台设备,但两个控制器使用一个驱动.只有id不一样。#if defined(CONFIG_SPI_LPC32XX)#ifdefined(CONFIG_MACH_LPC32X原创 2012-01-09 16:17:50 · 1647 阅读 · 0 评论