[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:19292] Re: How do I give boot paramenter to boot disk.



佐野@浜松です。

In article <14403.65297.89234.72159A@xxxxxxxxxxxxxxxxx>
 Takashi Shimizu <simtak@xxxxxxxxxxxxxxxxx> さん writes:

> At Tue, 30 Nov 1999 23:40:33 +0900,
> yabuki@xxxxxxxxxxxxxxx wrote:

> > make-kpkg --revision custom.1.hoge kernel_image
> > で、debを作成して、カーネルを入れかえる時に、
> > boot floppyを作ってみました。

> すみません。今やってみたら、同じになりました。
> このとき、boot: プロンプトはでないで、いきなりLoading....になったので
> すが、ddで書きこむようなことをしてるのでしょうか。

インストーラディスクは SYSLINUX を使ってますが、kernel-image-xx の
パッケージをインストールする際に作成されるブートフロッピーは
 dd でカーネルをベタに書いてます。

 /var/lib/dpkg/info/kernel-image-xxxx.postinst を眺めると

sub makefloppy {
  my $answer;
  my $done = 0;
  my $drive = 0;
  
  print <<EO_MSG_A;

This process needs a formatted floppy. Please note that an unformatted
floppy will cause this process to fail, and may well need a reboot to
fix, and unfortunately, the system is not bootable yet.

The first thing to determine is which floppy drive you wish to use.
For most people, the default, which is the the default floppy drive,
referred to as /dev/fd0, or A: would work.  Some people may want the
second floppy drive which is drive 1, or /dev/fd1, or B:. 
(Theoretically there there could be 8 floppy drives on a machine) If
in doubt, accept the default [0], which should work in most cases.

EO_MSG_A

(snip)

  MKBOOT:{
      my $ret;
      if ($loader =~ /lilo/io) {
        if ($no_symlink || $reverse_symlink) {
          $ret = 
            system '/bin/dd', "if=$imagedir" . "$kimage", "of=/dev/fd$drive";
        }
        else {
          $ret = 
            system '/bin/dd', "if=$realimageloc" . "$kimage-$version",  
            "of=/dev/fd$drive";
        }
        last MKBOOT if $ret;
        $ret = system '/usr/sbin/rdev', "/dev/fd$drive", "$rootdevice";
        last MKBOOT if $ret;
        $ret = system '/usr/sbin/rdev', '-R', "/dev/fd$drive", '1';
      }
      else {
        $ret = &silo_floppy( $drive );
      }
      last MKBOOT if $ret;
      $done = 1;
      print "\n";
    }

と書かれています。( system '/bin/dd' に注目)

> どうも間違った情報を流してしまったようです。申しわけありません。
> Liloや、loadlinや、syslinuxを使わないときの、フロッピーブートのkernel
> への引数の渡しかたは、Bootprompt-howtoをちらっと見てみましたが、
> 良くわかりませんでした。

カーネルイメージをベタ書きしたフロッピーだと、ブートオプションを
渡す方法は無いと思います。清水さんが紹介されたようにインストーラ
ディスクを流用するか、あるいは syslinux パッケージをインストール
して、 /usr/doc/syslinux.doc を参照しながら 

In order to create a bootable Linux floppy using SYSLINUX, prepare a
normal MS-DOS formatted floppy.  Copy one or more Linux kernel files to
it, then execute the Linux command:

        syslinux [-s] /dev/fd0

(or, whichever device is the correct one.)

This will alter the boot sector on the disk and copy a file named
LDLINUX.SYS into its root directory.

を実行して、あとは適当に syslinux.conf を編集すれば OK でしょう。

なお syslinux は Linux/i386 限定なので、sparc/alpha/m68k など
サポートしなければいけない Debian ではこれを標準の kernel-image に
入れることには、あまり積極的ではないかもしれません。

 dpkg --print-architecture を使って i386 かどうかを判定し、
その結果 i386 だったら syslinux を使った boot フロッピーを
作成する、ということはできるかもしれませんが、そうすると
 kernel-image をインストールする際、ブートフロッピーを作成する
ためには syslinux パッケージが必須になります。

これは、ユーザーが syslinux を使うかどうか選択できるようにすれば
解決できるかもしれませんが、i386 でしか使わない syslinux パッケージを
 Suggest するのは適当でないという理由で Document にだけ記載しておくと
今度は bin86 みたいに「これが無いと make できないのに依存関係が設定
されていないのは間違っている」とかクレームがつきそうで、なんとなく
イヤかな。

このへん、architecture 独自の部分と、共通の部分をどう分離して、
どう統合するか、まだまだ解決の必要な課題がありそうです。

# architecture によって依存関係を変更することができたらいいな、
# という願望表明です。今の仕様だと、たぶんできないんじゃないか
# と思う。アレ ? もしかしたら debian/rules で control を書き換える
# ようにしたら、できるのかな ? うーむ、、、そういうことをやっている
# 例があるかどうかもわからないな、、、オリジナル (マスター) は別に
# 保存しておいて、build 時に control を自動で編集するか、、、

In article <00b501bf3b92$a7c17240$0d00a8c0@xxxxxxxxxx>
 "yabuki yukiharu" <yabuki@xxxxxxxxxxxxxxx> さん writes:

> とはいえ、最終的な目的は、make-kpkgで作成した
> debファイルが生成するブートディスクにカーネル
> パラメータを渡したい。
> ので、引き続き情報募集中です。linux-usersでもちょっと
> 尋ねてみようかと思います。

もしフロッピーにベタ書きされた linux カーネル自体に
ブートオプションを受け入れるような細工をしたい、という
ことでしたら、arch/i386/boot/bootsect.S をいじる必要が
あります (i386 の場合)。
ここは結構サイズ的にキビシイ (446bytes に収める必要が
ありそう) ので、けっこうたいへんでしょうね。

あるいは、arch/i386/boot/setup.S に入れるという方法も
ありますが、ここは既に LILO や LOADLIN などを経由してきた
後で実行される部分なので、「2 度手間」にならないように
工夫する必要はあるでしょう。一応、どのローダーでロード
されたのかは検出しているようなので、不可能では無いかも
しれません。

type_of_loader: .byte   0               ! = 0, old one (LILO, Loadlin,
                                        !      Bootlin, SYSLX, bootsect...)
                                        ! else it is set by the loader:
                                        ! 0xTV: T=0 for LILO
                                        !       T=1 for Loadlin
                                        !       T=2 for bootsect-loader
                                        !       T=3 for SYSLX
                                        !       T=4 for ETHERBOOT
                                        !       V = version

どっちが楽そうか、と言えば、kernel-package に wishlist して
 /usr/lib/kernel-package/image.postinst (potato 版なら
 /usr/share/kernel-package の下か) に syslinux を選択できるような
 option を入れてもらうほうが作業的には楽なような気もします。

御参考まで。

# 別に「お前がやれ!」って書いてるわけじゃないです。
# 「もしやるとしたら、こんな感じかな。」というヒントを書いている
# だけなので、お間違い無く。もちろん矢吹さんは誤解されることは無い
# でしょうけれど、「見てるだけ」の人が誤解するとアレなので。

-- 
     # (わたしのおうちは浜松市、「夜のお菓子」で有名さ。)
    <xlj06203@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)