九月21

移植 Flite 到 ARM 平台

Flite (Festival-Lite) 是一套 TTS(Text To Speech) 系統,透過語音合成技術,不需要錄一堆龐大的語音資料庫就可以朗讀文句。Flite 顧名思義就是有名的 Festival 重寫精簡版,更適合應用在嵌入式系統上,編譯完的執行檔只有 2.5MB 左右,也由於是使用 C 寫的,所以可以很容易和自己的程式結合,試了半天總算可以在 2410 Arm Linux 上面跑起來了。
1. 跨平台編譯
編譯方式和大多數 Open Source 差不多。
# ./configure CC=arm-linux-gcc –host=arm-linux
# make
# arm-linux-strip bin/flite
完成就會得到 flite 執行檔,下載到板子測試:
# flite -t "Hello, How are you?"
嗯,沒有聲音,只有第一次出現 0.x 秒的雜音,再試試:
# flite "Hello, How are you?" test.wav
會將語音存成 test.wav,抓到 PC 上播放,很正常。所以猜想應該是放音部份的問題。
2. 修改 src/audio/au_oss.c
覺得這一段怪怪的,因為記得 S3C2410 採用的 UDA1341 音效晶片只有 Ch1 和 [...]


九月18

在嵌入式 Linux 架設 Boa Webserver

Boa 是一套小型的網頁伺服器,很適合應用在 Embedded System 上,並且內建就可以直接支援以 C 寫的 CGI 網頁,這篇是移植 Boa 到 ARM9 S3C2410 平台的過程,Linux 版本為 2.6.17.4,使用 arm-linux toolchain 3.4.1 編譯。
1. 產生 Makefile
下載 Source code 並解壓縮進到 src 目錄。
# ./configure –host=arm-linux
2. 修改 Makefile 使用跨平台編譯
CC = arm-linux-gcc
CPP = arm-linux-gcc -E
# make (如果編譯或執行時有錯誤請看Q&A)
# arm-linux-strip boa
3. 配置 Boa
可以在源碼目錄找到這個設定檔,放到 /etc/boa 裡面,有修改的部份如下:
User 0
Group 0
#DirectoryMaker /usr/lib/boa/boa_indexer
CGIPath /bin:/usr/bin:/var/www/cgi-bin
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
然後需要放一個 mime.types 檔案在 /etc,我是直接複製 ubuntu [...]

九月18

S3C2410 RTC Driver 問題

在 Linux 系統中的時鐘,可分為硬體時鐘及系統時鐘。硬體時鐘可以依賴輔助電源(電池)持續累計時間;而系統時鐘則每次重新啟動就會重置,所以一般 Linux 在開機時會做個和硬體時鐘同步的動作(hwclock -s),但是在 Embedded Linux 中是要手動操作的。
首先必須正確驅動 S3C2410 的 RTC(Real-Time Clock) 模組才能使用 hwclock 指令,Linux 2.6.10 版本之後應該都有內建驅動,不過在 2.6.14.7 版本中有些問題,會跑出 Segmentation fault 訊息,需要作以下修改。
1. 重新編譯 Kernel 選項
# make menuconfig
在 Device Drivers —> Character devices —>
< > Enhanced Real Time Clock Support (不要選擇)
[...]

八月25

Linux 下透過 GPRS 上網

基本需求:

可連上 GPRS 的硬體設備
編譯 Kernel 使其支援 PPP
擁有 pppd、chat 兩個程式
PPP 連線的 script 檔案

1. 可連上 GPRS 的硬體設備
可以是專用的 GPRS Modem 或是手機,不過當然要先配置好相關設定及驅動,我是使用 Wavecom Q2403A 這個 GSM/GPRS 模組透過 com port 來實驗。
2. 編譯 Kernel 使其支援 PPP
# make menuconfig
選擇 Device Drivers —> Network device support —> PPP (point-to-point protocol) support,底下的子項目如果不確定就全選即可。
核心更新後請檢查 /dev/ppp 是否存在,若無可用 mknod /dev/ppp c 108 0 建立。
3. 擁有 pppd、chat 兩個程式
如果是一般 PC 版本應該都已經有內建了;Embedded [...]

八月18

USB 無線網卡驅動移植(ARM)

平台資訊:
核心板:Samsung S3C2410 ARM920T
無線網卡:PCI GW-US54GXS
Linux Kernel:2.6.14.7
Cross Compile:arm-linux-gcc 3.4.1

PCI 所推出的無線網卡大多採用 ZB1211(B) 的晶片,算是滿普遍的一種,所以相容性還不錯,成功移植機率比較大。先到官方下載好網卡的 Linux Driver。
1. 解壓縮檔案
tar zxvf GW-US54GXS_Linux_v2.15.0.0_CE.tar.gz
2. 修改 Makefile
# Cross Compile
CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc
CPP=/usr/local/arm/3.4.1/bin/arm-linux-g++
LD=/usr/local/arm/3.4.1/bin/arm-linux-ld
—————————————————————————-
# 修改 Kernel Source 所在路徑
KERN_26=y
KERNEL_SOURCE=/opt/linux-2.6.14.7
—————————————————————————-
# 修改 MOD_PATH
MODPATH=/opt/linux-2.6.14.7/Modules_install/lib/modules/2.6.14.7
—————————————————————————-
# 修改 KDIR
KDIR :=/opt/linux-2.6.14.7/Modules_install/lib/modules/2.6.14.7/build
—————————————————————————-
存檔離開
3. 開始編譯
make ZD1211REV_B=1
4. 完成
沒錯誤就會得到 zd1211b.ko,將它加入檔案系統並用 insmod 載入即可。
延伸閱讀

Embedded Linux + ARM
Wireless Tools for Linux