linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > article > Linux开发区 > 嵌入应用 >
栏目导栏
资料搜索
热门文章
·Symbian编程VC开发环境设置
·基于ARM的嵌入式Linux开发平台
·嵌入式Linux用Qt Designer快速
·S3C2410X开发总结及心得
·轻松控制uClinux嵌入式开发过程
·嵌入式操作系统uCLinux
·uC/OS和uClinux的比较
·uClinux系统分析
·Porting uClinux to Samsung S
·在Windows上应用uClinux
·sqlite嵌入式数据库在arm-linu
·嵌入式设备上的 Linux 系统开发
·七款嵌入式Linux操作系统简介
·e680i手机嵌入式Linux 研究
·嵌入式系统和嵌入式操作系统
最新文章
·uClinux小型化的做法-内存管理
·uClinux小型化的做法-解决方案
·uClinux小型化的做法-可执行文
·在嵌入式Linux环境下制作QPF字
·ARM Linux开机后自动运行特定程
·构建基本的嵌入式Linux根文件系
·自己动手打造嵌入式Linux软硬件
·MP3播放器madplay在ARM的移植
·Linux 2.6.11 MTD驱动情景分析
·ARM中C和汇编混合编程及示例
·BusyBox 简化嵌入式 Linux 系统
·使用虚拟机嵌入式Linux开发前的
·用NFS服务开发ARM Linux程序的
·虚拟机Linux系统下连接ARM开发
·嵌入式Linux系统下的网页浏览器
Google
 
MP3播放器madplay在ARM的移植
[ 作者:王进波  加入时间:2008-02-13 09:47:55  来自:CUBLOG ]
主机配置:winxp,vmware5.0,redhat9.0
实验箱:s3c2410,uda1341

一、移植前的准备工作
首先移植Uboot,Uimage(linux2.6.15)和ramdisk
打开串口,在超级终端上启动linux
U-Boot 1.1.1 (Jul 11 2006 - 22:04:39)
U-Boot code: 33F80000 -> 33F96830 BSS: -> 33F9AB18
IRQ Stack: 33f4ff7c
FIQ Stack: 33f4ef7c
RAM Configuration:
Bank #0: 30000000 64 MB
Flash: 512 kB
*** Warning - bad CRC, using default environment

In: serial
Out: serial
Err: serial
AWEN2410:
输入bootm 32000000
启动linux
AWEN2410 #
好,ARM上的linux已经启动了。

二、移植声卡驱动程序
实验箱选用的是UDA1341的声卡,因此必须首先编译UDA1341的驱动,编译完成后才可以移植到实验箱上。当然,这个编译是在redhat中完成的。
驱动程序中共有三个文件:snd-s3c2410-uda1341.c,bitfield.h, Makefile.
拷贝这三个文件到自己的编译目录下
我的根目录是:#/usr/local/mp3来编译的
进入uda1341的目录,#cd uda1341
因为这个是要移植到ARM-s3c2410上的,因此,必须要用ARM的编译工具进行编译。
首先找到交叉工具,我这里是用cross_3.4.1来编译的。
#export PATH=$PATH:/usr/local/arm/3.4.1/bin
#vi Makefile
修改KERNELDIR 这一行,要&移植到实验箱上的linux版本一样,否则,可能会引起版本不同导致的问题,
这一行修改如下:KERNEKDIR ?=/usr/local/linux=2.6.15
然后输入# make 进行编译,这时候,会在uda 1341目录下产生snd-s3c2410-uda1341.ko
这个就是我们要移植到ARM实验箱上的驱动程序,没有它,uda1341是不能工作的。

三、编译内核模块
因为前面在编译linux-2.6.15的时候,可能没有编译进对声卡的支持,因此应该重新编译以前的内核linux -2.6.15,相信大家一定很熟悉了哈
在linux-2.6.15目录下,make menuconfig
进入,在 device drivers
  Sound
选中sound card support
进入open sound system
选中open sound system
然后重新编译,这时会在根目录的linux-2.6.15/sound/(你编译kernel的目录)目录下的内核模块 soundcore.ko,在linux-2.6.15/sound/core 产生snd.ko 这就是,我们需要的linux的驱动模块。

四、开始移植工作
1、下载以下程序libid3tag,libmad,madplay。
2、下载zlib一个压缩库,libid3tag需要它
用交叉编译工具编译zlib,并且把库生成到交叉编译环境的库目录下
./configure --prefix=/usr/local/arm/3.4.1/arm-linux.
  修改Makefile.
  CC=arm-linux-gcc
  AR=arm-linux-ar rc
  RANLIB=arm-linux-ranlib
  然后执行命令make
  make install
  说明:--prefix是便于寻找头文件和库文件,以下同
3、编译libid3tag
  ./configure CC=arm-linux-gcc --host=arm-linux --disable-debugging -disable-shared --prefix=/usr/local/arm/3.4.1/arm-linux
  make
  make install
  说明:--host指明库运行的环境arm-linux不是ix86-pc-linux.
  -disable-shared 编译器默认是动态连接共享库的。这里指明为静态连接(关键)
4、编译libmad
  ./configure --enable-fpm=arm --host=arm-linux --disable-shared --disable-debugging --prefix=/usr/local/arm/3.4.1/arm-linux CC=arm-linux-gcc
  make
  make install
  说明:同上
