次のページ 前のページ 目次へ

7. 付録:便利なスクリプトとその他の情報

7.1 Fixscript: バイナリモジュールのカーネルバージョン情報の変更 (Mark Spieth)

以下のスクリプトは、モジュールのカーネル・バージョン情報を編集して、実行 カーネルと一致させます。 これは、実際にはカーネル API の矛盾を修正するためのモジュールコードの アップデートはせず、単に異なるバージョンの下でコンパイルされたモジュール を仮装する、ということに注意してください。 これは、簡素な insmod コールを使って 【訳注:つまり -f フラグで強制しなくても】、警告無しでモジュールの挿入を できるようにしますが、決してモジュールの動作を保証するものではありません。

スクリプトを以下に示しますが、 http://walbran.org/sean/linux/stodolsk/fixscript からダウンロードすることもできます。

スクリプトは chmod +x fixscript のようにして、実行可能にする 必要があることに注意してください。

The script:

#! /bin/bash
# To make this file executable:  chmod +x fixscript
# This is a very slight edit of the ltfixscript contributed to
# the Linmodems Newslist 
#  From - Sun Jul 23 04:27:38 2000
#  From: "Mark Spieth" <mark at  digivation.com.au>
#  To: <discuss@linmodems.org>
#  Subject: ltmodem symbols and version fixed
#  Date: Sun, 23 Jul 2000 12:39:44 +1000
#  Organization: Digivation Pty Ltd

echo "Fixscript V1.21"

if [ -z "$1" -o -z "$2" ]; then
cat <<END
This script changes version number tags of binary
kernel modules to match the version of the currently
running kernel. It also renames any symbol that the
current kernel cannot resolve into their equivalent
resolvable symbols.

For inserting binary modules into kernels, the fixed 

module can be inserted with:
        insmod module
which is used in automated kernel module management,
rather than forcing module loading with:
        insmod -f module
which is necessary when kernel and module versions
are not matched.

WARNING! This change is purely cosmetic, and the use
of version matched binaries whenever possible is
strongly advised. It may crash your kernel due to
inconsistencies in data structures between the kernel
as it stands and the headers used to originally compile
the module being fixed. No guarantees are given or implied
under any circumstances.

GNU objcopy version 2.9.5 or later is required;
this is provided as part of the binary utilities
packages such as the Debian binutils.deb

USAGE: fixscript input-file output-file
END
exit 1
fi

MI=/tmp/modinfo
DI=/tmp/depinfo

#new kernel version modinfo section
echo -ne "kernel_version="`uname -r`"\0" > $MI

#build the objcopy command
CMD="objcopy"
#for i in `depmod -e $1 | grep -vE "^$1:"` ; do
depmod -e $1 2>$DI
AWKSTR=\$2
for i in `awk "{print $AWKSTR}" $DI | grep _R` ; do
 echo doing $i
 i1=`echo $i | awk '{ 
  gsub(/_R[0-9a-fA-F]+/,""); 
  printf("%s", $1); 
 }'`
 echo "i1=" $i1
 echo " trunc=\"$i1\""
 searchstr=$i1"_R"
 echo "searchstr=" $searchstr
 new=`cat /proc/ksyms | grep $searchstr | awk "{print $AWKSTR}"` 
 echo " new=$new"
 CMD="$CMD --redefine-sym=$i=$new"
done

#replace the modinfo section with the new one
CMD="$CMD --remove-section=.modinfo --add-section=.modinfo=$MI"
CMD="$CMD $*"

#run the command
echo "CMD:" $CMD
$CMD


#remove the section file
rm -f $MI
rm -f $DI

7.2 ppp 関連モジュールの挿入と削除の一致 (Marvin Stodolsky)

初期化スクリプト /etc/rc.d/rc.local の最後に

insmod -f ltmodem
を追加することにより、Lucent ドライバのインストール用スクリプトは、 デフォルトでブート時にモジュールがロードされるようになります。 例えば ESS モデムをお持ちなら上記の "ltmodem" を "esscom" に置き換えると ブート時にモジュールが自動的にロードされます。 しかし、初期化スクリプトは Linux ディストリビューションによって異なるの で、あなたの固有の設定に合わせて適切なスクリプトを見つけるか/修正するか/ 作成する、必要があることにご注意ください。

しかし多くのユーザは、必要なときだけ補助モジュールを挿入する 「スリムなカーネル」を実行することを好みます。 以下に、 Lucent winmodem と ltmodem.o ドライバを使ったオンライン・セッシ ョンをスタート、ストップするためのスクリプトの例を示します。 これは、単に "ltmodem" を "YourModemDriver" (あなたがお持ちのモデム用の ドライバ)と入れ替えるだけで、他の多くのドライバにも適用することができます。

Modemup:

