gdb インストール

gdb (GNU Debugger) のインストールログです

まず ビルド用のディレクトリに移って

> tar -xzf gdb-6.6.tar.gz
> cd gdb-6.6
> ./configure --prefix=/usr/local --target=i686-linux-gnu
> make

特に問題なく

> su
# make install

インストールバイナリは i686-linux-gnu の接頭辞が付いてるので

# cd /usr/local/bin
# ln -s i686-linux-gnu-gdb gdb
# ln -s i686-linux-gnu-gdbserver gdbserver
# ln -s i686-linux-gnu-gdbtui gdbtui
# cd /usr/local/man/man1
# ln -s i686-linux-gnu-gdb.1 gdb.1
# ln -s i686-linux-gnu-gdbserver.1 gdbserver.1
# ln -s i686-linux-gnu-gdbtui.1 gdbtui.1

あと 余談ですが gdbには make uninstall がありません

便利補助ツール complete (tcsh)

tcshのプログラマブル補完
tcsh の complete コマンドでシェルの補完機能をカスタマイズできるので概要を紹介します通常シェル(bashやtcshなど)では 「第1引数は コマンドを補完」「第2引数以降は ファイルパスを補完」するのが一般的です。 tcshでは complete コマンドによりこの補完動作をカスタマイズできます。
completeコマンドの一般的な書式は以下のとおりです

complete コマンド 補完方式/パターン指定/補完リスト[:補完リストの絞り条件]/[後置文字/]

補完方式 補完を実施するための条件を指定します p(引数の位置) や n(直前の引数のパターン) などが指定可能です
パターン指定 補完方式に対する目的語です pに対しては番号や*で指定します や nに対しては文字列で指定します
補完リスト 実際に補完される候補リストを指定します (文字列 文字列 …) のように直接文字列を指定したり f(ファイルパス) d(ディレクトリパス) u(UNIXアカウント) などの指定が可能です
補完リストの絞り条件 補完リストに対して絞り条件を指定できます 例えば テキストファイルだけを候補にしたいなら *.txtといった書き方です
後置文字 補完が完了した場合に直後に置く文字列です デフォルトは 半角空白 です
complete file 'p/1/f/'
fileコマンドの第1引数にファイルパスが補完されます
complete cd 'p/1/d/'
cdコマンドの第1引数にディレクトリパスが補完されます
complete basecolor 'p/1/(red blue green)/'
basecolorと入力した次のワードが red か blue か green かの候補が補完されるようになります (basecolorというコマンドは存在しません)
complete echo 'p/1/s/'
echoコマンドの第1引数にシェル変数名が補完されます

tcshの場合 補完候補を表示するには Ctrl+D です
completeの設定を解除するには uncomplete コマンド です

K8V Pro 3rd Eye マザーボードの GbE-LANを Linux2.6系で使う

検証環境

下記の環境で オンボード GbE-LAN の動作を確認しました

CPU Turion64 MT-37 (Socket754)
マザーボード K8V Pro 3rd Eye
NIC VIA Velocity
OS Linux kernel 2.6.11

kernel 2.6.11 では VIA6122 がサポートされていないようで ABIT社提供のドライバを入れました
ドライバはソースコードが提供されていて修正が必要でした 備忘録を兼ねてここにまとめます

ABIT社からドライバを取得

ABIT社のホームページ
から 「マザーボード」「ダウンロード-ドライバ」を選択します

ドライバ選択
続いて マザーボードを選択

ドライバ選択
マザーボード選択
GbEのドライバを選択してダウンロードします

ドライバ選択
ドライバは圧縮ファイルになっていて展開すると linux のディレクトリが
見えるのでこれを Linux上に転送します

ドライバ選択

velocityget.tgz なるファイルがありますが これが ABIT社提供のソースコードです
Linux上で解凍すると 以下のようなファイルが確認できます

root@localhost 1.19 # ls
Makefile        velocity_desc.h  velocity_proc.h   velocityget.ko
kcompat.h       velocity_mac.h   velocity_proc.o   velocityget.mod.c
linux.txt       velocity_main.c  velocity_stats.h  velocityget.mod.o
velocity.h      velocity_main.o  velocity_wol.c    velocityget.o
velocity_cfg.h  velocity_mii.h   velocity_wol.h
velocity_dbg.h  velocity_proc.c  velocity_wol.o

