songh717 发表于 2006-11-5 15:42:45

[b]Step to step MP3播放器madplay在

西南科技大学 [email protected]
感谢吕昱博士的全程辅导和支持,感谢我的学生王进波的辛勤工作,转贴请注名出处,请保持文档的完整性
主机配置: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 -> 33F96830BSS: -> 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的目录,#cduda1341
因为这个是要移植到ARM-s3c2410上的,因此,必须要用ARM的编译工具进行编译。
首先找到交叉工具,我这里是用cross_3.4.1来编译的。
#export PATH=$PATH:/usr/local/arm/3.4.1/bin
#viMakefile
修改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、首先在串口中建立一个文件系统,这个文件系统用来保存上面要下载的文件。

mknod /dev/ram b 1 1
ddif=/dev/zero of=/dev/ram4096
mke2fs –vm0 /dev/ram4096
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.kosoundcore.ko
..........................................................Snd-s3c2410-uda1341.ko Snd-s3c2410-uda1341.ko
...........................................................Madplaymadplay
最后,还要传输要播放的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
www.google.cn
页: [1]
查看完整版本: [b]Step to step MP3播放器madplay在