===================================================
主机操作系统:Centos 6.7
交叉编译器环境:arm-linux-gcc-4.5.4 (可通过命令/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc -v查询)
开发板平台: fl2440
Linux内核版本: linux-3.0 .54
IIS总线只处理声音数据。其他信号(如控制信号)必须单独传输。为了使芯片的引出管脚尽可能少,IIS只使用了三根串行总线。这三根线分别是:提供分时复用功能的数据线、字段选择线(声道选择)、时钟信号线。上图三个引脚就是我们待会需要加入代码中的引脚。
OSS(Open Sound System)是 linux 平台上一个统一的音频接口, 即只要音频处理应用程序按照OSS的API来编写,那么在移植到另外一个平台时,只需要重新编译即可。值得注意的是OSS只是部分开源。无论是选择ALSA还是OSS都是为了一个目的:将声卡抽象为一个统一的设备供linux程序员使用。我们前期测试选用的OSS系列。
--- smdk2440.c 2012-12-03 12:59:38.000000000 -0800
+++ mach-smdk2440.c 2017-04-12 11:40:02.691913086 -0800
@@ -44,9 +44,13 @@
#include <plat/clock.h>
#include <plat/devs.h>
#include <plat/cpu.h>
+//add
+#include <sound/s3c24xx_uda134x.h> //添加声卡头文件
#include <plat/common-smdk.h>
+#include <linux/dm9000.h> //添加DM9000网卡的头文件
+
static struct map_desc smdk2440_iodesc[] __initdata = {
/* ISA IO Space map (memory space selected by A24) */
@@ -102,6 +106,50 @@
}
};
+
+/* add DM9000 ethernet drivers ,whitch is bodify by liuchengdeng */
+
+#define DM9000_BASE (S3C2410_CS4 + 0x300)
+static struct resource s3c_dm9000_resource[] = {
+ [0] = {
+ .start = DM9000_BASE,
+ .end = DM9000_BASE + 3,
+ .flags = IORESOURCE_MEM
+ },
+ [1] = {
+ .start = DM9000_BASE + 4,
+ .end = DM9000_BASE + 7,
+ .flags = IORESOURCE_MEM
+ },
+ [2] = {
+ .start = IRQ_EINT7,
+ .end = IRQ_EINT7,
+ .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
+ }
+
+};
+
+
+static struct dm9000_plat_data s3c_dm9000_pdata = {
+ .flags = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),
+};
+
+static struct platform_device s3c_device_dm9000 = {
+ .name = "dm9000",
+ .id = -1,
+ .num_resources = ARRAY_SIZE(s3c_dm9000_resource),
+ .resource = s3c_dm9000_resource,
+ .dev = {
+ .platform_data = &s3c_dm9000_pdata,
+ },
+};
+
+
+/*********END********/
+
+
+
+
/* LCD driver info */
static struct s3c2410fb_display smdk2440_lcd_cfg __initdata = {
@@ -149,18 +197,45 @@
.lpcsel = ((0xCE6) & ~7) | 1<<4,
};
+//add uda134X
+static struct s3c24xx_uda134x_platform_data s3c24xx_uda134x_data = {
+ .l3_clk = S3C2410_GPB(4),
+ .l3_data = S3C2410_GPB(3), //这里添加了我们在原理图上的三个引脚
+ .l3_mode = S3C2410_GPB(2),
+ .model = UDA134X_UDA1341,
+};
+
+static struct platform_device s3c24xx_uda134x = {
+ .name = "s3c24xx_uda134x", //添加设备名,以便与驱动匹配
+ .dev = {
+ .platform_data = &s3c24xx_uda134x_data,
+ }
+};
+
+static struct platform_device uda1340_codec = {
+ .name = "uda134x-codec",
+ .id = -1,
+};
+
+//
+static struct platform_device *smdk2440_devices[] __initdata = {
&s3c_device_ohci,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
+ &s3c_device_dm9000,
+ //add
+ &uda1340_codec,
+ &s3c24xx_uda134x, //把添加好的结构体加入smdk设备内
+ &samsung_asoc_dma,
};
static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
- s3c24xx_init_clocks(16934400);
+ //s3c24xx_init_clocks(16934400);
+ s3c24xx_init_clocks(12000000);
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}
这里修改其实主要概括起来就三个步骤:
- 添加头文件
- 添加相关设备结构体
- 将设备结构体加入主设备结构体
[yangni@yangni linux-3.0.54]$ make menuconfig
libmad-0.15.1b.tar.gz, //madplay的库文件
libid3tag-0.15.1b.tar.gz //mp3的解码库
zlib-1.1.4.tar.gz //用于文件的压缩与解压
[yangni@yangni ~]$ cd fl2440/3rdparty/
[yangni@yangni 3rdparty]$ mkdir uda1341
[yangni@yangni 3rdparty]$ cd uda1341/
[yangni@yangni uda1341]$ mkdir mad
[yangni@yangni mad]$tar -xzf libmad-0.15.1b.tar.gz
[yangni@yangni mad]$tar -xzf madplay-0.15.2b.tar.gz
我们通常可以使用./configure --help来查看配置选项:
这里我们必须知道以下几个配置参数:
--host: 用于指定平台;如: --host==arm-linux
--prefix: 用于指定文件的安装路径; 如:--prefix=/home/yangni/fl2440/3rdparty/uda1341/mad (这里的路径就是你存放这些包的路径)
-I 指定头文件的路径; 如:-I/home/yangni/fl2440/3rdparty/uda1341/mad/include
-L 指定库文件的路径;如:-L/home/leiyuxing/fl2440/3rdparty/uda1341/mad/lib--disable-shared
--disable-shared 这个选项是告诉编译器使用静态库编译;
注:
四次编译存在依赖关系,顺序不能乱。并且每次都应用sudo权限。
编译分为三个步骤,所以看似要做很多工作,但是基本都是一样的:
- 生成Makefile
- 编译(sudo make)
- 安装(sudo make install)
1、编译zlib-1.1.4:
(1)配置configure文件,生成Makefile
[yangni@yangni uda1341]$ cd zlib-1.1.4
[yangni@yangni zlib-1.1.4]$ sudo ./configure --prefix=/home/yangni/fl2440/3rdparty/uda1341/mad
(2)修改Makefile:
[yangni@yangni zlib-1.1.4]$vim Makefile
>: tftp -gr madplay 192.168.1.8
>: tftp -gr feihua.mp3 192.168.1.8
>: chmod a+x madplay
>: ./madplay feihua.mp3
此时可能提示错误:
这里提示找不到相关的动态库,是交叉编译器除了问题。那么我们去交叉编译器所在目录找寻相关的库文件,将文件下载到开发板并放入/lib路径中。
>: ./madplay feihua.mp3