linux.txt の解説ファイルを読むと root 権限にて make installすればよいとのこと

root@localhost 1.19 # make install
head: `-1' option is obsolete; use `-n 1' since this will be removed in the future
make -C /lib/modules/2.6.11/build SUBDIRS=/root/admin/via6122/1.19 modules
make[1]: Entering directory `/usr/src/linux-2.6.11'
head: `-1' option is obsolete; use `-n 1' since this will be removed in the future
  CC [M]  /root/admin/via6122/1.19/velocity_main.o
/root/admin/via6122/1.19/velocity_main.c: In function `velocity_suspend':
/root/admin/via6122/1.19/velocity_main.c:2503: error: 関数 `pci_save_state' に対する引数が多すぎます
/root/admin/via6122/1.19/velocity_main.c: In function `velocity_resume':
/root/admin/via6122/1.19/velocity_main.c:2540: error: 関数 `pci_restore_state' に対する引数が多すぎます
make[2]: *** [/root/admin/via6122/1.19/velocity_main.o] Error 1
make[1]: *** [_module_/root/admin/via6122/1.19] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6.11'
make: *** [default] Error 2
root@localhost 1.19 #

実際には kernel2.6系でエラーが出ます
原因は kernel2.6系では PCIデバイス固有の情報を 退避/復帰 させる
pci_save_state() pci_restore_state() の仕様が変更されているためです

ソースコードの修正

修正範囲はそれほど大きくないので パッチを提供するよりは
直接エディッタで修正したほうが早いです

velocity_main.c その1

