嵌入式linux
文章平均质量分 87
beyondioi
我,我,我,……我是大舌头。
展开
-
I/O端口 与 I/O内存
MIPS、ARM和PowerPC等平台的I/O和主存采用的是统一编址的方式,它们将I/O空间映射到内存,采用与内存相同的汇编指令(load和store)来读写设备,这种方式称为I/O内存;x86平台的I/O和主存采用的是独立编址的方式,CPU有专门的线路来访问I/O,而且有专门的转载 2011-10-16 22:03:33 · 565 阅读 · 0 评论 -
platform设备驱动全透析
原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和本声明。否则将追究法律责任。http://21cnbao.blog.51cto.com/109393/3376091.1 platform总线、设备与驱动在Linux 2.6的设转载 2011-10-18 21:39:45 · 496 阅读 · 0 评论 -
ioremap
几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种: (1)I/O映射方式(I/O-mapped) 典型地,如X86处转载 2011-10-18 22:57:04 · 1273 阅读 · 0 评论 -
linux 工作队列
INIT_DELAYED_WORK()是一个宏,我们给它传递了两个参数.&hub->leds和led_work.对设备驱动熟悉的人不会觉得INIT_DELAYED_WORK()很陌生,其实鸦片战争那会儿就有这个宏了,只不过从2.6.20的内核开始这个宏做了改变,原来这个宏是三个参数,后来改成了两个参数,所以经常在网上看见一些同志抱怨说最近某个模块编译失败了,说什么make的时候遇见这么一个错误:转载 2011-10-22 13:24:55 · 2123 阅读 · 0 评论 -
container_of 用法解析
在学习Linux驱动的过程中,遇到一个宏叫做container_of。该宏定义在include/linux/kernel.h中,首先来贴出它的代码:/** * container_of - cast a member of a structure out to the containing structure * @ptr: the pointer to the转载 2011-10-22 13:26:54 · 7461 阅读 · 0 评论 -
诙谐幽默的 bus/driver/device关系
这里让我们聚焦Linux的设备模型! 顾名思义,设备模型是关于设备的模型,对咱们写驱动的和不写驱动的人来说,设备的概念就是总线和与其相连的各种设备了。电脑城的IT工作者都会知道设备是通过总线连到计算机上的,而且还需要对应的驱动才能用,可是总线是如何发现设备的?设备又是如何和驱动对应起来的?它们经过怎样的艰辛才找到命里注定的那个它?它们的关系如何?白头偕老型的还是朝三暮四型的?这些问题就不是他们关心转载 2011-10-22 13:32:20 · 773 阅读 · 0 评论 -
linux中的 IO端口映射和IO内存映射
下面是今天看到两篇关于linux中的 IO端口映射和IO内存映射的文章,时间关系,没来得及深入理解,有空好好看看 CPU地址空间CPU地址空间(一)地址的概念1)物理地址:CPU地址总线传来的地址,由硬件电路控制其具体含义。物理地址中很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上 (如显存、BIOS等)。在程序指令中的虚拟地址经过段映射和页面映射后,就转载 2011-10-22 13:29:51 · 2331 阅读 · 3 评论 -
我理解的逻辑地址、线性地址、物理地址和虚拟地址(补充完整了)
本贴涉及的硬件平台是X86,如果是其它平台,嘻嘻,不保证能一一对号入座,但是举一反三,我想是完全可行的。一、概念物理地址(physical address)用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字转载 2011-10-24 10:29:57 · 873 阅读 · 1 评论 -
linux下S3C2410的DMA驱动程序开发
网上介绍LINUX下的一般驱动程序开发示例浩如烟海,或是因为简单,关于DMA驱动的介绍却寥寥无几;近期zhaoyang因工作需要,花了几日时间开发了某设备在S3C2410处理器Linux下DMA通信的驱动程序,有感于刚接手时无资料借鉴的茫然,故写点介绍,期待能给有DMA开发任务的网友们一点帮助。本文将包括如下内容:DMA驱动主要函数功能 驱动中关键技术分析 具体的DMA实例分析转载 2011-11-15 11:08:24 · 1043 阅读 · 0 评论 -
s3c2440的dma操作的一般步骤
一般的,在s3c2440中,要想进行dma传输,需要一下七个步骤:一:int s3c2410_dma_request(unsignedint channel, struct s3c2410_dma_client *client, void*dev);s3c2410_dma_client的定义为:struct s3c2转载 2011-11-14 19:31:28 · 1711 阅读 · 0 评论 -
I2C总线的EEPROM(24C08)Linux驱动
基于Linux 2.6.30内核符合Linux驱动架构模型针对24C08的Page读写做了优化。完全模拟文件读写方式,支持lseek操作。这个代码中,包含了设备的地址,在i2c_add_driver时会去探测该地址上是否有设备。但通常,做板级开发时,i2c_device被放在board文件的i2c_registry中,i2c_device和i2c_driver根据n转载 2011-10-28 09:09:31 · 2554 阅读 · 0 评论 -
I2C驱动的4个数据结构间的关系
一、i2c_driver, i2c_client, i2c_adapter, i2c_algorithm 这4个数据结构的作用及关系1.i2c_adapter 与 i2c_algorithmi2c_adapter 对应物理上一个适配器,而i2c_algorithm对应一套通信算法。I2C适配器需要i2c_algorithm中提供的通信函数,来控制适配器上产生特定的访问周期,缺少i2c_转载 2011-10-28 15:42:01 · 3789 阅读 · 1 评论 -
s3c2410_i2c总线驱动及at24c02设备驱动实例
/* linux/drivers/i2c/busses/i2c-s3c2410.c * * Copyright (C) 2004,2005 Simtec Electronics * Ben Dooks * * S3C2410 I2C Controller * * This program is free software; you can redistribute i转载 2011-10-28 15:58:16 · 2187 阅读 · 0 评论 -
Linux设备驱动简析—基于I2C的E2PROM驱动
/**By Neil Chiao (neilchiao at gmail.com)*转载请注明出处:neilengineer.cublog.cn*/1、I2C总线原理I2C是一种常用的串行总线,由串行数据线SDA 和串线时钟线SCL组成。 系统的I2C模块分为I2C总线控制器和I2C设备。I2C总线控制器是CPU提供的控制I2C总线接口,转载 2011-10-28 14:04:46 · 2794 阅读 · 0 评论 -
简单的IIC驱动实例(脱离IIC驱动架构)
#include #include #include #include #include #include #include #include /* printk() */#include /* kmalloc() */#include /* everything... */#include /* error cod转载 2011-10-28 16:19:00 · 1605 阅读 · 0 评论 -
gpio_request()函数
其原型为 int gpio_request(unsigned gpio, const char *label)先说说其参数,gpio则为你要申请的哪一个管脚,label则是为其取一个名字。其具体实现如下:int gpio_request(unsigned gpio, const char *label) { struct gpio_desc *desc;//转载 2011-11-17 21:12:21 · 39692 阅读 · 1 评论 -
test_and_set_bit()等小函数集合
Man page of test_and_set_bit(int nr, volatile void *addr)这样描述它的功能:"Set a bit and return its old value" nr -- Bit to set addr -- Address to count from注意:nr是需要设置的“哪一位”,而不是将addr的值设置成nr。例如"tes转载 2011-11-17 21:18:33 · 9966 阅读 · 0 评论 -
linux设备模型之platform总线
从Linux 2.6起引入了一套新的驱动管理和注册机制:Platform_device和Platform_driver。 Linux中大部分的设备驱动,都可以使用这套机制, 设备用Platform_device表示,驱动用Platform_driver进行注册。 Linux platform driver机制和传统的device driver 机制(通过driver_reg转载 2011-11-17 22:08:45 · 1019 阅读 · 0 评论 -
IS_ERR()的使用与说明
感谢fudan_abc的分享,本篇文章选自他的《Linux那些事儿之我是Hub(3)一样的精灵不一样的API》转贴地址:http://blog.csdn.net/fudan_abc/archive/2007/08/09/1734839.aspx 人的无聊,有时候很难用语言表达.以下关于IS_ERR的文字仅献给无聊的你.如果你对内存管理没有任何兴趣,就不用往下看了,跳到下一节吧.要想明白转载 2011-10-30 19:58:53 · 1500 阅读 · 0 评论 -
自旋锁(spinlock) 解释得经典,透彻
自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。 由于自旋锁使用者一般保持锁时间非常短,因此选择自旋而不是睡眠是非常必要的,自旋锁的效率远高于互斥锁。 信号量和读写信号量适合于保持时间较长的情况,它们会导致调用者睡眠,因此只能在进程上下文使用(_trylock的转载 2011-10-30 20:54:52 · 18267 阅读 · 1 评论 -
华清远见与您共享:Linux驱动中的platform
作者:李智敏,华清远见嵌入式学院上海中心讲师。从Linux2.6内核起,引入一套新的驱动管理和注册机制:platform_device 和 platform_driver 。Linux 中大部分的设备驱动,都可以使用这套机制,设备用 platform_device 表示;驱动用 platform_driver 进行注册。Linux platform driver 机制和传统的dev转载 2011-10-29 14:19:38 · 2486 阅读 · 0 评论 -
dma_alloc_writecombine
先理解cache的作用CPU在访问内存时,首先判断所要访问的内容是否在Cache中,如果在,就称为“命中(hit)”,此时CPU直接从Cache中调用该内容;否则,就 称为“ 不命中”,CPU只好去内存中调用所需的子程序或指令了。CPU不但可以直接从Cache中读出内容,也可以直接往其中写入内容。由于Cache的存取速 率相当快,使得CPU的利用率大大提高,进而使整个系统的性能得以提升。转载 2011-11-19 19:18:03 · 6476 阅读 · 0 评论 -
音频信号
采样精度 -------------------------------------------------------------------------------- 采样精度决定了记录声音的动态范围,它以位(Bit)为单位,比如8位、16位。8位可以把声波分成256级,16位可以把同样的波分成65,536级的信号。可以想象,位数越高,声音的保真度越高。 采样精度 样本大小是用每个声音样本的位转载 2011-11-19 19:23:02 · 1905 阅读 · 0 评论 -
ALSA驱动、设备函数调用关系
soc_probe==> snd_soc_register_card或者snd_soc_register_dai或者snd_soc_register_platform或者snd_soc_register_codec==> snd_soc_instantiate_cards==> snd_soc_instantiate_card==> codec_dev->probe==> ud转载 2011-11-19 14:41:36 · 683 阅读 · 0 评论 -
基于uda34x的ALSA声卡驱动之s3c24xx-pcm.c
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "s3c24xx-pcm.h"#define S3C2转载 2011-11-19 21:36:23 · 1106 阅读 · 0 评论 -
ALSA编程细节分析
Loong:之前写过基于ALSA的WAV播放录音程序,见http://blog.csdn.net/sepnic/archive/2011/01/14/6140824.aspx。现在本想好好整理一下ALSA的编程思想,但Google了一下,发现已经有同道做了类似的工作,故将其转载过来,并添加一些本人的疑问以及补充(将会继续补充,原文很多重要的ALSA参数没有提到)。原文:http://blogo转载 2011-11-20 22:00:22 · 854 阅读 · 0 评论 -
使用ALSA编写自己的音频程序
Alsa是Linux高级音频接口。面对众多的音频设备,Alsa为Linux音频开发人员提供了一套标准的访问机制,使得音频开发变得十分容易。不信?下面我们就利用它编写一个简单的录音/播音程序,不过这需要你有一定的计算机语言基础。一个典型的音频程序应该具有以下结构: 打开音频设备 为设备设置读写参数 向音频设备读/写音频数据 关闭设备 Alsa库为我们实现这些操作提供了转载 2011-11-20 23:39:24 · 4007 阅读 · 0 评论 -
安装交叉编译器arm-linux-gcc:(备忘)
方法1:一、交叉编译环境 gcc-2.95.3 的建立 1.下载cross-2.95.3.tar.bz2 2.建目录,复制,解压# cd /usr/local# mkdir arm# cd arm复制cross-2.95.3.tar.bz2 到当前目录# tar jxvf cross-2.95.3.tar.bz23.导出/usr/local/arm/2.95转载 2011-11-21 18:53:33 · 581 阅读 · 0 评论 -
u-boot命令介绍及烧写程序实例(备忘)
Printenv 打印环境变量。Uboot> printenvbaudrate=115200ipaddr=192.168.1.1ethaddr=12:34:56:78:9A:BCserverip=192.168.1.5Environment size: 80/8188 bytesSetenv 设置新的变量Uboot> setenv myboard AT91RM920转载 2011-11-21 19:00:10 · 607 阅读 · 0 评论 -
修改ARM开发板IP地址(备忘)
要修改ARM开发板的IP,如果是yaffs2文件,可以1、首先要修改/etc/init.d/rcS文件,在/sbin/ifconfig lo 127.0.0.0下添加一行/sbin/ifconfig eth0 192.168.1.20 up注:192.168.1.20 只是举例,可以改成你想要修改的IP地址本来这样修改之后就可以的,但是我发现仍然不行,使用ifconfig命令,发现转载 2011-11-21 23:24:30 · 1676 阅读 · 0 评论 -
linux下vi命令大全(备忘)
进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后一行首 vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处 vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复f转载 2011-11-21 19:29:10 · 496 阅读 · 0 评论 -
linux下configure命令详细介绍(备忘)
核心提示:Linux环境下的软件安装,并不是一件容易的事情;如果通过源代码编译后在安装,当然事情就更为复杂一些;现在安装各种软件的教程都非常普遍;但万变不离其中,对基础知识的扎实掌握,安装各种软件的问题就迎刃而解了。Linux环境下的软件安装,并不是一件容易的事情;如果通过源代码编译后在安装,当然事情就更为复杂一些;现在安装各种软件的教程都非常普遍;但万变不离其中,对基础知识的扎实掌握,安装各转载 2011-11-21 22:40:51 · 551 阅读 · 0 评论 -
linux板级设备的初始化过程
start_kernel() -> setup_arch(&command_line) -> mdesc = setup_machine(machine_arch_type) -> list = lookup_machine_type(nr) -> return struct machine_desc. 内核在启动的时候就是最先运行start_kernel() , 然后她就会调用体系结构相关转载 2011-12-24 21:12:36 · 674 阅读 · 0 评论 -
第一讲:2410的初始化流程(设备初始化)
第一讲:2410的初始化流程(设备初始化)1 在mach-smdk2410.c中先通过MACHINE_START()定义了machine_desc的变量,其中注册了smdk2410_map_io(), s3c2410_init_irq(), smdk2410_init()这3个回调函数. 这3个回调函数会在系统起来的时候setup_arc转载 2011-12-24 21:18:49 · 826 阅读 · 0 评论 -
Lcd帧缓冲设备
帧缓冲(framebuffer)是Linux为显示设备提供的一个接口,是把显存抽象后的一种设备,它允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作,这种操作是抽象的,统一的。用户不必关心物理显存的位置,换页机制等等具体细节。这些都由Framebuffer设备驱动程序完成的。帧缓冲驱动应用广泛,在linux的桌面系统中,Xwindow服务器就是利用帧缓冲进行窗口绘制的。尤其是通过帧缓冲设备可转载 2011-12-27 22:01:57 · 1388 阅读 · 0 评论 -
Frame Buffer
Linux的帧缓冲(Frame Buffer)之一:原理及控制参数大家都知道Unix/Linux系统是由命令驱动的。X-Window-System是Unix/Linux上的图形系统,它是通过X-Server来控制硬件的。但有一些Linux的发行版在引导的时候就会在屏幕上出现图形,这时的图形是不可能由X来完成的,那是什么机制呢?答案是FrameBuffer。 帧缓冲(f转载 2011-12-27 22:06:21 · 1814 阅读 · 0 评论 -
framebuffer 简介
FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口。Linux 工作在保护模式下,所以用户态进程是无法象 DOS 那样使用显卡 BIOS 里提供的中断调用来实现直接写屏,Linux 抽象出 FrameBuffer 这个设备来供用户态进程实现直接写屏。Framebuffer 机制模仿显卡的功能,将显卡硬件结构抽象掉,可以通过 Framebuffer 的读写直接对显存进行操作。转载 2011-12-27 22:08:45 · 663 阅读 · 0 评论 -
对FrameBuffer的简单解释和用法示例
大家都知道Unix/Linux系统是由命令驱动的。那么最基本的系统是命令行的(就是想DOS一样的界面)。X-Window-System是Unix/Linux上的图形系统,它是通过X-Server来控制硬件的。但有一些Linux的发行版在引导的时候就会在屏幕上出现图形,这时的图形是不可能由X来完成的,那是什么机制呢?答案是FrameBuffer。FrameBuffer不是一个图形系统,更不是窗口转载 2011-12-27 22:11:38 · 635 阅读 · 0 评论 -
mmap与内存管理
mmap与内存管理- mmap系统调用的编程实例 收藏1 mmap的使用 mmap地址映射是Linux系统提供的一种功能强大的系统调用,最典型的应用是用于显卡内存的映射。同样,对于普通的硬盘文件也可以进行mmap系统调用。 #include void * mmap(void *start, size_t length, int转载 2011-12-27 22:19:04 · 634 阅读 · 0 评论 -
linux spi驱动分析
关于spi的学习,我觉得最好的方法还是看Linux的源代码,主要是driver/spi/spi.c(h),spidev.c(h)。spi dev的示例可以看看at25.c,spi总线的示例可以看omap_uwire或者spi_s3c24xx.c和spi_s3c24xx_gpio.c。在看这些代码之前,需要对Linux的设备模型有一定的了解。另外,网上有两篇教程不错,《linux spi子系统驱转载 2011-12-29 20:46:11 · 647 阅读 · 0 评论