嵌入式Linux中文站

MP3播放器madplay在ARM的移植


主机配置:winxp,vmware5.0,redhat9.0Sy8Linux联盟
实验箱:s3c2410,uda1341Sy8Linux联盟
Sy8Linux联盟
一、移植前的准备工作Sy8Linux联盟
首先移植Uboot,Uimage(linux2.6.15)和ramdiskSy8Linux联盟
打开串口,在超级终端上启动linuxSy8Linux联盟
U-Boot 1.1.1 (Jul 11 2006 - 22:04:39)Sy8Linux联盟
U-Boot code: 33F80000 -> 33F96830 BSS: -> 33F9AB18Sy8Linux联盟
IRQ Stack: 33f4ff7cSy8Linux联盟
FIQ Stack: 33f4ef7cSy8Linux联盟
RAM Configuration:Sy8Linux联盟
Bank #0: 30000000 64 MBSy8Linux联盟
Flash: 512 kBSy8Linux联盟
*** Warning - bad CRC, using default environmentSy8Linux联盟
Sy8Linux联盟
In: serialSy8Linux联盟
Out: serialSy8Linux联盟
Err: serialSy8Linux联盟
AWEN2410:Sy8Linux联盟
输入bootm 32000000Sy8Linux联盟
启动linuxSy8Linux联盟
AWEN2410 #Sy8Linux联盟
好,ARM上的linux已经启动了。Sy8Linux联盟
Sy8Linux联盟
二、移植声卡驱动程序Sy8Linux联盟
实验箱选用的是UDA1341的声卡,因此必须首先编译UDA1341的驱动,编译完成后才可以移植到实验箱上。当然,这个编译是在redhat中完成的。Sy8Linux联盟
驱动程序中共有三个文件:snd-s3c2410-uda1341.c,bitfield.h, Makefile.Sy8Linux联盟
拷贝这三个文件到自己的编译目录下Sy8Linux联盟
我的根目录是:#/usr/local/mp3来编译的Sy8Linux联盟
进入uda1341的目录,#cd uda1341Sy8Linux联盟
因为这个是要移植到ARM-s3c2410上的,因此,必须要用ARM的编译工具进行编译。Sy8Linux联盟
首先找到交叉工具,我这里是用cross_3.4.1来编译的。Sy8Linux联盟
#export PATH=$PATH:/usr/local/arm/3.4.1/binSy8Linux联盟
#vi MakefileSy8Linux联盟
修改KERNELDIR 这一行,要&移植到实验箱上的linux版本一样,否则,可能会引起版本不同导致的问题,Sy8Linux联盟
这一行修改如下:KERNEKDIR ?=/usr/local/linux=2.6.15Sy8Linux联盟
然后输入# make 进行编译,这时候,会在uda 1341目录下产生snd-s3c2410-uda1341.koSy8Linux联盟
这个就是我们要移植到ARM实验箱上的驱动程序,没有它,uda1341是不能工作的。Sy8Linux联盟
Sy8Linux联盟
三、编译内核模块Sy8Linux联盟
因为前面在编译linux-2.6.15的时候,可能没有编译进对声卡的支持,因此应该重新编译以前的内核linux -2.6.15,相信大家一定很熟悉了哈Sy8Linux联盟
在linux-2.6.15目录下,make menuconfigSy8Linux联盟
进入,在 device driversSy8Linux联盟
  SoundSy8Linux联盟
选中sound card supportSy8Linux联盟
进入open sound systemSy8Linux联盟
选中open sound systemSy8Linux联盟
然后重新编译,这时会在根目录的linux-2.6.15/sound/(你编译kernel的目录)目录下的内核模块 soundcore.ko,在linux-2.6.15/sound/core 产生snd.ko 这就是,我们需要的linux的驱动模块。Sy8Linux联盟
Sy8Linux联盟
四、开始移植工作Sy8Linux联盟
1、下载以下程序libid3tag,libmad,madplay。Sy8Linux联盟
2、下载zlib一个压缩库,libid3tag需要它Sy8Linux联盟
用交叉编译工具编译zlib,并且把库生成到交叉编译环境的库目录下Sy8Linux联盟
./configure --prefix=/usr/local/arm/3.4.1/arm-linux.Sy8Linux联盟
  修改Makefile.Sy8Linux联盟
  CC=arm-linux-gccSy8Linux联盟
  AR=arm-linux-ar rcSy8Linux联盟
  RANLIB=arm-linux-ranlibSy8Linux联盟
  然后执行命令make Sy8Linux联盟
  make installSy8Linux联盟
  说明:--prefix是便于寻找头文件和库文件,以下同Sy8Linux联盟
3、编译libid3tagSy8Linux联盟
  ./configure CC=arm-linux-gcc --host=arm-linux --disable-debugging -disable-shared --prefix=/usr/local/arm/3.4.1/arm-linuxSy8Linux联盟
  make Sy8Linux联盟
  make installSy8Linux联盟
  说明:--host指明库运行的环境arm-linux不是ix86-pc-linux.Sy8Linux联盟
  -disable-shared 编译器默认是动态连接共享库的。这里指明为静态连接(关键)Sy8Linux联盟
4、编译libmadSy8Linux联盟
  ./configure --enable-fpm=arm --host=arm-linux --disable-shared --disable-debugging --prefix=/usr/local/arm/3.4.1/arm-linux CC=arm-linux-gccSy8Linux联盟
  makeSy8Linux联盟
  make install Sy8Linux联盟
  说明:同上 Sy8Linux联盟
5、编译madplaySy8Linux联盟
  ./configure --host=arm-linux CC=arm-linux-gcc --disable-debugging --disable-shared Sy8Linux联盟
  make Sy8Linux联盟
  make installSy8Linux联盟
Sy8Linux联盟
五、准备下载文件的准备Sy8Linux联盟
1、在redhat中,打开ftp工具,并且用网络将实验箱对结,主要是要将上面编译的文件传输到arm上。Sy8Linux联盟
2、设立ip地址:ifconfig eth0 192.168.3.Sy8Linux联盟
3、安装ftp服务器Sy8Linux联盟
4、建立ftp传输的文件夹:Sy8Linux联盟
#cd /homeSy8Linux联盟
# mkdir dslSy8Linux联盟
# useraddSy8Linux联盟
# passwd dslSy8Linux联盟
# chown dsl dslSy8Linux联盟
在dsl下,拷贝前面编译的文件:有snd.ko soundcore.ko,snd-s3c2410-uda1341.ko,madplaySy8Linux联盟
还有,就是你要准备播放的mp3 这里,我准备播放的是10.mp3Sy8Linux联盟
Sy8Linux联盟
六、下载开始Sy8Linux联盟
1、首先在串口中建立一个文件系统,这个文件系统用来保存上面要下载的文件。Sy8Linux联盟
Sy8Linux联盟
 knod /dev/ram b 1 1 Sy8Linux联盟
  dd if=/dev/zero of=/dev/ram 4096Sy8Linux联盟
  mke2fs –vm0 /dev/ram 4096Sy8Linux联盟
  mount -t ext2 /dev/ram /mnt/ramdiskSy8Linux联盟
  cd /mnt/ramdiskSy8Linux联盟
超级终端中这样操作Sy8Linux联盟
/ $ cd /mnt/ramdiskSy8Linux联盟
/mnt/ramdisk $ lsSy8Linux联盟
lost+foundSy8Linux联盟
/mnt/ramdisk $Sy8Linux联盟
好,这样,文件系统就可以建立起来了Sy8Linux联盟
2、 传输文件开始,将pc机和arm 实验箱用网络线连接起来,然后,按照如下操作Sy8Linux联盟
Ftpget –udsl –pdsl 192.168.3.3 snd.ko snd.koSy8Linux联盟
..........................................................Soundcore.ko soundcore.koSy8Linux联盟
..........................................................Snd-s3c2410-uda1341.ko Snd-s3c2410-uda1341.koSy8Linux联盟
 ..........................................................Madplay madplay Sy8Linux联盟
最后,还要传输要播放的mp3文件哦Sy8Linux联盟
 mnt/ramdisk $ ftpget -udsl -pdsl 192.168.3.3 10.mp3 10.mp3 Sy8Linux联盟
ftpget: Write Error: No space left on deviceSy8Linux联盟
后面的提示不用关心,原因是前面我得的ramdisk只有4096,不到5M,空间不够的原因,导致的结果是我么后面播放的歌曲只有前面一部分,没有关系。Sy8Linux联盟
3、下载完成后,基本的文件已经准备就绪了,下面就可以开始进行mp3音乐的播放。Sy8Linux联盟
  加载模块:Sy8Linux联盟
/mnt/ramdisk $ insmod snd.koSy8Linux联盟
/mnt/ramdisk $ insmod soundcore.koSy8Linux联盟
/mnt/ramdisk $ insmod snd-s3c2410-uda1341.koSy8Linux联盟
建立块专用或字符专用文件Sy8Linux联盟
mknod /dev/dsp c 14 3Sy8Linux联盟
mknod /dev/mixer c 14 0Sy8Linux联盟
Sy8Linux联盟
注:Sy8Linux联盟
 dev/dsp 数字信号处理(DSP):DSP是指声卡中专门处理效果的芯片,称为效果器,对提高声卡性能很有用 Sy8Linux联盟
/dev/mixer 混音器混音器是一台控制音频信号的提升,并将音频信号导向所指目的地的设备Sy8Linux联盟
Sy8Linux联盟
4、下面可以播放音乐Sy8Linux联盟
 mnt/ramdisk $ ./madplay --sample-rate=65535 10.mp3 Sy8Linux联盟
其中,sample-rate=65535设置播放的频率,否则可能会引起播放速度太快Sy8Linux联盟
显示的界面如下:Sy8Linux联盟
Sy8Linux联盟
MPEG Audio Decoder 0.15.1 (beta) - Copyright (C) awen s3c2410-uda1341: audio_set_dsp_speed:44100 prescaler:66Sy8Linux联盟
2000-2004 Robert Leslie et al.Sy8Linux联盟
tty: /dev/tty: No such file or directorySy8Linux联盟
  Title: 甜蜜蜜Sy8Linux联盟
  Artist: 邓丽君Sy8Linux联盟
  Genre: BluesSy8Linux联盟
awen s3c2410-uda1341: audio_set_dsp_speed:65535 prescaler:66Sy8Linux联盟
output: resampling 44100 Hz to 65535 HzSy8Linux联盟
Sy8Linux联盟
Sy8Linux联盟
七、 存在的问题Sy8Linux联盟
1、 我的arm 是从nandflash启动的,前面Uboot 的移植中只用了前面的4096,不到5M的空间,导致下载的时候,必须重新建立一个ramdisk,不能存放很大的空间,当然,每次arm重新启动以后, 就必须建立新的文件系统,比较麻烦,也很不爽,这个工作以后来完成,当然,如果有朋友完成的话,大家可以共享。Sy8Linux联盟
2、usb的开发还没有完成,如果完成的话,就可以直接播放usb 里面的音乐文件了,那可是太爽了。Sy8Linux联盟
3、lcd设计没有完成,完成了就可以看电影了。Sy8Linux联盟
Sy8Linux联盟

本文永久更新链接:http://embeddedlinux.org.cn/emb-linux/system-development/200812/24-432.html



分享:

评论