5、编译madplay
  ./configure --host=arm-linux CC=arm-linux-gcc --disable-debugging --disable-shared
  make
  make install

五、准备下载文件的准备
1、在redhat中,打开ftp工具,并且用网络将实验箱对结,主要是要将上面编译的文件传输到arm上。
2、设立ip地址:ifconfig eth0 192.168.3.
3、安装ftp服务器
4、建立ftp传输的文件夹:
#cd /home
# mkdir dsl
# useradd
# passwd dsl
# chown dsl dsl
在dsl下,拷贝前面编译的文件:有snd.ko soundcore.ko,snd-s3c2410-uda1341.ko,madplay
还有,就是你要准备播放的mp3 这里,我准备播放的是10.mp3

六、下载开始
1、首先在串口中建立一个文件系统,这个文件系统用来保存上面要下载的文件。

 knod /dev/ram b 1 1
  dd if=/dev/zero of=/dev/ram 4096
  mke2fs –vm0 /dev/ram 4096
  mount -t ext2 /dev/ram /mnt/ramdisk
  cd /mnt/ramdisk
超级终端中这样操作
/ $ cd /mnt/ramdisk
/mnt/ramdisk $ ls
lost+found
/mnt/ramdisk $
好,这样,文件系统就可以建立起来了
2、 传输文件开始,将pc机和arm 实验箱用网络线连接起来,然后,按照如下操作
Ftpget –udsl –pdsl 192.168.3.3 snd.ko snd.ko
..........................................................Soundcore.ko soundcore.ko
..........................................................Snd-s3c2410-uda1341.ko Snd-s3c2410-uda1341.ko
 ..........................................................Madplay madplay
最后,还要传输要播放的mp3文件哦
 mnt/ramdisk $ ftpget -udsl -pdsl 192.168.3.3 10.mp3 10.mp3
ftpget: Write Error: No space left on device
后面的提示不用关心,原因是前面我得的ramdisk只有4096,不到5M,空间不够的原因,导致的结果是我么后面播放的歌曲只有前面一部分,没有关系。
3、下载完成后,基本的文件已经准备就绪了,下面就可以开始进行mp3音乐的播放。
  加载模块:
/mnt/ramdisk $ insmod snd.ko
/mnt/ramdisk $ insmod soundcore.ko
/mnt/ramdisk $ insmod snd-s3c2410-uda1341.ko
建立块专用或字符专用文件
mknod /dev/dsp c 14 3
mknod /dev/mixer c 14 0

注:
 dev/dsp 数字信号处理(DSP):DSP是指声卡中专门处理效果的芯片,称为效果器,对提高声卡性能很有用
/dev/mixer 混音器混音器是一台控制音频信号的提升,并将音频信号导向所指目的地的设备

4、下面可以播放音乐
 mnt/ramdisk $ ./madplay --sample-rate=65535 10.mp3
其中,sample-rate=65535设置播放的频率,否则可能会引起播放速度太快
显示的界面如下:

MPEG Audio Decoder 0.15.1 (beta) - Copyright (C) awen s3c2410-uda1341: audio_set_dsp_speed:44100 prescaler:66
2000-2004 Robert Leslie et al.
tty: /dev/tty: No such file or directory
  Title: 甜蜜蜜
  Artist: 邓丽君
  Genre: Blues
awen s3c2410-uda1341: audio_set_dsp_speed:65535 prescaler:66
output: resampling 44100 Hz to 65535 Hz


七、 存在的问题
1、我的arm 是从nandflash启动的,前面Uboot 的移植中只用了前面的4096,不到5M的空间,导致下载的时候,必须重新建立一个ramdisk,不能存放很大的空间,当然,每次arm重新启动以后,就必须建立新的文件系统,比较麻烦,也很不爽,这个工作以后来完成,当然,如果有朋友完成的话,大家可以共享。
2、usb的开发还没有完成,如果完成的话,就可以直接播放usb 里面的音乐文件了,那可是太爽了。
3、lcd设计没有完成,完成了就可以看电影了。

总结:个人感觉,inux真的是一个很好的东西,大家好好做吧,有什么新的东西可以共享。因为我是教师,所以写的比较详细,在网上经常可以看到很多的帖子,经常有一种找不着北的感觉,因为很多细节没有说清楚,经常会做不下去,大家以后可以写的详细点,便于交流。
4: 参考文献:
http://bbs.chinaunix.net/viewthread.php?tid=794077


Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·Linux系统下的df/hdparm命令介绍  (2008-02-04 10:08:13)
 ·ARM中C和汇编混合编程及示例  (2008-01-28 11:17:04)
 ·Fedora 8播放mp3、rmvb、avi等解决办法  (2008-01-24 10:07:46)
 ·用NFS服务开发ARM Linux程序的方法介绍  (2008-01-23 09:44:14)
 ·虚拟机Linux系统下连接ARM开发板的方法  (2008-01-23 09:43:41)
 ·Linux移植PSP详细步骤  (2007-12-28 12:30:58)
 ·浅析armlinux 2.4.19中断irq分发例程的派发流程之根基  (2007-12-27 10:57:03)
 ·Linux下的定时器:alarm()与setitimer()  (2007-12-27 10:44:15)
 ·Rhythmbox与Totem 不支持MP3的解决方法  (2007-12-25 10:22:57)
 ·嵌入式基础:ARM下GCC交叉编译器的制作  (2007-12-21 12:56:27)