首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

S3C2440 UDA1341 聲卡驅動移植與 Madplay 播放器交叉編譯全記錄

     編輯:關於C++

一、內核聲卡驅動配置 (Linux 3.0)

  1. 修改 `arch/arm/mach-s3c2440/mach-mini2440.c`(或對應板級文件):
    添加平台設備 `uda1340_codec`、`s3c2440_audio`、`samsung_asoc_dma`。
    定義 `s3c24xx_uda134x_platform_data` 指定 GPIO:L3_CLK=GPB4, L3_MODE=GPB2, L3_DATA=GPB3,型號 `UDA134X_UDA1341`。
  2. `make menuconfig` 啟用:
    `Device Drivers → Sound card support → Advanced Linux Sound Architecture → SoC Audio → Samsung S3C24XX UDA134X support`。
    並選擇 `UDA1341` 模式。
  3. 編譯內核、燒錄,啟動日誌出現 `uda1341` 相關註冊信息即成功。

二、Madplay 交叉編譯遷移 (arm-linux-gcc-4.5.4)

依賴庫編譯順序

  1. zlib-1.1.4:`./configure --prefix=...` → 修改 `Makefile` 中 `CC/AR/RANLIB` 為交叉工具鏈 → `make && make install`。
  2. libid3tag-0.15.1b:`./configure CC=arm-linux-gcc --host=arm-linux --disable-shared --prefix=... CPPFLAGS=-I.../include LDFLAGS=-L.../lib` → `make install`。
  3. libmad-0.15.1b:同樣 configure,編譯時遇到 `-fforce-mem` 錯誤,**刪除 `Makefile` 中該選項**(GCC ≥3.4 已移除)。
  4. madplay-0.15.2b:同樣 configure,**關鍵**:若提示找不到 `mad.h` 或 `libmad.a`,手動從編譯產物目錄(`.libs/`)複製到 `--prefix` 指定的 `include/`、`lib/`、`lib/.libs/`。

常見坑點與解決

  • **SecureCRT 複製粘貼亂碼**:建議在虛擬機內直接用文本編輯器修改內核源碼,避免隱藏字符導致編譯錯誤。
  • **靜態編譯仍顯示動態鏈接**:`file madplay` 顯示 `dynamically linked` 可能是因 `libc` 未靜態鏈接,加上 `-static` 鏈接選項或檢查工具鏈配置。
  • **權限**:所有 `configure`/`make`/`make install` 需 `sudo` 或確保目標目錄寫權限。

三、驗證

chmod 777 madplay
./madplay test.mp3
# 聽到聲音即成功
# 快捷鍵:+/- 音量,b 暫停,ESC/s 停止

總結

嵌入式音頻遷移核心:內核 ALSA SoC 平台設備註冊 → 交叉編譯依賴鏈(zlib→id3tag→mad→madplay) → 靜態鏈接解決運行時依賴 → 硬件 GPIO 匹配。耐心解決每個編譯報錯是關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved