
嵌入式 内核驱动
文章平均质量分 74
zhangxiaopeng0829
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
gpio驱动分析2
(本文所介绍内核基于linux-2.6.36内核) 了解完gpio设置之后,下面再对gpio的事件处理流程进行介绍。Event事件处理定义在drivers/input/evdev.c函数的注册与注销:drivers/input/evdev.c(line904-line925) static struct input_handler evdev_handler = {原创 2012-04-08 17:00:53 · 1148 阅读 · 0 评论 -
Linux设备驱动的分层设计思想
1.1 设备驱动核心层和例化在面向对象的程序设计中,可以为某一类相似的事物定义一个基类,而具体的事物可以继承这个基类中的函数。如果对于继承的这个事物而言,其某函数的实现与基类一致,那它就可以直接继承基类的函数;相反,它可以重载之。这种面向对象的设计思想极大地提高了代码的可重用能力,是对现实世界事物间关系的一种良好呈现。Linux内核完全由C语言和汇编语言写成,但是却频繁用到了面向对象的设计转载 2012-04-27 20:15:48 · 505 阅读 · 0 评论 -
Linux主机驱动与外设驱动分离思想
1主机、外设驱动分离的意义在Linux设备驱动框架的设计中,除了有分层设计实现以外,还有分隔的思想。举一个简单的例子,假设我们要通过SPI总线访问某外设,在这个访问过程中,要通过操作CPU XXX上的SPI控制器的寄存器来达到访问SPI外设YYY的目的,最简单的方法是:return_type xxx_write_spi_yyy(...){xxx_write_spi_host_ctr转载 2012-04-27 20:17:01 · 648 阅读 · 0 评论 -
USB学习总结1—s3c6410的USB驱动修改
整理USB的内容的内容已经几天了,写点东西作为总结。全部内容分三部分,第一部分主要内容是USB驱动在Linux系统中的具体实现方法;第二部分参考《Linux设备驱动程序(第三版)》中的内容总结USB驱动的结构;最后,总结一下USB协议。 一、 首先是对USB设备的得支持。1、viarch/arm/mach-s3c64xx/mach-mini6410.c在原创 2012-04-16 20:01:32 · 3130 阅读 · 1 评论 -
USB学习总结2—USB host设备驱动实现(U盘、鼠标)
一、U盘1 打开热插拔Genernal setting –> [*]configure standard kernel feature(for small)-> [*]support for hot-pluggable device2 U盘属于scsi设备,因此还需要加入scsi驱动device driver->[*] scsi devicesupport->[原创 2012-04-16 20:09:34 · 4558 阅读 · 0 评论 -
USB学习总结3—USB gadget设备驱动实现(usb串口功能)
USB串口(CDC ACM)1 内核配置Device driver ->[*] usb support ->USB gadget support(gadgetAPI)原创 2012-04-16 20:22:47 · 2379 阅读 · 0 评论 -
leds子系统-上
(本文内容涉及的代码全部取自linux-2.6.36内核中) Leds子系统介绍leds子系统之前,先从几个相关的重要结构开始介绍:led_classdev是比较重要的一个struct,它实现的是led实例,源程序中的注释比较全面,所有没有再另外添加,免得画蛇添足。 include/linux/leds.h(line30-line68) struct led_cla原创 2012-04-09 18:08:10 · 2775 阅读 · 0 评论 -
framebuffer显示功能在 3.1.6内核中的实现
<!--@page {margin:0.79in}p {margin-bottom:0.08in}-->分析framebuffer设备的时候没有按照以往的顺序先从Documentation开始看起。这次直接从板文件开始分析虽然使用的是tiny6410,但是由于配套资料不完整,所以程序分析还是那内核代码中的mach-mini6410和mach-smdk6410比较原创 2012-04-17 18:23:15 · 1041 阅读 · 2 评论 -
linux内核结构图
为了能更好的学习驱动开发,最近开始学习linux内核结构的内容,找了很久看到一个感觉很有意思的结构框图,收下!原创 2012-04-30 21:07:40 · 2030 阅读 · 0 评论 -
input子系统
本文简单介绍一下linux的inputsystem,并通过一个实际的案例介绍一下在具体的项目中如何实现自己的inputsystem。 1. 系统结构那首先就从linux的inputsystem的结构开始说起,如下图所示:Input system 有三大块组成:· Drivers:相当于输入设备的驱动程序,负责接收来自硬件的输入中断,并把输入中断转换成相应的输出给I原创 2012-04-18 18:17:44 · 605 阅读 · 0 评论 -
Linux设备驱动程序笔记1—USB设备基础
在总结完USB设备操作的具体实现时候,再对《Linux设备驱动程序》的第十三章—USB驱动程序,的内容进行简单总结。这个章节详细描述了Linux的USB设备驱动程序以及USB核心之间的接口信息。USB设备包括了设备、配置、接口、端点四部分,文章也是按照这个顺序进行讲述的,下面直接进入主题。13.1.1端点Usb最近本的通讯形式就是端点,USB 端点只能在一个方向承载数据, 或者从主机到原创 2012-04-19 20:52:08 · 805 阅读 · 0 评论 -
Linux设备驱动程序笔记3—编写一个实际的USB驱动
13.4.1. 驱动支持哪些设备?struct usb_device_id 结构提供了这个驱动支持的一个不同类型 USB 设备的列表,定义如下: struct usb_device_id { /*which fields to match against? */ __u16 match_flags; /*Use原创 2012-04-19 20:56:32 · 912 阅读 · 0 评论 -
Linux设备驱动程序笔记2—Urbs
13.3. USB Urbslinux 内核中的 USB 代码和所有的 USB 设备通讯使用称为 urb 的东西( USB request block).这个请求块用 struct urb 结构描述并且可在 include/linux/usb.h 中找到.一个 urb 用来发送或接受数据到或者从一个特定 USB 设备上的特定的 USB 端点, 以一种异步的方式. 根据驱动的需要,一个 US原创 2012-04-19 20:53:02 · 1062 阅读 · 0 评论 -
amba_device使用分析
什么是AMBA? ---AMBA是一个片内总线规范。ARM官网的介绍:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0224b/index.htmlAMBA 协议是用于连接和管理片上系统 (SoC) 中功能块的开放标准和芯片上互连规范。使用它,可以帮助开发带有大量控制器和外设的多处理器设计。AMBA 通转载 2012-04-21 15:02:35 · 3061 阅读 · 0 评论 -
Linux内核Socket CAN中文文档
自己在年假中空闲之余翻译的内核中Socket CAN的文档,原文地址在:http://lxr.linux.no/linux+v2.6.34/Documentation/networking/can.txt但是这篇文档没有涉及广播管理协议套接字 (SOCK_DGRAM) 的内容。另外一篇比较好的Socket CAN的英文文档是(详细介绍了广播管理协议套接字):Low转载 2012-06-08 20:36:36 · 27863 阅读 · 7 评论 -
platform设备驱动全透析
1.1 platform总线、设备与驱动在Linux 2.6的设备驱动模型中,关心总线、设备和驱动这3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。一个现实的Linux设备和驱动通常都需要挂接在一种总线上,对于本身依附于PCI、USB、I2C、SPI等的设备而言,这自然不是问题,但转载 2012-04-27 20:14:32 · 528 阅读 · 0 评论 -
(LDD) 第五章、并发和竞态
1. 对并发的管理是操作系统编程的核心的问题之一。2. 早期并发的惟一原因是对硬件的中断服务,没有抢占和SMP。Scull的缺陷1. 竞态会导致对共享数据的非控制访问。2. 竞态是一种极端可能性的事件,因此程序员往往忽视竞态。但在计算机的世界里,百万分之一的事件可能在几秒内发生,而且结果是灾难性的。并发及其管理1. SMP系统甚至可以在不同的处理器上同时执行我们的代码、转载 2012-04-26 20:03:22 · 930 阅读 · 0 评论 -
RTC编程应用
本文的部分内容取自内核文档。 Linux有两个用户空间的RTC API,他们是* /dev/rtc... 兼容PC系统的RTC,对非x86结构支持不完整。 * /dev/rtc0,/dev/rtc1 ... 系统框架的一部分,支持多种RTC 老的兼容PC/AT驱动:/dev/rtc所有的pc系统都内建实时时钟。这个时钟在系统关机之后可以保存时间和日期。特别之原创 2012-04-26 13:50:19 · 5740 阅读 · 0 评论 -
gpio驱动分析 1
(本文所有内容全部在linux-2.6.36内核基础上进行)学习SoC留下的习惯,从基本IO入手。如果自己动手写字符驱动就违背了linux的platform device and driver 的精神,如果自己写我又没那水平,就从内核自带的gpio_keys驱动入手,了解输入子系统的应用。 Gpio输入子系统的初始化和注销是从platform_driver_register(&原创 2012-04-08 16:58:44 · 3547 阅读 · 0 评论 -
gpio application
首先定义响应按键的IO接口与功能描述:static struct gpio_keys_button mini6410_buttons[] = { { .gpio = S3C64XX_GPN(0), .code = KEY_BACK, .desc = "back", }, { .gpio = S原创 2012-04-08 17:02:17 · 794 阅读 · 0 评论 -
leds application
<!--@page {margin:0.79in}p {margin-bottom:0.08in}-->首先定义响应LED的IO接口与功能描述:static struct gpio_led mini6410_leds[]={ [0] = { .name = "LED1", .gpio = S3C64XX_GPK(4), },原创 2012-04-08 18:57:08 · 615 阅读 · 0 评论 -
leds子系统-下
(本文内容涉及的代码全部取自linux-2.6.36内核中)书接上文,洋洋洒洒的代码贴了那么多,不过好像并没有看到led子系统针对驱动开发用户的实际操作,下面就对gpio-led功能继续剖析: 1. Gpio-led初始化drivers/leds/leds-gpio.c(line317-line348) static int __init gpio_led_init(vo原创 2012-04-09 18:08:44 · 1977 阅读 · 0 评论 -
I2C设备声明以及应用实现
(本文内容涉及的代码全部取自linux-2.6.36内核中,本文中的部分内容参考了Documentation/i2c/说明文档) 在自己使用8位单片机的时代,i2c就是一种最简单而且常用的总线,它可以提供一个实现多设备连接的低价低速率的通讯方式。在开始进行i2c应用编成前先重新了解一下i2c的数据格式。 Simplesend transaction=============原创 2012-04-10 18:56:22 · 1215 阅读 · 0 评论 -
I2c设备初始化方法1--通过总线编号初始化i2c设备
(本文的部分内容来源自Documentation/i2c/instantiating-devices)I2c不像PCI或是USB设备,它不能在硬件层被枚举,软件部分必须明确了解哪些i2c设备连接到总线上了,以及哪些地址可用。因此,内核代码必须明确初始化i2c设备。I2c初始化方式有4种:a) 通过总线编号初始化i2c设备;b) 直接初始化设备;c)原创 2012-04-11 18:45:58 · 3670 阅读 · 0 评论 -
I2C设备初始化方法2--初始化确定设备
(本文的部分内容翻译自Documentation/i2c/instantiating-devices)方法2:初始化确定设备这种方式使用于当一个大的设备使用I2C bus作为内部通讯使用。TV adapter是一种典型的情况,其中包括了调谐器、视频编码、音频编码等,一般通过一个类似I2C总线连接到主芯片上。你不知道I2C设备会预先连接的数量,所以方式1不能使用在这种情况下。所以另外的方法是翻译 2012-04-11 18:47:03 · 1544 阅读 · 0 评论 -
spi总线概述1(spi-summary)
什么是SPI?------------“串行外设接口”(SPI)是一个同步的四线串行链接用于微控制器连接传感器,内存和外设的。这是一个简单的“时点”的标准,获取一个标准化结构也不复杂。 SPI使用主/从配置。 三个信号线外加一个时钟(SCK,往往在10 MHz),并行数据线“主机输出,从机输入”(MOSI)或“主机输入,从机输出”(MISO)。数据交换有四种时钟模式:模式0和模式3翻译 2012-04-24 19:37:56 · 4757 阅读 · 0 评论 -
spi总线概述2(spi-summary)
特定板初始化代码如何声明SPI器件?------------------------------------------------------Linux需要多种信息才能正确配置SPI器件。这些信息通常是电路板的特定代码,甚至有些芯片支持自动发现/枚举。 声明控制器 第一类信息是存在的SPI控制器的清单。由于片上系统(SOC)在主板上,这些通常是平台设备,控制器可能需要一些翻译 2012-04-24 19:40:11 · 1453 阅读 · 0 评论 -
spi总线概述3(spi-summary)
我怎样写“SPI主控制器驱动程序”?-------------------------------------------------一个SPI控制器可能会被注册上platform_bus;写驱动程序绑定到设备,两者涉及总线。 这种类型的驱动程序的主要任务是提供“spi_master”。使用spi_alloc_master()分配主机,和spi_master_get_devdata翻译 2012-04-24 19:41:16 · 1478 阅读 · 0 评论 -
I2C设备初始化方法3--侦测一个指定的I2C设备
(本文的部分内容翻译自Documentation/i2c/instantiating-devices)方式3:侦测一个指定的I2C设备有时候,你对一个I2C设备没有足够的相关信息,甚至不能调用i2c_new_probed_device()。典型的例子是电脑主板上的硬件监控芯片。有几十个型号,可以存放在25个不同的地址。鉴于有大量的主板,它几乎是不可能建立一个详尽的监测芯片硬件列表。原创 2012-04-11 18:47:54 · 2295 阅读 · 0 评论 -
I2C设备初始化方式4--从用户空间初始化I2C设备
(本文的部分内容翻译自Documentation/i2c/instantiating-devices)方式4:从用户空间初始化I2C设备在一般情况下,内核应该知道哪些I2C设备被连接以及他们的地址是什么。然而,在某些情况下,它没有,所以sysfs接口用作让用户提供信息。这接口是由2属性组成,在每一个I2C总线上创建的文件目录:new_device和delete_device。这翻译 2012-04-11 18:48:37 · 2286 阅读 · 0 评论 -
spi设备的注册与用户空间的程序设计
spi设备创建在tiny6410开发板上外接了spi1的引脚SPICLK、MOSI、SPICS、MISO,所以以spi1为例创建spi设备。首先介绍2个相关到的结构1.用于片选的信息 struct s3c64xx_spi_csinfo { u8fb_delay;原创 2012-04-25 16:23:18 · 4057 阅读 · 0 评论 -
linux下bus,device,driver三者关系
bus: 总线作为主机和外设的连接通道,有些总线是比较规范的,形成了很多协议。如PCI,USB,1394,IIC等。任何设备都可以选择合适的总线连接到主机。当然主机也可能就是CPU本身。内存也是通过BUS连接到主机的,可内存使用的总线不是外设总线,因此和内存使用相同类型的总线的设备,谈及BUS比较含糊。 一块网卡在嵌入式开发中,直接通过内存总线接入到CPU。我们在写网卡驱动时,要给该B转载 2012-04-25 19:47:19 · 822 阅读 · 0 评论 -
linux spi子系统
虽然这段看着有点混乱,可是自己实在没有力气整理了,还是转了吧。。。spi_master/spi_device和spi_driver的关系。 重要的数据结构:~~~~~~~~~~spi控制器的主题是spi_master,虽然一般不需要自己编写spi控制器驱动,了解这个结构体还是必要的。[c-sharp] view plaincopyprint?转载 2012-04-25 19:50:43 · 941 阅读 · 0 评论 -
ECUcore-5484 update manual
MCP5484在国内接触到的应用少之又少,他的bootloader就更是稀有动物了,Linux内核更新到3.X之后,导致的大部分老的产品在使用新的driver development kits时会出现很多变量未定义的问题。解决办法只能更新内核,紧接着问题就出来了。Linux应用对国内用户问题不大,但是在MCP5484上更新内核相关的资料就真的是不好找到了, 下面总结了一下我们在MCP5484上更新原创 2012-07-20 12:19:43 · 855 阅读 · 0 评论