修正前はこんな感じです

   2493 static int
   2494 velocity_suspend(struct pci_dev *pcid, u32 state)
   2495 {
   2496     PVELOCITY_INFO pInfo = pci_get_drvdata(pcid);
   2497     struct net_device *dev = pInfo->dev;
   2498     unsigned long flags;
   2499
   2500     netif_stop_queue(dev);
   2501     spin_lock_irqsave(&pInfo->lock, flags);
   2502
   2503     pci_save_state(pcid, pInfo->pci_state);
   2504
   2505 #ifdef ETHTOOL_GWOL
   2506
  

以下のように修正加えます

   2493 static int
   2494 velocity_suspend(struct pci_dev *pcid, u32 state)
   2495 {
   2496     PVELOCITY_INFO pInfo = pci_get_drvdata(pcid);
   2497     struct net_device *dev = pInfo->dev;
   2498     unsigned long flags;
   2499     /* modified for kernel2.6 */
   2500     int i;
   2501
   2502     netif_stop_queue(dev);
   2503     spin_lock_irqsave(&pInfo->lock, flags);
   2504
   2505     /* modified for kernel2.6 */
   2506     /* pci_save_state(pcid, pInfo->pci_state); */
   2507     /* save to pci_dev.saved_config_space directly... */
   2508     for ( i = 0; i != 16; i++ )
   2509         pcid->saved_config_space[ i ] = pInfo->pci_state[ i ];
   2510     pci_save_state(pcid);
   2511
   2512 #ifdef ETHTOOL_GWOL
  

velocity_main.c その2

修正前はこんな感じです

   2530 static int
   2531 velocity_resume(struct pci_dev *pcid)
   2532 {
   2533     PVELOCITY_INFO pInfo = pci_get_drvdata(pcid);
   2534     unsigned long flags;
   2535     struct net_device *dev = pInfo->dev;
   2536
   2537     pci_set_power_state(pcid, 0);
   2538     pci_enable_wake(pcid, 0, 0);
   2539
   2540     pci_restore_state(pcid, pInfo->pci_state);
   2541
   2542     mac_wol_reset(pInfo->pMacRegs);
  

以下のように修正加えます

   2537 static int
   2538 velocity_resume(struct pci_dev *pcid)
   2539 {
   2540     PVELOCITY_INFO pInfo = pci_get_drvdata(pcid);
   2541     unsigned long flags;
   2542     struct net_device *dev = pInfo->dev;
   2543     /* modified for kernel2.6 */
   2544     int i;
   2545
   2546     pci_set_power_state(pcid, 0);
   2547     pci_enable_wake(pcid, 0, 0);
   2548     /* modified for kernel2.6 */
   2549     /* pci_restore_state(pcid, pInfo->pci_state); */
   2550     pci_restore_state(pcid);
   2551     /* restore from pci_dev.saved_config_space directly... */
   2552     for ( i = 0; i != 16; i++ )
   2553         pInfo->pci_state[ i ] = pcid->saved_config_space[ i ];
   2554
   2555     mac_wol_reset(pInfo->pMacRegs);
  

動作確認

下記のように動作確認を行います

root@localhost 1.19 # make install
head: `-1' option is obsolete; use `-n 1' since this will be removed in the future
make -C /lib/modules/2.6.11/build SUBDIRS=/root/admin/via6122/1.19 modules
make[1]: Entering directory `/usr/src/linux-2.6.11'
head: `-1' option is obsolete; use `-n 1' since this will be removed in the future
  CC [M]  /root/admin/via6122/1.19/velocity_main.o
  LD [M]  /root/admin/via6122/1.19/velocityget.o
  Building modules, stage 2.
  MODPOST
  LD [M]  /root/admin/via6122/1.19/velocityget.ko
make[1]: Leaving directory `/usr/src/linux-2.6.11'
mkdir -p /lib/modules/2.6.11/kernel/drivers/net
install -m 644 -o root velocityget.ko /lib/modules/2.6.11/kernel/drivers/net
/usr/sbin/depmod -a || true
root@localhost 1.19 #
  

モジュールのコンパイルとインストールは成功しました

root@localhost deer # modprobe velocityget
root@localhost deer # ifconfig eth0 192.168.0.3 up
root@localhost deer #
root@localhost deer # ifconfig eth0
eth0      リンク方法:イーサーネット  ハードウェアアドレス **:**:**:**:**:**
          inetアドレス:192.168.0.3 ブロードキャスト:192.168.0.255 マスク:255.255.255.0
          inet6アドレス: fe80::250:****:****:****/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:142 errors:0 dropped:0 overruns:0 frame:0
          TX packets:108 errors:0 dropped:0 overruns:0 carrier:0
          衝突(Collisions):0 TXキュー長:1000
          RX byteUse of uninitialized value in scalar chomp at /home/deer/.emacs.d/mapae-0-10-20051017/mapae.pl line 514.
Use of uninitialized value in scalar chomp at /home/deer/lisp/mapae.pl line 514, <> line 271.
s:7073 (6.9 Kb)  TX bytes:7727 (7.5 Kb)
          割り込み:10 ベースア?Use of uninitialized value in scalar chomp at /home/deer/lisp/mapae.pl line 514.
疋譽?:0xb800

root@localhost deer #
root@localhost deer # lsmod
Module                  Size  Used by
velocityget            52768  0
nvidia               3917116  12
root@localhost deer #
  

モジュールのロードに成功しました 通信できることまで確認します

root@localhost deer # rmmod velocityget
root@localhost deer # ifconfig eth0
eth0: error fetching interface information: デバイスが見つかりません
root@localhost deer # lsmod
Module                  Size  Used by
nvidia               3917116  12
root@localhost deer #
  

モジュールのデタッチも正常に行われることを確認します

インストール

velocitygetモジュールは カーネルモジュールです
Linuxデストリビューションにより設定方法は異なりますが
Gentooベースの環境で /etc/modules.autoload に書き加えました

#
# Note that this file is for 2.6 kernels.
#
# Add the names of modules that you'd like to load when the system
# starts into this file, one per line.  Comments begin with # and
# are ignored.  Read man modules.autoload for additional details.

# For example:
# 3c59x
velocityget
nvidia
  

再起動してネットワークが使えていれば完了です

最新の情報1

最新のカーネルソースでは velocitygetのドライバが提供されているので上記作業は不要です (Linux kernel 2.6.17 で確認)

最新の情報2

VIA Velocity のドライバはどうやら IEEE802.1Q VLANで通信ができない模様
こちらの環境でも確認しました (Linux kernel 2.6.19.1 で確認)
いろいろ確認したのですが
・0x8100 TPID での受信が不可能のようだ
・0x9100 TPID に変更すると通信できた (include/linux/if_ether.h の修正が必要)
・もしくは ここの情報ページにて カーネルパッチが公開されています