
arm-linux驱动研究
文章平均质量分 66
alada007
这个作者很懒,什么都没留下…
展开
-
Linux串口(serial、uart)驱动程序设计 (2010-05-26 16:28)
一、核心数据结构串口驱动有3个核心数据结构,它们都定义在1、uart_driveruart_driver包含了串口设备名、串口驱动名、主次设备号、串口控制台(可选)等信息,还封装了tty_driver(底层串口驱动无需关心tty_driver)。struct uart_driver { struct module *ow转载 2012-08-18 10:18:34 · 3442 阅读 · 0 评论 -
S3C2440支持4MB的虚拟屏幕
S3C2440支持4MB的虚拟屏幕,就是指显示图像的大小最大可达4MB。4MB的图像,即使使用24bpp的模式也是一个比较大的图片(1024×1024)。为了更好的使用这个特性S3C2440对于图像数据的读取处理给出了一个直观的图像,这个图像中,可以看到屏幕可以当成一个“窗口”在这个4MB的图像区域“滑动”。这个窗口可大可小,但是这个一般由你的设备的屏幕决定(TQ2440的屏幕为3.5寸,大小为3转载 2012-07-08 00:24:45 · 918 阅读 · 0 评论 -
S3C2440外部中断
#include "2440addr.h"#include "def.h"#include "option.h"/*EINT8(GPG0),EINT11(GPG3),EINT13(GPG5),EINT14(GPG6),EINT15(GPG7),EINT19(GPG11),为按键接口。*/static void __irq EINT8_23_ISR(v转载 2012-07-07 17:14:46 · 879 阅读 · 0 评论 -
error: stray ‘\302’ in program
> *.c:3: error: stray ‘\302’ in program> *.c:3: error: stray ‘\240’ in program> *.c: In function ‘main’:> *.c:5: error: stray ‘\302’ in program> *.c:5: error: stray ‘\240’ in program> *.c:5:转载 2012-07-07 10:34:21 · 16235 阅读 · 0 评论 -
ALSA音频结构(2)
http://blog.youkuaiyun.com/sepnic/article/details/6146378之前写过一个音频驱动CODEC分析,当时忽略了阐述最基本的概念。要了解一个东西,首先要明白它是什么它起到什么作用,然后才会更好对它的工作流程更好的分析。所以这里提一下:CODEC :音频芯片的控制,比如静音、打开(关闭)ADC(DAC)、设置ADC(DAC)的增益、耳机模式的检测等操作转载 2012-06-20 20:02:29 · 1256 阅读 · 0 评论 -
ALSA音频结构(1)
http://blog.youkuaiyun.com/sepnic/article/details/6140911ALSA: Advanced Linux Sound Architecture,它包括内核驱动集合、API库和工具。用户层程序直接调用libsound的API库,不需要打开设备等操作,因此编程者不需要了解底层细节。这里不分析ALSA的核心代码core,也不阐述如何在用户层进行声转载 2012-06-20 19:59:45 · 1390 阅读 · 0 评论 -
ALSA音频驱动研究(三)
前面一节的内容我们提到,ASoC被分为Machine、Platform和Codec三大部分,其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码,再次引用上一节的内容:Machine驱动负责处理机器特有的一些控件和音频事件(例如,当播放音频时,需要先行打开一个放大器);单独的Platform和Codec驱动是不能工作的,它必须由Machine驱动把它们结转载 2012-06-19 13:32:39 · 3176 阅读 · 0 评论 -
ALSA音频驱动研究(一)
ALSA中的链表结构 在ALSA中设计到很多的链表结构,理解这些链表能更好的理解ALSAa) card->devicescard->devices链表的建立方便了card相关设备的注册过程和设备的管理。通过这个链表,在注册设备的过程中,可以先将设备(包括设备编号,设备相应的操作指针等)添加进链表中,然后再遍历链表,各自的设备调用本身的注册函数将自身注册,完成ca转载 2012-06-18 21:57:30 · 7752 阅读 · 0 评论 -
#与##涵义
## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。具体的定义在编译原理里有详尽的解释#符是把传递过来的参数当成字符串进行替代。假设程序中已经定义了这样一个带参数的宏:#define PRINT( n ) print转载 2012-06-17 11:58:41 · 856 阅读 · 0 评论 -
固件
固件担任着一个系统最基础最底层工作的软件。而在硬件设备中,固件就是硬件设备的灵魂,因为一些硬件设备除了固件以外没有其它软件组成,因此固件也就决定着硬件设备的功能及性能。 固件(Firmware)就是写入EROM或EPROM(可编程只读存储器)中的程序,通俗的理解就是“固化的软件”,台港澳称为“韧体”。更简单的说,固件就是BIOS的软件,但又与普通软件完全不同,它是固化在集成电路内部转载 2012-05-26 17:37:24 · 695 阅读 · 0 评论 -
读书笔记(7)
7.工程中的Linux设备驱动platform设备驱动http://lxr.oss.org.cn/source/drivers/input/input.c?v=2.6.34#L1529 platform总线,会匹配相应的设备和驱动。 现实的设备中都需要挂接一种总线,对于本身依附于PCI,USB,I2C,SPI设备而言,这不会是问题,但是,如果不依赖于此类总线,Linux原创 2012-05-22 12:32:01 · 494 阅读 · 0 评论 -
什么是BSP
在嵌入式开发过程中,相信各位都时不时听说过BSP,那什么是BSP呢?他又是什么用的呢?对于一个给定的嵌入式平台,如ARM平台,他们的硬件电路的资源是不尽相同的,要在各种不同的ARM板子上都要跑一个给定的operating system(os),如linux。BSP就是介于主板硬件和操作系统之间的一层,应该说是属于操作系统的一部分,主要目的是为了支持操作系统,使之能够更好的运行于硬件主板上。BS转载 2012-05-22 12:32:26 · 29156 阅读 · 0 评论 -
Mini2440 触摸屏驱动分析
Mini2440 触摸屏驱动分析前提知识:内核定时器内核定时器用于控制某个函数(定时器处理函数)在未来某个时间特定执行。内核定时器注册的函数只会执行一次 内核定时器被组织成双向链表,使用struct_timer_list结构来描述struct timer_list{ struct list_head entry;/*链表*/ unsign转载 2012-06-27 16:36:36 · 1462 阅读 · 0 评论 -
RTC Driver for S3c2440
RTC Driver for S3c2440Real Time ClockRTC,实时时钟用于在系统电源关闭的情况下依靠备用电池工作,完成计时功能。工作原理以上是实时时钟的框架图,由XTIrtc和XTOrtc产生脉冲信号出,传给时钟分频器,得到128Hz的频率,用于产生滴答计数。当TICNT计数为0时,产生一个TIME TIC转载 2012-06-27 16:39:50 · 938 阅读 · 0 评论 -
s3c2440的UART用法
SPI、IIC和UART是最常用的三种串行总线,这三种总线在s3c2440中都被集成了。在这里我们主要介绍UART,另两个总线在后面的文章中给出。 UART(Universal Asynchronous Receiver/Transmitter,通用异步接收/发送装置)用于异步通信,可以实现全双工发送和接收。它不仅可以实现不同嵌入式系统之间的通信,还可以实现与PC之间的通转载 2012-08-18 10:16:06 · 661 阅读 · 0 评论 -
S3C2440串口通讯实现
一、目的由于项目需求,要实现S3C2440串口与PC机的通讯。通过实验手册上的串口通讯示例了解串口的工作原理,实现简单的串口通讯实验。为进一步利用串口编程实现更加复杂的功能做准备。实验效果:PC机上按下任意键,通过串口将字符传送至2440,2440又通过串口返回至PC机,并在DNW终端或超级终端显示该字符。二、实验原理PC机 S3C2440开发板S3转载 2012-08-17 10:11:14 · 1886 阅读 · 0 评论 -
madplay移植
http://hi.baidu.com/firefly007/blog/item/c57bf65719eb48d5b645ae36.html1、解压源代码包# cd madplay# for f in $(ls *.tar.gz); do tar -zxvf $f ; done2、编译madplay及其所依赖的库文件(1)设定编译器环境变量# expor转载 2012-07-24 09:24:57 · 676 阅读 · 0 评论 -
2440查看内存,nandflash使用大小
1.有没有命令可以查看NAND FLASH的使用情况? 执行 df 命令2.[root@scs-2 tmp]# free total used free shared buffers cachedMem: 3266180 3250004 16176转载 2012-08-08 12:58:51 · 7012 阅读 · 0 评论 -
linux,S3C2440,睡眠模式
http://blog.youkuaiyun.com/hongtao_liu/article/details/4208988http://www.linuxforum.net/forum/showflat.php?Board=embedded&Number=725416http://blog.chinaunix.net/uid-517401-id-1641576.html 这三篇文原创 2012-08-03 22:41:57 · 1659 阅读 · 0 评论 -
[转]Android开发者应该深入学习的10个开源项目
[转]Android开发者应该深入学习的10个开源项目1.Android团队提供的示例项目 如果不是从学习Android SDK中提供的那些样例代码开始,可能没有更好的方法来掌握在Android这个框架上开发。由Android的核心开发团队提供了15个优秀的示例项目,包含了游戏、图像处理、时间显示、开始菜单快捷方式等。地址:http://code.google.com/p/ap转载 2012-06-27 16:41:07 · 608 阅读 · 0 评论 -
s3c2440 ADC驱动
S3C2440 ADC结构图 A/D转换时间 当GCLK频率为50MHz,预分频系数为49时,10位转换时间如下: A/D converter freq. = 50MHz/(49+1) = 1MHzConversion time = 1/(1MHz / 5cycles) = 1/200KHz = 5 us 触屏接口模式 1.普通转换模式单转换模式更多的用于普通的A转载 2012-06-27 16:34:57 · 2509 阅读 · 0 评论 -
Mini2440 NRF24L01无线模块驱动(我只是个搬运工)
Mini2440 NRF24L01无线模块驱动为了和jihuaLi 完成智能家居系统,我移植了这个驱动,不管写的如何,总结一下是很有必要的。NRF24L01使用SPI总线与主机通信,没有SPI端口的设备可以使用IO口进行模拟。关于SPI: SPI是一种四线串行总线,SCLK: 串行时钟线MOSI: 总线主机输出/ 从机输入MISO: 总线主机输入/转载 2012-06-27 16:31:50 · 5004 阅读 · 0 评论 -
request_mem_region 与 ioremap
如果从根本上说起的话应该从Intel的处理器芯片与其它的芯片的不同说起,与这两个函数相关的是对 I/OPort与内存的寻址方式,intel的处理器中内存与外部IOPort是独立编址与寻址的,这就有了两种地址空间分别是内存地址空间与IO地址空间,访问IO地址空间需使用不同的指令。与intel不同的是有些处理器(如PowerPC等)就只有一个地址空间,即内存空间,在这种情况下,外设的I/OPort物理转载 2012-06-28 17:14:18 · 4872 阅读 · 0 评论 -
S3C2440-AD应用
S3C2440-AD应用哈尔滨理工大学软件工程专业08-7李万鹏原创作品,转载请标明出处http://blog.youkuaiyun.com/woshixingaaa/archive/2010/12/19/6085783.aspx使用电位器模拟传感器,进行模数转化,将AD值转化为温度值,实时显示在LCD上。汉字使用48*48字模,字符使用24*48字模。通过软件PCtoLCD2转载 2012-06-27 16:50:29 · 1144 阅读 · 0 评论 -
DS18B20 Driver for Linux
DS18B20 Driver for Linux花了近50小时才完成了DS18B20测温模块的驱动,主要是因为对时序的掌握不是很熟练,耽误了很多时间。后来实用示波器仔细校准了每一段时序才得到满意的结果,小小的庆祝一下。下面给大家分享一下心得实验平台Mini2440 with linuxDS18B20数据手册115转载 2012-06-27 16:43:11 · 2624 阅读 · 0 评论 -
一些结构
list_head 结构在 list.h中实现,它是一个Simple doubly linked list,我们先看一下它的优美结构:struct list_head {struct list_head *next, *prev;};这个结构看起来怪怪的,它竟没有数据域!所以看到这个结构的人第一反应就是我们怎么访问数据?其实list_head不是拿来单独用的,它一般被嵌到其它结转载 2012-05-22 10:08:45 · 472 阅读 · 0 评论 -
内存映射
25 #define S3C_ADDR_BASE 0xF6000000 26 27 #ifndef __ASSEMBLY__ 28 #define S3C_ADDR(x) ((void __iomem __force *)S3C_ADDR_BASE + (x)) 29 #else 30 #define S3C_ADDR(x) (S3C_ADDR_BASE + (x)原创 2012-06-08 21:23:17 · 651 阅读 · 0 评论 -
读书笔记(6)
11.内存与I/O访问内存管理单元MMU,提供虚拟地址和物理地址的映射,内存访问权限保护,Cache缓存控制等硬件支持。它是一个硬件。有两个重要概念:TLB块表,TTW慢表Linux内核有三级页表PGD,PMD,PTE。一个task_struct它包含了mm_struct的首地址,每一个进程用一个mm_struct来定义它的虚拟内存用户区。用户空间和内核空间分别为3G和1G,1G的内核地址原创 2012-05-18 22:55:11 · 4429 阅读 · 0 评论 -
bzero和sigevent
原型:extern void bzero(void *s, int n); 用法:#include 功能:置字节字符串s的前n个字节为零。 说明:bzero无返回值。 举例: // bzero.c #include #include main() { struct { int a; char s转载 2012-05-12 16:28:48 · 1570 阅读 · 0 评论 -
fcntl用法
fcntl使用功能描述:根据文件描述词来操作文件的特性。#include #include int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock);[描述]fcntl()针对(文件转载 2012-05-12 11:11:16 · 797 阅读 · 0 评论 -
Linux下用w3m上网
在linux终端中输入命令w3m,后接任意网址。如:w3m http://www.baidu.com,回车,会显示OpeningSocket……,稍后即可显示网页,界面类似于windows下界面,不过没有windows下界面的图片,如下图所示:2.将光标移到红线上,回车,在窗口最底侧出现“TEXT:”,在后面输入想要搜索的关键字,如sql,然后回车,文字将显示到红线上,按Tab键,光标移动转载 2012-05-30 11:29:02 · 9714 阅读 · 0 评论 -
总线地址、物理地址、虚拟地址相关概念澄清
Now, on normal PCs the bus address is exactly the same as the physical address, and things are very simple indeed.However,they are that simple because the memory and the devices share the same address转载 2012-05-30 15:11:22 · 8978 阅读 · 0 评论 -
读书笔记(3)
7.linux 设备驱动中的并发控制 要解决多个进程对共享资源的并发访问,并发的访问会导致竞态,竞态问题的解决方式有以下几种:中断屏蔽,原子操作,自旋锁,和信号量等并发控制机制。 中断屏蔽:(但是长时间的屏蔽中断是很危险的)local_irq_disable() 屏蔽中断critical sectionlocal_irq_enable() 开中断,其中local原创 2012-05-06 16:24:57 · 513 阅读 · 0 评论 -
读书笔记(2)
6. 字符设备驱动: cdev结构体——P119 MKDEV(int major, int minor) 通过这个宏可以将主设备号和次设备号生成dev_t 一些用来操作cdev结构体的函数: cdev_init(),它用来初始化cdev的成员,并且建立cdev和file_operations之间的连接, void cdev_init(struct cdev原创 2012-05-06 12:33:07 · 601 阅读 · 0 评论 -
ARM __iomem __force
目录:1 S3c2410_gpio_setpin作用以及源码2 在内核中队部分代码进行深入跟踪3 ARM的IO内存映射计算及分析4 一些琐碎的话#define S3C2410_GPIO_BANKA (32*0)#define S3C2410_GPIO_BANKB (32*1)#define S3C2410_GPIO_BANKC (32*2)#de转载 2012-05-06 10:28:50 · 2483 阅读 · 0 评论 -
读书笔记(1)
Linux内核源代码目录结构——P56Linux内核的编译与加载,即Makefile和Kconfig——P61Linux中GNU C语法,比如一些语句格式,typeof(), 标号元素, 当前函数名 __FUNCTION__, __func__,特殊属性说明,do{} while(0)看目录树 tree -a模块 modinfo, remod, lsmod, 模块参数,module原创 2012-05-04 13:56:56 · 583 阅读 · 0 评论 -
对linux内核中compiler.h文件的分析(好野人的窝)
所有的内核代码,基本都包含了linux\compile.h这个文件,所以它是基础,打算先分析这个文件里的代码看看,有空再分析分析其它的代码。首先印入眼帘的是对__ASSEMBLY__这个宏的判断,这个变量实际是在编译汇编代码的时候,由编译器使用-D这样的参数加进去的,AFLAGS这个变量也定义了这个变量,gcc会把这个宏定义为1。用在这里,是因为汇编代码里,不会用到类似于__user这样的属性转载 2012-05-02 21:58:57 · 2962 阅读 · 0 评论 -
lxr安装__ubuntu下安装lxr-0.10.2(gunavy2009)
学linux驱动,看源码感觉http://lxr.oss.org.cn挺不错,很清晰方便 转载的文章http://blog.chinaunix.net/uid-26820608-id-3166734.html里面有ubuntu下安装的详细过程,如果感觉链接里面的简单就用里面的方法装,apt-get安装版本默认0.3 在Ubuntu下搭建LXR环境步骤: 1.安装 apach转载 2012-05-02 19:15:37 · 1099 阅读 · 0 评论 -
tasklet 机制
在编写设备驱动时, tasklet 机制是一种比较常见的机制,通常用于减少中断处理的时间,将本应该是在中断服务程序中完成的任务转化成软中断完成。为了最大程度的避免中断处理时间过长而导致中断丢失,有时候我们需要把一些在中断处理中不是非常紧急的任务放在后面执行,而让中断处理程序尽快返回。在老版本的 linux 中通常将中断处理分为 top half handler 、 bottom half ha转载 2012-05-13 10:16:18 · 526 阅读 · 0 评论 -
读书笔记(5)
10 中断与时钟 主要讲解中断与定时器的处理,其中涉及到了顶半部和底半部的机制。 按照中断入口跳转方法的不同,分为向量中断和非向量中断,采用向量中断,不同的中断分配不同的中断号对应不同的入口地址。而非向量中断,多个中断共享一个入口地址,然后在通过软件判断出具体是哪个中断。 可编程中断控制器(PIC),通过读写PIC寄存器,程序员可以屏蔽或者使能某中断及获得原创 2012-05-13 16:48:24 · 497 阅读 · 0 评论