#!/bin/sh
# This script inserts the kernel modules supporting
# WinModems using the Lucent   ltmodem.o  module.
# Save as /usr/local/bin/Modemup, then 
#    chmod a+x /usr/local/bin/Modemup
# to make it executable. 
# Since insmod & rmmmod require root permission, permission for an
#  ordinary User must be given under  secure-su  or  sudo.
#
# the ltmodem.o driver must be within /lib/modules/kernl-version/misc
#
# When kernel-source-2.?.?? code becomes available for  ltmodem.o  ,
#    forced "-f" insertion should be removed from the following line:
/sbin/insmod -f ltmodem
# and the complaint about version mis-match will also then disappear.
insmod slhc
# is needed to support ppp
insmod ppp
# if you are using a ppp.o which is not version matched with the kernel
#    insmod -f ppp
# may be necessary instead   
echo Loaded kernel modules are:
lsmod
# An automatic start of the ppp connection is specified 
# by entering the command that starts your online session such as:
#   wvdial, pon,  ppp-on, kppp or
# Whatever
## End Modemup

Modown:

#! /bin/sh
# /usr/local/bin/Modown ends a pppd session and does cleanup.
# Save as /usr/local/bin/Modown, then 
#   chmod a+x /usr/local/bin/Modown
# Starting pppd session related modules are:
#   ppp_deflate            39108   1  (autoclean)
#   bsd_comp                3664   0  (autoclean)
#   ppp                    19916   2  (autoclean) [ppp_deflate bsd_comp]
#   slhc                    4200   1  (autoclean) [ppp]
#   ltmodem               452936   1 
# NOTE THAT ltmodem did NOT acquire autoclean status
echo " "
echo Terminating ppp0 with poff
poff
sleep 1
# is a pause to let the poff process to terminate, after which
/sbin/rmmod ltmodem
# removes ltmodem.o module
echo " "
echo Removed module   ltmodem
# /sbin/lsmod
# echo " "
# echo A pause before removing modules ppp_deflate bsd_comp, then ppp slhc
sleep 1
/sbin/rmmod ppp_deflate bsd_comp
/sbin/rmmod ppp slhc
/sbin/lsmod
# but doesn't remove the sound related modules called up. Thus
echo " "
echo Removing sound related module called by LTmodem, soundcore
echo "  " if not otherwise in use.
/sbin/rmmod soundcore
echo Remaining modules in kernel-`uname -r` are:
/sbin/lsmod
# displays remaining modules
echo " "
## End Modown

7.3 PPP スクリプトの例 (Marvin Stodolsky)

pppconfig による Debian へのインストール用 PPP スクリプトの例を示します:

/etc/ppp/peers/provider:

# This optionfile was generated by pppconfig 2.0.5. 
hide-password 
noauth
connect "/usr/sbin/chat -v -f /etc/chatscripts/provider"
debug
/dev/ttyS14  # port used by the Lucent Winmodem
115200
defaultroute
noipdefault 
user NameAtIP
remotename provider
ipparam provider

/etc/chatscripts/provider:

# This chatfile was generated by pppconfig 2.0.5.
# Please do not delete any of the comments.  Pppconfig needs them.
# 
# ispauth PAP
# abortstring
ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE' ABORT 'NO DIAL TONE' ABORT 'NO ANSWER'
# modeminit
'' ATZ
OK ATQ0V1E1S0=0&C1&D2S11=55+FCLASS=0
# ispnumber
OK-AT-OK ATDT3019178111
# ispconnect
CONNECT \d\c
# prelogin
# ispname
# isppassword
# postlogin
# end of pppconfig stuff

7.4 PCTel モジュールパラメータ: カントリーコード

下記は、PCTel readme ファイルから引用しました。これの私の解釈は、

insmod pctel.o country_sel=7
のようにしなければならないということです (下記に示すあなたの国のカントリーコードに依存します)。 これが動作したら(または動作しなかったら)、私 sean(at)walbran.org に教えて ください。

カントリーコードの設定とレポート

このドライバは、様々な国の電話網のための正しいカントリーコードを設定し たり、どのカントリーコードがセットされているかを報告できるモジュール・ パラメータがあります。 カントリーコードの選択と報告のための 2つのバージョンがあります:

バージョン 1:

  カントリーコードをセットするには:
  "country_sel_rep   sel   7" は、カントリーコードを 7 にセットします。

  現在セットされているカントリーコードを、ドライバにたずねるには:
  "country_sel_rep   rep" は、戻り値として現在のカントリーコードを返します。
バージョン 2:

  カントリーコードをセットするには:
  "country_sel   7" は、カントリーコードを 7 にセットします。

  現在セットされているカントリーコードをドライバにたずねるには:
  "country_rep" は、戻り値として現在のカントリーコードを返します。

country_code    country_name

    1           USA
    2           FRANCE
    3           GERMANY
    4           ITALY
    5           SWEDEN
    6           UK
    7           JAPAN
    8           AUSTRALIA
    9           SPAIN
   10           TAIWAN
   11           SINGAPORE
   12           KOREA
   13           SWITZERLAND
   14           NORWAY
   15           NETHERLANDS
   16           BELGIUM
   17           CANADA
   18           IRELAND
   19           PORTUGAL
   20           POLAND
   21           HUNGARY
   22           FINLAND
   23           DENMARK
   24           AUSTRIA
   25           S.AFRICA
   26           CTR21 COUNTRIES
   27           CHINA
   28           MALAYSIA
   29           LUXUMBURG
   30           GREECE
   31           ICELAND
   32           NEW ZEALAND
   33           BRAZIL


次のページ 前のページ 目次へ