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