Sirius

2010年12月5日(日) 12:27

玄箱HG の Fedora12 にカーネルモジュールの追加

USB 経由で通信カードを使います。Linux につなげたときに ttyACM として認識するカードなら、同じ手順でできると思います。
通信カードは KWINS の KW-S102C、USB への変換は、IO-DATA の USB2-PCADPG を使います。
まず、カーネルモジュールが必要なので、同じカーネルバージョンを用意して、LinkStation/TeraStation/玄箱/PPC/kernel/2.6.30.5を参考に作業をします。

カーネルソースを取得して展開します。
# wget http://ring.maffin.ad.jp/archives/linux/kernel.org/kernel/v2.6/linux-2.6.31.12.tar.bz2
# tar jxvf linux-2.6.30.5.tar.bz2
# mv linux-2.6.31.12 linux-2.6.31.12_kurobox
# cd linux-2.6.31.12_kurobox

コンパイルしたカーネルを使う予定はありませんが、一応、mtd 関係は修正しておきました。
# make linkstation_defconfig
# cp -p ./.config ./.config.orig
# make menuconfig

次に、必要なモジュールは cdc_acm です。
menuconfig でモジュールの定義をして作成しても、カーネルとモジュールのバージョンが異なる(2.6.31.12 と 2.6.31.12_kurobox) ので先にバージョンをカーネルにあわせます。
どこを直せば良いのかよくわかりません。検索して、Makefile を修正して 2.6.31.12_kurobox になるようにしました。

menuconfig で cdc_acm をモジュールに設定して早速コンパイルします。
# make modules

結構時間がかかります。モジュールが作成できたら、drivers/usb/cdc_acm.ko をコピーします。
# cp drivers/usb/class/cdc-acm.ko /lib/modules/2.6.31.12_kurobox/kernel/drivers/usb/class/.
# depmod -a

これで通信カードを USB でつなぐと、cdc_acm モジュールが組み込まれ、/dev/ttyACM0 が使えるようになりました。
次は、ppp の設定です。これらは、GUI を使って設定したほうが楽です。
GUI で設定するには、
# yum install system-config-\*
で設定ツールをインストールして、他の Linux マシンから、X11 を ssh でフォワードしてやればいいと思います。
私は、一度設定したことがあるので、手動でやりました。

設定ファイルを作成します。
/etc/sysconfig/network-scripts/ifup-プロバイダ
ここで、プロトコルやその他の設定を行います。
------------------------ここから---------------------------------
DEVICE=ppp0
BOOTPROTO=dialup
TYPE=Modem
NM_CONTROLLED=no
ONBOOT=yes
USERCTL=yes
PEERDNS=yes
IPV6INIT=no
AC=off
BSDCOMP=off
VJCCOMP=off
CCP=off
PC=off
VJ=off
LINESPEED=115200
MODEMPORT=/dev/ttyACM0
IDLETIMEOUT=600
PROVIDER=プロバイダ
DEFROUTE=yes
PERSIST=yes
PAPNAME=ユーザ名
WVDIALSECT=wvdialでの識別名
MODEMNAME=Modem0
DEMAND=yes
DNS2=セカンド DNS の IP アドレス
DNS1=DNS の IP アドレス
PPPOPTIONS=
------------------------ここまで---------------------------------

ダイヤルアップでの接続をしますので、ppp の設定も必要です。

# yum install wvdial.ppc
でダイヤラーをインストールして、/etc/wvdial.conf にプロバイダ用の設定を作成します。ここにパスワードが記録されます。
------------------------ここから---------------------------------
[Modem0]
Modem = /dev/ttyACM0
Baud = 115200
SetVolume = 0
Dial Command = ATDP
Init1 = ATZ
Init3 = ATM0
FlowControl = XONXOFF
[Dialer 識別名]
Username = プロバイダのユーザ名
Password = プロバイダのパスワード
Phone = 電話番号
Stupid Mode = 1
Init1 = ATZ
Inherits = Modem0
------------------------ここまで---------------------------------

ppp は、 /etc/ppp/peers にプロバイダ名でファイルを作成しました。wvdial を起動するスクリプトです。
------------------------ここから---------------------------------
connect "/usr/bin/wvdial --remotename 識別名 --chat 'プロバイダ名'"
------------------------ここまで---------------------------------

wvdial の識別名はプロバイダ名と同じものを使いました。

# ifup ppp0
としてみました。が、なんと、ppp のモジュールがなかったようです。
必要そうなモジュールをコンパイルして追加しました。
bsd_comp, ppp_deflate, ppp_synctty, ppp_async, ppp_generic, slhc, slip を /lib/modules/2.6.31.12_kurobox/kernel/drivers/net へコピーしました。

# depmod -a
# modprobe ppp_generic
# ifup ppp0
これでつながります。再起動すると自動でつながりました。

大丈夫そうだったので、Alsa の USB-AUDIO もコンパイルして追加しました。
玄音をつないでみたところちゃんと音が出ました。

ロードしているモジュール(mp3 再生中)
# lsmod
ModuleSizeUsed by
snd_usb_audio844922
snd_seq556040
snd_pcm712362snd_usb_audio
snd_timer237923snd_seq,snd_pcm
snd_page_alloc121441snd_pcm
snd_usb_lib19564 1snd_usb_audio
snd_rawmidi247801snd_usb_lib
snd_seq_device101162snd_seq,snd_rawmidi
snd_hwdep112041snd_usb_audio
snd542649snd_usb_audio,snd_seq,snd_pcm,snd_timer,snd_rawmidi,snd_seq_device,snd_hwdep
soundcore93121snd
ppp_deflate86640
zlib_deflate234561ppp_deflate
ppp_async129481
crc_ccitt51481ppp_async
ppp_generic243086ppp_deflate,ppp_async
slhc88641ppp_generic
cdc_acm189562
なんかあっけなく動いています。普通の Fedora ですね。ジュークボックス代わりにもなりそうです。

written by sirius [玄箱] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

Comments

TrackBacks

Sirius

MySketch 2.7.2 written by 夕雨