自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

转载 Linux-2440下的DMA驱动(详解)

DMA(Direct Memory Access)即直接存储器访问, DMA 传输方式无需 CPU 直接控制传输,通过硬件为 RAM 、I/O 设备开辟一条直接传送数据的通路,能使 CPU 的效率大为提高。学了这么多驱动,不难推出DMA的编写套路:1)注册DMA中断,分配缓冲区2)注册字符设备,并提供文件操作集合fops-> 2.1)file_operations里设置DMA硬件相关操作,来启动DMA由于我们是用字符设备的测试方法测试的,而本例子只是用两个地址之间的拷贝来演示DMA的作用,

2020-09-22 23:56:19 1061

转载 第26课第4节 使用madplay应用程序测试声卡

一:madplay的移植madpaly 是linux上的一个开源MP3播放器,是一个高精度MPEG音频解码器。支持MPEG-1 Layer,Layer II 和Layer III(也就是MP3)标准,利用libmad库进行MP3解码。首先需要找到一下几个tar包zlib-1.2.3.tar.tar用于文件的压缩和解压libid3tag-0.15.1b.tar.gz mp3的解码库libmad-0.15.1b.tar.gz madplay的库文件madplay-0.15.2b.tar.gz 播放程

2020-07-23 01:05:31 338

转载 第26课第3节 写WM8976声卡驱动

uda1341声卡和WM8976声卡非常相似,音频都是I2S接口,就只有控制部分不一样,所以接下来,便修改S3c2410-uda1341.c的控制部分,来移植为wm8976驱动怎么写 WM8976 驱动程序?IIS 部分一样,保持不变控制部分不同,重写1.首先进入uda1341的probe函数static int s3c2410iis_probe(struct device *dev){ struct platform_device *pdev = to_platform_de

2020-07-23 00:59:32 529

转载 第26课第2节 linux内核的声卡系统分析

在linux声卡中存在两种声卡系统,一种是OSS(开放声音系统),一种是ALSA(先进Linux声音架构)。本节系统以OSS(Open Sound System)为例 ,内核以linux-2.6.22.6版本为例,位于:linux2.6.22.6\sound\Sound_core.c1首先进入入口函数如下图所示:入口函数里,只注册了一个主设备号为(SOUND_MAJOR)14的“sound”字符设备和class类,这里为什么没有创建设备节点?是因为, 当注册声卡系统的驱动后,才会有设备节点,此时

2020-07-23 00:34:53 257

转载 第26课第1节 声音采集播放及IIS接口介绍

声音是如何录制:① 采样频率:一秒钟采集声音多少次。以固定的时间来采集,采集就是把声音转换成电压信号并记录。所以采集的时间点越密集,则之后恢复出来的声音会越逼真。对于人耳采集频率不需要太大。8KHz - 电话所用采样率, 对于人的说话已经足够清除22.05KHz - 无线电广播所用采样率32KHz - miniDV 数码视频、DAT所用采样率44.1KHz - 音频 CD, 也常用于 MPEG-1 音频(VCD, SVCD, MP3)所用采样率48KHz - mi.

2020-07-23 00:03:07 1569

转载 字符设备驱动程序改进---使用register_chrdev_region()系列来注册字符设备

1.之前注册字符设备用的如下函数注册字符设备驱动:register_chrdev(unsigned int major, const char *name,const struct file_operations *fops);但其实这个函数是linux版本2.4之前的注册方式,它的原理是:(1)确定一个主设备号(2)构造一个file_operations结构体, 然后放在chrdevs数...

2020-05-01 16:55:36 160

转载 8.Nor Flash块设备驱动

一:nor flash原理及硬件1.NOR 的接口与内存的接口是一样的,而 NAND(数据线只有 7 条,发地址又发命令和数据等)。NOR 可以像内存一样的来读,但不能像内存一样的去写。NOR 的烧写要发出某些特定的命令,在某地址上写某个值就称为命令2.NOR 存放关键性的代码,如 bootload\内核或文件系统。而 NADN 有位反转的缺点,如存一些海量数据如视频监控文件等3.用 ...

2019-12-22 22:39:49 221

转载 7.NandFlash块设备驱动-- 三:NAND FLASH驱动程序测试

1.编译启动内核1.1 重新设置编译内核(去掉默认的nand flash驱动)make menuconfig ,进入menu菜单重新设置内核参数:进入-> Device Drivers-> Memory Technology Device (MTD) support-> NAND Device Support< > NAND Flash support f...

2019-12-22 20:25:54 406

转载 7.NandFlash块设备驱动-- 三:NAND FLASH驱动编写

一:简单编写显然在内核中,mtd已经帮我们做了整个框架,而我们的nand flash驱动只需要以下几步即可:1)分配及设置mtd_info结构体成员2)分配及设置nand_chip结构体成员3)设置硬件相关(设置nand控制器时序等)4)通过nand_scan()来扫描nandflash5)通过add_mtd_partitions()来添加分区,创建MTD字符/块设备1 m...

