1、调试

(1)把程序拷贝到服务器上进行编译

(2)把程序放到内核上面去

重新配置内核,吧原来的声卡驱动程序去掉

a. 修改语法错误 11th_myalsa

b. 配置内核去掉原来的声卡驱动

-> Device Drivers

  -> Sound card support

    -> Advanced Linux Sound Architecture

       -> ALSA for SoC audio support

             

c. 使用新内核启动





d. 安装新驱动





insmod alsa/driver/myalsa/platform/s3c2440_iis.ko 

insmod alsa/driver/myalsa/platform/s3c2440_dma.ko 

insmod alsa/driver/myalsa/codec/uda1341.ko 

insmod alsa/driver/myalsa/machine/s3c2440_uda1341.ko 

mkdir /dev/snd

cd /dev/snd/

ln -s /dev/controlC0 

ln -s /dev/pcmC0D0p 

ln -s /dev/pcmC0D0c

cd /



e. aplay来测试





insmod ker_rw.ko

regeditor r32 0x4B000080 9

regeditor r32 0x55000000 5

(3)配置内核

原来声卡驱动的配置项

查看Makefile

查看对应的配置项

去掉配置项CONFIG_SND_SOC_SAMSUNG

修改后重新编译内核

拷贝到网络系统并修改内核的名字

2、启动内核安装驱动

(1)查看环境变量

(2)启动

没有发现声卡

(3)安装新驱动(查看之前编译好的驱动程序)

insmod alsa/driver/myalsa/platform/s3c2440_iis.ko 

insmod alsa/driver/myalsa/platform/s3c2440_dma.ko 

insmod alsa/driver/myalsa/codec/uda1341.ko 

insmod alsa/driver/myalsa/machine/s3c2440_uda1341.ko

(4)查看设备节点(aplay使用的设备节点默认是/dev/snd目录下,所以要在/dev/snd目录下创建设备节点)

(5)测试

出现段错误

返回地址在snd_pcm_info,在内核里分析此函数,这个函数调用某个子函数后出错

snd_pcm_info函数的ops->ioctl函数没有被赋值。

这里lr是0

在数据传输的时候出错,看snd_pcm_lib_write_transfer函数

(6)测试2

名为myalsa  for playback的中断一次也没有发生,表明DMA传输一次都没有启动

使用寄存器编辑器读取IIS和DMA 的寄存器,看看有没有被正确设置(26th_debug_regeditor)

把编辑器拷贝到服务器编译,拷贝别的驱动程序的Makefile,修改Makefile

进行编译,然后编译测试程序

最后把寄存器编译器和测试程序都拷贝到网络问价系统上

查看寄存器编辑器的用法

寄存器地址

insmod ker_rw.ko

regeditor r32 0x4B000080 9  //读DMA寄存器,r32表示读32位数据,从地址0x4B000080开始读,总共读9个寄存器

regeditor r32 0x55000000 5 //读IIS寄存器,r32表示读32位数据,从地址0x55000000开始读,总共读5个寄存器

IIS寄存器的值全为0,因而存在问题(可能IIS控制器的时钟没有使能,裸板程序没有使能时钟,是因为一上电的时候,就执行裸板程序,2440的IIS模块等各种模块时钟默认是打开的),当我们启动内核后,为了省电,内核会把用不到的模块关闭掉,所以在驱动里面要把IIS打开

当打开IIS时钟后寄存器就会有值,但是这些值是否正确还有待分析

最后安装驱动,创建设备节点,然后用aplay播放音频数据

