
Ubuntu日本語フォーラム

ログインしていません。
毎度お世話になっております。
Lavie Light BL330/WA6B(UbuntuとWin7のデュアルブート)を使っています。
このパソコンの内臓SDHCカードドライブを使ってSDHCカード内にあるUbuntu9.10を起動させたいと思っています。
しかしこのコンピューターは、SDHCカード内OSをbiosレベルでブートできないようなので、
ハードディスク内のgrub2を経由してこれを起動させようと考えています。
そこでgrub2のOS選択画面において、update-grub2コマンドによって作成されたSDHCカード内Ubuntuの選択肢を選択したのですが、
「error: no such device (パーティションID)」と出てきて起動できません。
この原因はgrub2がSDHCカードを認識していないからかと推測し、grub2プロンプトから「ls -l」を実行すると
やはり内蔵HDDしか列挙されませんでした。
device.mapを調べてみましたが、どうやらSDHCカードは「/dev/mmcblk○○」という形で認識されており、
「/dev/sda」などと比べ特別扱いのようでした。
なので、SDHCカードを操作するモジュールをgrub2内でinsmodしなければならないのでは、と現段階で推測しています。
そこで「/boot/grub」を調べてみたのですが、「sdhci.mod」や「mmc_block.mod」みたいな物はありませんでした。
何かgrubからSDHCカードを認識するモジュールはありませんでしょうか。
もしくは、なんとかしてSDHCカードからUbuntuを起動する手段はありませんでしょうか。
御意見等々あれば、よろしくお願いいたします。
余談ですが、SDHCカード上のUbuntuを使う理由としては、SDHCカードをSSD代わりに使う為です。
また、かさばるのでなるべくUSB-SDリーダライタを使わずにやりたいと思っています。
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
kiyopさん
早速のご返事、助かります。
参考URLのぶんについては、今回の問題とは別問題だと高を括っていたのですが、今全部読みました。
加えて、grub2はinitrdから完全独立しているものだと高を括っていたのですが、早速ご指示頂いた分を試してみます。
状況により、kexec-loaderかkexec-toolsも試してみたいと思います。
ありがとうございます。
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
kiyopさん
grub2はinitrdから独立している、ということで当たってたんですね。
しかし、そうであるとすればinitrdを再構築しても、
「grub2がSDHCカードの存在を認知しない」という問題を解決できないのではないでしょうか...
初心者なもので、勝手なこと言ってすみません。
とにかくすぐ、initrdを再構築してまいります。
(余談ですが、kexec-loaderもSDHCカードを認識しないみたいです)
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
fctrd5さん による投稿:
しかし、そうであるとすればinitrdを再構築しても、
「grub2がSDHCカードの存在を認知しない」という問題を解決できないのではないでしょうか...
grubはカーネルをロードするだけでシステムを起動するのはカーネルですので、grubがSDHCデバイスを認識してもSDHCデバイスのカーネルがSDHCデバイスを認識できなければSDHCデバイスのシステムは起動できません。
オフライン
kiyopさん
大変遅くなりました。
内臓HDDには既にgrub2が入っているのですが、grub4dosのほうが優秀なんでしょうか?
kexec-loaderの件ですが、「iso-modules」にmmc_sd.tlz?のような、見たかんじSDカードを制御できそうなモジュールを入れたのですが、
どうにもsdaやsdbなどしか認識していないようです。
いくつかモジュールの読み込みに失敗していたようなので、それも含めて原因究明したいと思っています。
ちなみに、USB-SDリーダライタを使えば問題なく起動できました。しかし、コンパクトが売りのネットブックの意味が薄まる気がして
少しUSBを使うのをためらっている次第です・・・我慢してこの方法にしようかとも考えています。
jackalope さん
やはりそうなんですね。
grub2用のSDHCデバイス制御モジュールが出現するのを待つしかないのでしょうか...。
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
fctrd5さん による投稿:
grub2用のSDHCデバイス制御モジュールが出現するのを待つしかないのでしょうか...。
PCの電源ONからGrubのOS選択メニューが表示されるまでの概略。
1.BISO
2.MBR
3.GrubのOS選択メニュー表示
GrubのOS選択メニューが表示されて起動したいOSを選択後の概略。
1.linux行のカーネルをロード
2.initrd行のinitrdを実行
3.linux行のroot=で指定されたデバイスを/にマウントしてシステムの起動
initrdがroot=で指定されたデバイスを認識できなければシステムの起動に失敗します。
Grubはgrub.cfgのset root=で指定されたデバイスのgrub.cfgのlinux行で指定したカーネルをロードするだけです。
set root=で指定できるのはBIOSで認識しているデバイスだけです。
仮にctrd5さんのPCのBIOSがSDHCデバイスを認識しGrubがアクセス出来たとしても、initrd行で指定されているUbuntuの標準のinitrdはSDHCデバイスを認識しませんのでシステムの起動に失敗します。
SDHCデバイスを認識するモジュールを組み込んだinitrdを作ればSDHCデバイスからシステムが起動できると思います。
SDHCから起動できないのはGrubと関係ないのが分かっていただけたでしょうか?
オフライン
こんにちは。
grub2用のSDHCデバイス制御モジュールが出現するのを待つしかないのでしょうか...。
GRUB2には、BIOS以外のいくつかのハードウェア用のデバイスのモジュール(※)も存在するには存在するのですが、あまり旨みがないと思われるので、基本的にはサポートされることは無いような気がします。
# BIOSにサポートされずに接続可能なデバイスは、USB-HDDを除くと、ポータブルであることに利点があるものがおおく、内蔵HDDや起動用CDなどの別途起動するための準備が必要となると、選択肢から外れてしまうことが多い・・・と思われるため。
※ATA(IDE)とか、USB Mass Strage(USB-HDD)とか。後者はともかく、前者をBIOSでサポートしていないケースは聞いたことが無いですが・・・
それはとりあえずおいといて・・・
GRUB2でのUbuntu(Linux?)の起動する場合での、チェックポイントは、以下の5点に成るかと思います。
1.BIOSから起動するとき、アクセスできるかどうか。
2.GRUB2が追加のモジュールとメニューを表示する為に(いわゆる/bootが存在するパーティションに)アクセスできるかどうか。
3.環境が整ったGRUB2が起動するOS(Linux)のカーネルイメージとinitrdが格納されているデバイス(パーティション内の該当ファイル)にアクセスできるかどうか。
4.initrdに閉じた中(つまり、3で取得した環境)でOS自身(のいわゆる/パーティション)のパーティションにアクセスできるかどうか。
5.環境が整ったOSがデバイス/パーティションにアクセスできるかどうか。
1と2がうまく行くと、GRUB2のOSを選択するメニューが表示されるところまで進むことになります。
3と4がうまく行くと、晴れて対象のOSが起動できる・・・ということになります。
1がハード構成の機能の問題。
2と3がGRUB2の環境/機能の問題。
4と5が起動しようとしているOSの環境としての問題。
LiveCD等で起動した環境は、5を試すことになります(4のチェックが抜ける為、OS環境は全部OK・・・とは成らない)
「ハードディスク内のgrub2を経由してこれを起動」(fctrd5 さん)は、1もしくは1と2を補助(回避?)する方法(2が含まれるかどうかは、/boot/grub内に相当するな用をどこに配置したかによる)
「grub4dos」(kiyop さん)は、1と2を回避する方法。Windowsのブートメニューを用いて1を回避し、/boot/grub相当をNTFSやFAT/32のパーティションに間借り(?)をすることで2を回避できる。
「kexec-loaderかkexec-toolsも試してみたいと思います。」(fctrd5 さん)は、3を補助(回避)する方法。
「カーネル(/boot/vmlinuz-・・・)とinitramfs(/boot/initrd.img-・・・)は、BIOSが認識できるメディア(例えば、内蔵HDDやCD-R)に書き込み(コピー)しておく必要があります。」(kiyop さん)は、3を回避する方法。
「kexec-loaderで呼び出されたUbuntuのカーネルとinitramfsがSDHCカードを認識できないと、結局 Ubuntuは起動できませんから、initrd.imgにSDHCカードを読み込めるものを組み込んでうまく認識させるように initを変更するなどのことが必要かもしれません。」(kiyop さん)が、4に関する指摘(回避する方法)。
・・・・だと思います。
# ところで、Ubuntuのルートパーティションは、どの時点で認識できる必要があるのでしょうか?3の時点でGRUB2から?4の時点でinitramfs構成から?
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
おそらく ですが。
とりあえず、MMC関連をみんな組み込んでみよう と言う場合、
./kernel/drivers/mmc/
の下は全部 と考えた置いた方が安全かと思います。hostの下には、結構、ファイル名にmmcやsdhを含まないものがあるのではないかと思うのですが、それらも、個別のチップに対応したドライバの一部と考えられる為です。
# ほんとは、実際に使っているチップの1つ(とその依存ファイル)があればよいんですが・・・
実際には、朝ぐらいの時点で書かれている通り、
./core/mmc_core
共通のコアなので。mmc使うなら必須?
./card/mmc_block
ブロックデバイスとして使いたいので。
./host/sdhci-pci
最近は大抵PCIインターフェースで利用できるようにしているらしい。
./host/sdhci
sdhci-pciが依存しているため、sdhci-pciを使うなら、一緒に必要。
と、思います。
./host 以下のファイルは、各ハード環境ごとに異なる可能性があるため、上記でうまく行かない場合は、LiveCD等から起動し実際に使用されているカーネルモジュールを確認してみる(lsmodやdmesgか/proc?)か、とりあえずみんな入れとく(./host/*)のいずれかを試すのがよいかなぁ と思うところです。
# なお、mmc_coreの.koが見当たらない件なんですが・・・カーネルのモジュールはいまいち良く分かりませんが、ひょっとして、静的リンクされているために、.koのファイルは無い ということは無いでしょうか?と、すると、「ファイルがある環境ではこのモジュールも必要。無い環境は、おそらく静的リンクなのでそのままでよい」ということかと思います。
オフライン
こんばんは
どこのURLをみても"SD(SDHC、SDXCもふくめて)はLinuxでは対応しない”とかかれています。
(http://ja.wikipedia.org/wiki/SD%E3%83%A … C%E3%83%89)
直接ドライブとして認識できるのはWindowsとFreeBSDだけです。そのFreeBSDもmmcとして見えるのはSDだけで、SDHC以上は認識されないと思いますが、私は確認していません。
USBは特許が公開されているので、どのPCでも利用できるようになっています。ですので、USB-SDリーダライタを使えばMassStrageとして読み込まれますので、利用可能です。そこで、(SDリーダーがUSB接続の)EeePC901は使えます。(http://tie2.dip.jp/~tie2/EeePC/EeePC_hack_cf.html)
しかし、これではCPRMや次のCPXMには対応できませんので、普通のPCはPCIex接続になっています。
LinuxでもSDドライバーは完成しているようですが、DVDレコーダーに使われているLinuxを除いて、一般のデストリでは特許問題とCPRM問題がからんでいるので、実装されないでしょう。SDをDVD代わりに使おうという意図で普通のPCやらDVDレコーダなどに実装されているそうです。
それから、*.koはカーネルモジュールドライバですので、(確か?)カーネルが読み込まれ、起動できないと読み込めませんので、その前の段階の起動ドライブにするのは無理です。
推測が多くてすみませんが、地デジと同じく、仕様が非公開の部分か多いので、こんな書き方になってしまいました。
オフライン
weykさん
「1.BIOSから起動するとき、アクセスできるかどうか。」
この時点でgrub2がSDHCカード認識していない状態だったのですね。
どうにもpci-expressを介している為?か、SDHCが特別扱いのようで、
起動させるのは難しいということなのですね。
jackalopeさん
「set root=で指定できるのはBIOSで認識しているデバイスだけです。」
この御言葉はありがたいです。
grub2や起動させたい対象のUbuntu等をいじり倒すことを諦めて、grub2より賢いブートローダー(kexec-loaderなど?)を
中心に模索する方針に固めたいと思います。
kiyopさん
皆様から頂いた意見を参考に、kexec-loaderのみに尽力していこうかと思います。
しかしながら、kexec-loaderが初期化した直後、モジュール読み込みエラーが大量に出るという問題に直面しています。
(御指示の通り、全モジュールファイルをiso-modulesに入れたにもかかわらず)。
ので、kexec-loaderに用意されているモジュール機構(iso-modulesフォルダ関係)を用いる代わりに、
もうkexec-loaderのinitrd.imgに直接mmc-block.koなどを封入してしまおうか、と考えています。
しかしkexec-loaderのinitrd.imgはフォーマットが特殊な為かいじれないので、もう少し思案してみたいと思います。
funatogawaさん
私の使っているUbuntuでは、起動さえしてしまえば一応SDHCカードは認識されますよ。
ただし、普通はデスクトップにフラッシュメモリのようなアイコンが出現するはずですが、
SDHCカードのようなアイコンが出現してきます。
この時点でもう、SDHCがMassStorageなんかとは違う扱われ方なんだと見えます。
忙しいこともあり返信が遅くなってすみません。皆様大変ありがとうございます。
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
funatogawaさん による投稿:
それから、*.koはカーネルモジュールドライバですので、(確か?)カーネルが読み込まれ、起動できないと読み込めませんので、その前の段階の起動ドライブにするのは無理です。
これはどのメッセージに対するコメントでしょうか?
オフライン
kiyopさん
いつもお世話になっております。
初心者なもんでまた変なこと言っているかもしれませんが、
「Grub2が認識できるメディアのパーティション内にコピーすれば、kexec-loaderは要りません。」
について、SDHCを「Grub2が認識できるメディア」としたらしめる方法がやはり出てきそうにありません。
根本的にBIOSがSDHCを認識していないようです。
皆様の意見を元にこれを言い換えると、grub2がSDHCを認識していないようです(その証拠に、grub2の認識デバイス列挙コマンドlsを使ってもSDHCがでてこない)。
「kexec-loaderで呼び出されたUbuntuのカーネルとinitramfsがSDHCカードを認識できないと、結局 Ubuntuは起動できません」
ということは、言い換えれば、
「kexec-loaderで呼び出されたUbuntuのカーネルとinitramfsがSDHCカードを認識しさえすれば Ubuntuは起動する」
ということですよね。諦めてUSB-SDリーダライタに行く前に、最後の手段として一番手軽そうなkexec-loaderに取り組みたいと思います。
kiyopさんが仰る通り、kexec-loaderの設定のミスがあるかもしれません。
しかしながら、今日から1週間ほど忙しくなりますので、来週くらいにまた試してみたいと思います。
ありがとうございました。
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
fctrd5さん による投稿:
SDHCを「Grub2が認識できるメディア」としたらしめる方法がやはり出てきそうにありません。
...
諦めてUSB-SDリーダライタに行く前に、最後の手段として一番手軽そうなkexec-loaderに取り組みたいと思います。
SDHCカードのUbuntuを起動するのはGrubではなくカーネルですのでGrubがSDHCデバイスを認識するしないは関係ありません。
kexec-loaderもGrubと同じカーネルローダーですのでkexec-loaderでSDHCデバイスを認識させても、SDHCカードからロードされるinitrdを変えなければSDHCカードのUbuntuを起動できません。
私の所には検証する環境がありませんのでinitrdを作り直せばSDHCカードのUbuntuを起動できる保証はできませんが、PC本体のSDHCカードドライブに挿入したカードからUbuntuを起動したいのであればinitrdを作り直す方法を試して下さい。
手順:
1.デュアルブートのUbuntuを起動
2.端末を起動して、lsmodを実行
3.SDHCカードをセットして、lsmodを実行
lsmodの結果を比較して新たにロードされたモジュールを確認します。
上記以外で、/lib/modules/$(uname -r)/kernel/drivers/mmc/以下にあるモジュールがロードされていないか確認します。
4.fdisk -lを実行してSDHCカードの/のデバイス名を確認します。
以下の様な表示では/dev/mmcblk0p1が/のデバイス名です。
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 * 1 1861 14948451 83 Linux
/dev/mmcblk0p2 1862 1949 706860 5 Extended
/dev/mmcblk0p5 1862 1949 706828+ 82 Linux swap / Solaris
5. 3.で確認したモジュールを、/etc/initramfs-tools/modulesに追加します。
6.新しいinitrdを作ります。
cd ~
mkinitramfs -o initrd.gz
7.カーネルとinitrdを/boot以下にコピーします。
sudo mkdir -p /boot/sdhc
sudo cp ~/initrd.gz /boot/sdhc
SDHCカードの/boot以下のvmlinuz-xxxxを/boot/sdhcにファイル名vmlinuzでコピーします。
xxxxの所はuname -rの結果の物にします。
8. /etc/grub.d/40_customを以下のように編集します。
#!/bin/sh
exec tail -n +3 $0
menuentry "Ubuntu on SDHC card" {
insmod ext2
set root=(hd0,2)
linux /boot/sdhc/vmlinuz root=/dev/mmcblk0p1 ro quiet splash
initrd /boot/sdhc/initrd.gz
}
set root=で指定するデバイス名は/boot/grub/grub.cfgで確認します。
linux行のroot=で指定するデバイス名は4.のfdisk -lで確認した物です。
9.SDHCのUbuntuを起動するgrub.cfgを作ります。
sudo update-grub
10.SDHCカードをセットしたまま再起動しGrubのOS選択メニューで"Ubuntu on SDHC card"を選択。
オフライン