2019-12-16 23:48:17 227

转载 7.NandFlash块设备驱动-- 二:NAND FLASH驱动框架

接下来我们来参考自带的nand flash驱动,位于drivers/mtd/nand/s3c2410.c中为什么nand flash设备驱动在mtd目录下?因为mtd(memory technology device 存储 技术设备 ) 是用于访问 memory 设备( ROM 、 flash )的Linux 的子系统。 MTD 的主要目的是为了使新的 memory 设备的驱动更加简单,为此它...

2019-12-04 22:44:45 148

转载 7.NandFlash块设备驱动-- 一:NAND FLASH原理及硬件操作

一,NANA 接线图 上相关的 引脚含义:A:地址线,数据线,命令 与 ALE,CLE 信号问 1. 原理图上 NAND FLASH 和 S3C2440 之间只有数据线(LDATA0~7),没有看到地址引脚。怎么传输地址(如何将地址信号告诉 NAND)?答案:复用。答 1.在 DATA0~DATA7 上既传输数据,又传输地址。用一个信号 ALE 分辨是“地址”还是“信号”,当 ALE 为...

2019-12-02 14:30:15 375

转载 6.块设备驱动程序--三:完善内存模拟磁盘

1,“硬件相关操作”:分配内存。//声明一个块内存static unsigned char *ramblock_buf;//3,硬件相关操作: ramblock_buf = kzalloc (RAMBLOCK_SIZE, GFP_KERNEL); //分配内存...static void rmablock_exit(void){...kfree(ramblock_buf);//...

2019-12-01 15:47:25 124

转载 6.块设备驱动程序--二:块设备驱动编写

如何写块设备驱动程序1., 使用register_blkdev()创建一个块设备2,以面向对象的思想分配 gendisk 结构体。用 alloc_disk 函数。3,设置 gendisk 结构体。①,分配/设置一个队列:request_queue_t. (提供读写能力)用 blk_init_queue 函数。②,设置 gendisk 其他信息。(提供磁盘属性:磁盘容量,扇区大小等)4...

2019-11-12 21:32:11 487

转载 6.块设备驱动程序--一:块设备驱动程序框架

一:块设备的引入1.之前我们学的都是字符设备驱动,先来回忆一下字符设备驱动:当我们的应用层读写(read()/write())字符设备驱动时,是按字节/字符来读写数据的,期间没有任何缓存区,因为数据量小,不能随机读取数据,例如:按键、LED、鼠标、键盘等2.接下来本节开始学习块设备驱动块设备:块设备是i/o设备中的一类, 当我们的应用层对该设备读写时,是按扇区大小来读写数据的,若读写的...

2019-11-10 15:23:51 181

转载 5.USB驱动--七 4大描述符

在USB描述符中,从上到下分为四个层次:USB设备描述符(usb_device_descriptor)、USB配置描述符(usb_config_descriptor)、USB接口描述符(usb_interface_descriptor)、USB端点描述符(usb_endpoint_descriptor)、一个设置描述符可以有多个配置描述符一个配置描述符可以有多个接口描述符(比如声卡驱动...

2019-11-05 22:32:23 97

转载 5.USB驱动--六:总结usb鼠标设备驱动步骤

.步骤如下:首先先定义全局变量:usb_driver结构体,input_dev指针结构体 ,虚拟地址缓存区,DMA地址缓存区3.1在入口函数中1)通过usb_register()函数注册usb_driver结构体3.2在usb_driver的probe函数中1)分配一个input_dev结构体2)设置input_dev支持L、S、回车、3个按键事件3)注册input_dev结构体4...

2019-11-05 22:23:16 194

转载 5.USB驱动--五:USB 鼠标中断函数

USB 设备(USB 鼠标)所谓的“中断传输”是指“USB 主机控制器”不断的查询“USB 设备”是否有数据过来当"USB 主机控制器"来不断的查询“USB 设备 - 鼠标”,有数据后“USB 主机控制器”会存在 usb_buf 中,然后“USB 主机控制器”产生一个中断.此时“usbmouse_as_key_irq”函数会调用。内核示例 usbmouse.c 中“usbmouse_as_k...

2019-11-05 21:57:33 470

转载 5.USB驱动--四:USB 鼠标驱动

目标:USB 鼠标用作按键:(相当于输入子系统)左键 – L右键 – S中键 – Enter直接在基础框架的probe函数中完善代码,使用input系统:1.分配一个input_dev结构体*/myusb_mouse_dev = input_allocate_device();/2.设置input_dev结构体//*2.1能产生哪类事件*/set_bit(EV_KEY, myu...