ALSA声卡11_从零编写之调试——学习笔记的更多相关文章

  1. ALSA声卡10_从零编写之数据传输_学习笔记

    1.引言 (1)应用程序使用声卡的时候,数据流程是:应用程序把数据发送给驱动,驱动把数据发送给硬件声卡,声卡把数据转换成声音数据播放出去. (2)可以使用两种方式发送数据 第一种:app发数据,等驱动 ...

  2. ALSA声卡08_从零编写之框架_学习笔记

    1.整体框架 (1)图示((DAI(全称Digital Audio Interface)接口)) 在嵌入式系统里面,声卡驱动是ASOC,是在ALSA驱动上封装的一层,包括以下三大块 (2)程序框架 m ...

  3. ALSA声卡12_从零编写之添加音量控制_学习笔记

    1.设置音量时应用程序的调用过程 (1)strace分析: amixer cset numid=1 30 (设置音量) /dev/snd/controlC0 open SNDRV_CTL_IOCTL_ ...

  4. ALSA声卡09_从零编写之参数设置_学习笔记

    1.参数设置分析 (1)open: soc_pcm_open 依次调用cpu_dai, dma, codec_dai, machine的open或startup函数 只在dma的open函数里添加参数 ...

  5. OD调试学习笔记7—去除未注册版软件的使用次数限制

    OD调试学习笔记7—去除未注册版软件的使用次数限制 本节使用的软件链接 (想自己试验下的可以下载) 一:破解的思路 仔细观察一个程序,我们会发现,无论在怎么加密,无论加密哪里,这个程序加密的目的就是需 ...

  6. PX01关于手机屏SPI触摸调试学习笔记

    上位机工具:http://www.xk-image.com/download/blog/0002_TP调试/LcdTools20210605.rar 调试案例:http://www.xk-image. ...

  7. PX01关于手机屏IIC触摸调试学习笔记

    相关文件下载: 上位机工具:http://www.xk-image.com/download/blog/0002_TP调试/LcdTools20210605.rar 调试案例:http://www.x ...

  8. Windows调试学习笔记:(二)WinDBG调试.NET程序示例

    好不容易把环境打好了,一定要试试牛刀.我创建了一个极其简单的程序(如下).让我们期待会有好的结果吧,阿门! using System; using System.Collections.Generic ...

  9. Windows调试学习笔记:(一)WinDBG中加载SOS和CLR

    最近产品环境出现了部分服务器当机情况,虽然重启之后问题就不出现了.但本着彻底解决问题的态度,想要找到root cause.多次尝试Visual Studio失败(可能是代码惊醒了优化和签名)之后,决定 ...

随机推荐

  1. 获取网络接口信息——ioctl()函数与结构体struct ifreq、 struct ifconf

    转载请注明出处:windeal专栏 Linux 下 可以使用ioctl()函数 以及 结构体 struct ifreq  结构体struct ifconf来获取网络接口的各种信息. ioctl 首先看 ...

  2. mybatis环境搭建和开发步骤

    环境搭建 第一步:导入jar包 第二步:导入核心配置文件(mybatis-config.xml) <?xml version="1.0" encoding="UTF ...

  3. (四) ffmpeg filter学习-filter命令学习

    http://blog.csdn.net/joee33/article/details/51946712 http://blog.csdn.net/tkp2014/article/details/53 ...

  4. Iphone 消息通知(APNS)的3种方式 -- C# 和 nodejs

    发送 APNS 使用 p12 文件(C#) public static bool PushWithP12(string apnToken, string message) { _log.DebugFo ...

  5. Java之OO的特性与原则

    OO(Object-Oriented)面向对象     面向对象,有三个特性.五个原则之说. 特性 封装     顾名思义,封装就好比一个黑盒子,内部被隐藏,只有几个接口与外界相连.具体来说,所谓封装 ...

  6. 【剑指offer】不使用新变量,交换两个变量的值,C++实现

    # 题目 不使用新变量,交换两个变量的值. # 思路 方法一:使用加减法操作,交换两个变量的值. A = A+B B = A-B A = A-B 方法二:使用异或运算,交换两个变量的值 A = A^B ...

  7. 自定义requestAnimationFrame帧频

    requestAnimationFrame(callback)触发的callback方法会接受一个时间戳参数,所以如果不想直接跟随浏览器系统帧频的话, 就可以利用这个时间戳参数来做到自定义帧频,做法就 ...

  8. native 方法列表说明

    方法列表说明 关于static const JNINativeMethod method_table[]方法列表的原型如下: typedef struct { const char* name; co ...

  9. manacher 算法 这个人确实写得太好了;

    O(n)回文子串(Manacher)算法 资料来源网络 参见:http://www.felix021.com/blog/read.php?2040 问题描述: 输入一个字符串,求出其中最大的回文子串. ...

  10. BZOJ3924 ZJOI2015 幻想乡战略游戏 【动态点分治】

    BZOJ3924 ZJOI2015 幻想乡战略游戏 Description 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂 ...