- 博客(42)
- 资源 (3)
- 收藏
- 关注
转载 Linux ALSA声卡驱动之八:ASoC架构中的Platform
1. Platform驱动在ASoC中的作用前面几章内容已经说过,ASoC被分为Machine,Platform和Codec三大部件,Platform驱动的主要作用是完成音频数据的管理,最终通过CPU的数字音频接口(DAI)把音频数据传送给Codec进行处理,最终由Codec输出驱动耳机或者是喇叭的音信信号。在具体实现上,ASoC有把Platform驱动分为两个部分:snd_soc_pl
2013-02-28 15:21:41 601
转载 Linux ALSA声卡驱动之七:ASoC架构中的Codec
1. Codec简介在移动设备中,Codec的作用可以归结为4种,分别是:对PCM等信号进行D/A转换,把数字的音频信号转换为模拟信号对Mic、Linein或者其他输入源的模拟信号进行A/D转换,把模拟的声音信号转变CPU能够处理的数字信号对音频通路进行控制,比如播放音乐,收听调频收音机,又或者接听电话时,音频信号在codec内的流通路线是不一样的对音频信号做出相应的处理
2013-02-28 15:06:04 564
转载 Linux ALSA声卡驱动之六:ASoC架构中的Machine
前面一节的内容我们提到,ASoC被分为Machine、Platform和Codec三大部分,其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码,再次引用上一节的内容:Machine驱动负责处理机器特有的一些控件和音频事件(例如,当播放音频时,需要先行打开一个放大器);单独的Platform和Codec驱动是不能工作的,它必须由Machine驱动把它们结
2013-02-28 11:26:45 515
转载 Linux ALSA声卡驱动之五:移动设备中的ALSA(ASoC)
1. ASoC的由来ASoC--ALSA System on Chip ,是建立在标准ALSA驱动层上,为了更好地支持嵌入式处理器和移动设备中的音频Codec的一套软件体系。在ASoc出现之前,内核对于SoC中的音频已经有部分的支持,不过会有一些局限性: Codec驱动与SoC CPU的底层耦合过于紧密,这种不理想会导致代码的重复,例如,仅是wm8731的驱动,当时Lin
2013-02-28 08:34:45 492
转载 Linux ALSA声卡驱动之四:Control设备的创建
Control接口Control接口主要让用户空间的应用程序(alsa-lib)可以访问和控制音频codec芯片中的多路开关,滑动控件等。对于Mixer(混音)来说,Control接口显得尤为重要,从ALSA 0.9.x版本开始,所有的mixer工作都是通过control接口的API来实现的。 ALSA已经为AC97定义了完整的控制接口模型,如果你的Codec芯片只
2013-02-27 15:36:26 508
转载 Linux ALSA声卡驱动之三:PCM设备的创建
1. PCM是什么PCM是英文Pulse-code modulation的缩写,中文译名是脉冲编码调制。我们知道在现实生活中,人耳听到的声音是模拟信号,PCM就是要把声音从模拟转换成数字信号的一种技术,他的原理简单地说就是利用一个固定的频率对模拟信号进行采样,采样后的信号在波形上看就像一串连续的幅值不一的脉冲,把这些脉冲的幅值按一定的精度进行量化,这些量化后的数值被连续地输出、传输、处
2013-02-27 14:53:15 570
转载 Device Drivers, Part 5: Character Device Files — Creation & Operations
Device Drivers, Part 5: Character Device Files — Creation & OperationsBy Anil Kumar Pugalia on April 1, 2011 in Coding, Developers · 25 Comments and 0 ReactionsThis article is
2013-02-27 14:19:02 1141
转载 Class create, device create, device create file
Class create, device create, device create file开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点(包括ldd3中不少例子也是这样),实际上现在Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点。内核中定义了struct class结
2013-02-27 14:12:11 1178
转载 sysfs操作
一:前言在设备模型中,sysfs文件系统用来表示设备的结构.将设备的层次结构形象的反应到用户空间中.用户空间可以修改sysfs中的文件属性来修改设备的属性值,今天我们就来详细分析一下,sysfs的实现.二:sysfs的初始化和挂载Sysfs文件系统的初始化是在sysfs_init()中完成的,代码如下:int __init sysfs_init(void)
2013-02-27 14:07:55 1343
转载 Linux ALSA声卡驱动之二:声卡的创建
1. struct snd_card 1.1. snd_card是什么snd_card可以说是整个ALSA音频驱动最顶层的一个结构,整个声卡的软件逻辑结构开始于该结构,几乎所有与声音相关的逻辑设备都是在snd_card的管理之下,声卡驱动的第一个动作通常就是创建一个snd_card结构体。正因为如此,本节中,我们也从 struct cnd_card开始吧。
2013-02-27 11:27:32 513
转载 Linux ALSA声卡驱动之一:ALSA架构简介
一. 概述 ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构,想了解更多的关于ALSA的这一开源项目的信息和知识,请查看以下网址:http://www.alsa-project.org/。 在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-
2013-02-27 10:26:14 627
转载 一个使用 seq_file 接口的 proc_fs 例子
#include #include #include #include static struct proc_dir_entry *pfile;static char *myfruits[5] = {"apple", "orange", "banana", "watermelon", "pear"};static void *my_seq_start(struc
2013-02-26 10:44:40 581
转载 proc_fs文件的操作
创建一个 proc 文件根据对 proc 文件的不同使用,内核提供了多种包装函数来创建一个 proc 文件。方法一:struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode, struct proc_dir_entry *parent)这是最直接,包装最少的创建方法。参数 name 是要创建
2013-02-26 08:37:12 988
转载 proc数据结构
上节主要说明了proc下的内容,从本节开始解析proc的实现。与普通文件系统一样,proc当然需要虚拟文件系统的支持,所以它必须具备文件系统的几个主要的数据结构。1.proc_dir_entry 在proc文件系统中,每个entry的实例是由proc_dir_entry来描述的,其结构如下:struct proc_dir_entry { unsigned int
2013-02-25 16:36:34 867
转载 Linux内核的Nand驱动流程分析
最近在做Linux内核移植,总体的感觉是这样的,想要彻底的阅读Linux内核代码几乎是不可能的,至少这还不是嵌入式学期初期的重要任务。内核代码解压后有250M左右,据统计,有400多万行,而且涉及到了软件和硬件两方面的诸多知识,凭一人之力在短时间内阅读Linux内核代码是根本不可能的,强行阅读可能会打消我们嵌入式学习的积极性,最后甚至可能放弃嵌入式学习,如果真的想阅读内核代码来提高自己水平的话可以
2013-02-24 22:15:43 521
转载 编写内核模块遍历进程的PID
#include #include #include #include #include static __init int print_pid(void){ struct task_struct *task,*p; struct list_head *pos; int count=0; printk("Hello,let begin\n");
2013-02-24 21:36:10 3275
转载 Cortex-M3学习笔记(一)
Cortex-M3学习笔记(一)首先,在学习Cortex-M3时,我们必须要知道必要的缩略语。整理如下:AMBA:先进单片机总线架构 ADK:AMBA设计套件AHB:先进高性能总线 AHB-AP:AHB访问端口APB:先进外设总线 ARM ARM:ARM架构参考手册ASIC:行业领域专用集成电路 ATB :先进跟踪总线BE8:字节不
2013-02-20 15:45:38 1095
转载 从程序员到项目经理(12):如何管理自己的时间(上)
对很多项目经理而言,是没有什么所谓的“我的时间”的,因为他们不是在管项目,而是被工作的潮水带着跑而已,他们的时间被工作主宰了。项目经理必须要主动的管理自己的时间,合理安排自己的工作,才能真正“翻身”做自己时间主人。1.谁动了我的时间时间对于每个人而言,都是最稀缺的资源,对于一个管理者更是如此,时间不够用成为几乎所有管理者共同的问题。如果要对项目经理常说的话做一个调查的话,想信“我很
2013-02-20 11:17:32 535
转载 Ubuntu下构建gstreamer开发环境
1,Ubuntu已经安装了gstreamer库,因此只需要再安装几个开发库即可,是libstreamer0.10-0libstreamer0.10-devlibstreamer0.10-0-dbg在新立得里选中应用即可2,测试gstreamer开发库#include gst/gst.h>int main (int argc,char *arg
2013-02-20 11:10:40 520
转载 从程序员到项目经理(11):每个人都是管理者
从程序员转为项目经理,这是一个巨大的跨越。一个新任的项目经理,对项目管理找不到感觉,一般也被认为是一件正常的事情。这是否意味着,一定要等到当上了项目经理才能学习项目管理吗?一定要做砸一个项目才能成长为合格的项目经理吗?其实未必,项目管理所需要素质和技能并不是什么独门秘籍,而是在生活中时时用到、处处可以锻炼的。只要有心,程序员一样可以学习和实践项目管理知识。从某种程度来说,我们每个人都是管理者。
2013-02-19 18:55:55 443
转载 从程序员到项目经理(十):程序员加油站 --要执着但不要固执
程序员的成长之路,没有捷径可走,只有坚持不懈的执着追求,才能成为一名优秀的程序员。执着诚然可贵,但如果不能经常自省,则有可能会陷入固执的境地。1.程序员需要一点执着精神 《士兵突击》中许三多有一句名言:“不抛弃、不放弃”,这是一种可贵的执着精神。正是靠着这种不抛弃、不放弃的执着追求,许三多从一个普通的小兵,成长为团部的精英。在现实生活中也是这样,可以说大凡取得一定成就的人,在工作
2013-02-19 18:55:26 575
转载 从程序员到项目经理(九):程序员加油站 -- 再牛也要合群
“丛林法则”从未离我们远去,“适者生存”仍然是支配社会运行的一般法则。对于一群社会性动物而言,所谓“适者”,不只是体格的强壮,更重要的是能参与群体的公共生活。即使是最强大的狮子,只要离群,也只有死路一条!1.好汉也要三个帮 我喜欢看动物世界,感受那些发生在非洲大草原上的那些美丽或者哀伤的故事。那里生活着成群的狮子和鬣狗、还有数以百万计的野牛和角马。无论是凶猛的狮子,还是温驯的角马
2013-02-19 18:54:53 502
转载 从程序员到项目经理(七):程序员加油站 -- 完美主义也是一种错
追求完美是一种可贵的精神,完美主义也历来被认为是一种优秀的品格。可是在项目中,完美主义也是一种错,虽然是一种“美丽的错误”。项目讲求平衡,要的是合格,而不是优秀;要的是70分,而不是100分!1.两极分化的程序员相信在很多人眼里,程序员都是工作一丝不苟、对代码精雕细琢、精益求精的人。瞧,他们在电脑前面一坐就是大半天,如果不是追求完美之人,谁能这样坐得住板凳?可是依我所见,在
2013-02-19 18:53:48 446
转载 从程序员到项目经理(六):程序员加油站 -- 懂电脑更要懂人脑
说起程序员三个字,我觉得既骄傲又可悲。骄傲的是,我们曾经是时代骄子,是一群真正改变世界的人;可悲的是,我们很多致力于改变世界的程序员,却生活在自己的世界里,无法自拔,成为了继“书呆子”之后的“电脑呆子”。电脑本来只是一个工具,我们竟然被其所限制、甚至同化,悲夫!一、警惕成为“电脑呆子”(1)程序员眼中的自己程序员是怎样看待自己的呢?看看园子里的发言,码农、码畜、IT民工、苦逼、程序猿…
2013-02-19 18:53:16 402
转载 从程序员到项目经理(五):程序员加油站 -- 不是人人都懂的学习要点
学习是一种基础性的能力。然而,“吾生也有涯,而知也无涯。”,如果学习不注意方法,则会“以有涯随无涯,殆矣”。 一.学习也是一种能力看到这个标题,有人会说:“学习,谁不会?”的确,学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力。我们在刚出生的时候,什么也不知道,是一张真正的白纸,我们靠学习的本能,学会了走路、说话、穿衣服…后来,我们上学了,老师把书本上的知识一点一点
2013-02-19 18:52:39 437
转载 从程序员到项目经理(四):外行可以领导内行吗
一.从几个招聘要求说起在上一篇中,我举出了一个招聘需求,引起一些朋友的争论。既然招聘的是项目经理,为什么需要那么多专业技能呢?在百度上招聘频道搜索“软件项目经理招聘”,可以查到8500多条类似的招聘信息。我们看看国内软件行业老大东软集团的招聘条件:工作职责:带领团队完成需求分析,开发计划制定与跟踪,项目组关键技术问题解决,负责项目QCD。岗位要求:1、3
2013-02-19 18:51:48 649
转载 程序员:伤不起的三十岁
程序员干到30岁,好不容易从码奴混到了白领,却再也干不动了,还时时面临失业的危险。30岁,是一个程序员伤不起的年龄。明天,何去何从?一.30岁现象在官场上,曾经有一个59岁现象,就是官员们会在59岁时,会使劲捞上一把。很明显嘛,权力过期作废,再不捞就要退休了,没有机会了。在程序员的圈子里,也有一个30岁现象。当然,如果你有铁饭碗,比如在国企或政府机关,那你是无法理解底层劳动
2013-02-19 18:50:12 478
转载 从程序员到项目经理(一)
“从程序员到项目经理”,这个标题让我想起了很久以前一本书的名字《从Javascript到Java》。然而,从Javascript到Java充其量只是工具的更新,而从程序员到项目经理,却是一个脱胎换骨的过程。从Javascript到Java,是一个取巧的方法;而从程序员到项目经理,却并无捷径可走,必须从内而外的改变和提升。一.为什么要当项目经理1. 问题本质如果我对一个老程序
2013-02-19 18:47:25 454
转载 从程序员到项目经理(二)
一.升职之辨1. 为什么是我不是每个人都能当项目经理,程序员中只有一小部分能成为项目经理,大部分人会随着岁月的流逝,成为了“资深程序员”。那为什么领导要选择我呢?一般人对自己所拥有的东西都会很快习以为常,认为这是自己应得的。一点也没错,这就是你应得的,原因也很简单,那是因为你比别人优秀一点。其实领导挑选人才的标准很简单,那就是你比别人优秀,而且只需一点点。你不需要“
2013-02-19 18:46:26 363
转载 从程序员到项目经理(三)
在希腊德尔斐的阿波罗神庙上,刻得着一句神秘的箴言:“认识你自己”。从某种程度上来说,我们都是自己的“最熟悉的陌生人”。认识自己的位置,是每个人获得成长的第一堂课。一个人的位置,对其言行的影响是至关重要的,俗话说:“屁股决定脑袋”,虽然听着粗俗,却饱含人生哲理。既然我们屁股在项目经理的位置上,就应该像项目经理一样去思考问题,做事情。一.项目经理的处境经过数年的打拼,怀着美好的向往,我
2013-02-19 18:45:48 481
转载 Px_ipc_name()函数
/* include px_ipc_name */#include "unpipc.h"char *px_ipc_name(const char *name){ char *dir, *dst, *slash; //分配的空间在哪里释放的哦!@deprecated if ( (dst = malloc(PATH_MAX
2013-02-19 15:57:49 2083
转载 《UNIX网络编程 卷2》读书笔记(一)
1,获取Posix IPC的名字#include "unpipc.h"char* px_ipc_name(const char* name){ char* dir,*dst,*slash; if((dst = malloc(PATH_MAX))==NULL) return NULL;//分配失败 if((dir=getenv("PX_IPC_NAME
2013-02-19 15:54:33 834
转载 进程控制块(PCB)的结构
进程控制块(PCB)的结构进程控制块 PCB (Process Control Block): 存放进程的管理和控制信息的数据结构称为进程控制块。它是进程管理和控制的最重要的数据结构,每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤消而撤消。在不同的操作系统中对进程的控制和管理机制不同,PCB中的信息多少也不一样,通常PC
2013-02-19 10:32:52 7598
转载 模拟进程调度
#include #include #include #include /*进程控制块数据结构*/typedef struct node { char name[10];/*进程名*/ int prio; /*进程优先级*/ int round; /*进程分配的时间片*/ int cputime; /*进程消耗的CUP时间*/ int needtime;
2013-02-19 10:06:26 970
转载 模拟进程调度
#include#include#include /* 所用头文件 */#define PACE 5 /* 每次时间片长度 */ typedef struct running{ int num; int priority; int time;}Run; /* 处于运行状态的进程 */ typed
2013-02-19 09:52:55 1179
转载 GStreamer 编写一个简单的MP3播放器
本文介绍如何使用GStreamer 编写一个简单的MP3播放器。1,需要使用mad解码插件,因此需要先安装gstreamer0.10-plugins-ugly2,编写mp3播放器下面来看看如何利用GStreamer框架提供的组件,来实现一个简单的MP3播放器。数据源元件负责从磁盘上读取数据,过滤器元件负责对数据进行解码,而接受器元件则负责将解码后的数据写入声卡。如果想要在程序中应用
2013-02-19 09:05:34 844
转载 八皇后问题的非递归解法
用C++实现了八皇后问题的非递归算法。原理很简单,看代码就是了,无须多说#include #include #include #include using namespace std;const int MAX = 8;vector board(MAX);void show_result(){ for(size_t i = 0; i < b
2013-02-19 09:04:06 1563 1
转载 #if defined(__cplusplus)
由于C++编译器需要支持函数的重载,会改变函数的名称,因此dll的导出函数通常是标准C定义的。这就使得C和C++的互相调用变得很常见。但是有时可能又会直接用C来调用,不想重新写代码,让标准C编写的dll函数定义在C和C++编译器下都能编译通过,通常会使用以下的格式:(这个格式在很多成熟的代码中很常见)#if defined(__cplusplus)extern "C" {#endif
2013-02-18 15:21:24 1289
转载 C++中extern “C”含义深层探索
C++中extern “C”含义深层探索1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设
2013-02-18 15:16:54 377
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人