2019-10-30 23:49:00 176

转载 5.USB驱动--三:USB设备驱动程序框架

USB 总线驱动程序,在接入 USB 设备时,会帮我们构造一个新的 usb_dev 注册到“usb_bus_type”里去。这部分是内核做好的。我们要做的是,构造一个 usb_driver (驱动)结构体,注册到“usb_bus_type”中去。在“usb_driver”结构体中有“id_table”表示他能支持哪些设备,当 USB 设备能匹配 id_table 中某一个设备时,就会调用“usb...

2019-10-29 20:44:35 274

转载 5.USB驱动--二:USB总线驱动程序的流程

想大概看 USB 总线驱动程序的工作过程:(所做的事件)USB 总线驱动程序的作用:(从代码里分析)1. 识别 USB 设备。1.1 分配地址。(刚上来时就用默认地址 0 。)1.2 并告诉 USB 设备(set address)。1.3 发出命令获取描述符。描述符的信息可以在 include\linux\usb\Ch9.h 看到。2. 查找并安装对应的设备驱动程序3. 提供 US...

2019-10-27 17:07:55 543

转载 LCD驱动--二 写lcd驱动 2.硬件相关操作

在上一节LCD层次分析中,得出写个LCD驱动入口函数,需要以下4步: 1) 分配一个fb_info结构体: framebuffer_alloc(); 2) 设置fb_info 3) 设置硬件相关的操作 4) 使能LCD,并注册fb_info: register_framebuffer()在上一节中已完成1,2步,分配并设置了fb_info结构体,接下来进行硬件相关操作,...

2019-06-22 15:20:45 192

转载 LCD驱动--二 写lcd驱动 1.分配,设置fb_info (转载)

一:步骤分析:在上一节LCD层次分析中,得出写个LCD驱动入口函数,需要以下4步: 1) 分配一个fb_info结构体: framebuffer_alloc(); 2) 设置fb_info 3) 设置硬件相关的操作 4) 使能LCD,并注册fb_info: register_framebuffer()具体步骤如下:在驱动init入口函数中:1)分配一个fb_i...

2019-06-01 23:59:38 556

转载 LCD 驱动-- 一: lcd层次分析(转载)

如果我们的系统要用GUI(图形界面接口),这时LCD设备驱动程序就应该编写成frambuffer接口,而不是像之前那样只编写操作底层的LCD控制器接口。什么是frambuffer设备?frambuffer设备层是对图像设备的一种抽象,它代表了视频硬件的帧缓存,使得应用程序通过定义好的接口就可以访问硬件。所以应用程序不需要考虑底层的(寄存器级)的操作。应用程序对设备文件的访问一般在/dev目录,...

2019-06-01 23:07:25 150

转载 LCD 驱动-- 裸机LCD配置(转载)

横屏4.3寸LCD为480*272(行:480个像素点 列:272个行)1.LCD原理图 :Pin1- Pin6:Von/ Voff 电源正/负(由GPG4控制,高电平有效)Pin2:VM/VDEN 数据使能信号 (0:表示正在跳行,1:表示可以传输像素数据)Pin8:VLINE/HSYNC 水平同步信号(每扫完一行,即发一次水平同步信号)Pin28:VFRAME/VS...

2019-05-31 00:20:58 455

转载 LCD 驱动-- 裸机LCD原理详解(转载)

第001节_LCD硬件原理先简单介绍下LCD的操作原理。如下图的LCD示意图,里面的每个点就是一个像素点。想象有一个电子枪,一边移动,一边发出各种颜色的光。这里有很多细节问题,我们一个一个的梳理。1.电子枪是如何移动的?答:有一条CLK时钟线与LCD相连,每发出一次CLK(高低电平),电子枪就移动一个像素。1.颜色如何确定?答:由连接LCD的三组线:R(Red)、G(Green...

2019-05-31 00:12:01 2643

转载 驱动程序分层分离概念 :linux-platform机制实现驱动层分离(转载)

本节目标: 学习platform机制,如何实现驱动层分离1.先来看看我们之前分析输入子系统的分层概念,如下图所示:如上图所示,分层就是将一个复杂的工作分成了4层, 分而做之,降低难度,每一层专注于自己的事情, 系统只将其中的核心层和事件处理层写好了,所以我们只需要来写驱动层即可,接下来我们来分析platform机制以及分离概念2.分离概念优点:将所有设备挂接到一个虚拟的总线上,...

2019-05-20 23:49:49 331

转载 dev下没有input 目录和event设备节点

一./dev下没有input 目录和event设备节点解决方法1.查看内核配置Device Drivers->Input device support->Event interface && Event debugging 2.文件系统下新建/etc/mdev.conf配置加入 # Move input devices to input directory...

2019-03-21 22:50:47 1475

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除