Home / Linux boot のお勉強

(2015-3-29)
ローダーは置いといて、その後の流れから。

Linux boot のお勉強

←昔こんな本を購入し、やってみようかと思いつつ読んでいたが、あれよあれよと月日が流れてしまった。
カーネル2.4/2.6頃の本なので細部の内容はもう合わなくなっているが、過去を追ってみるのも良い勉強に思う。

因みにこの本の元になったような古めの記事が今でも残っている。
自分Linuxを作り出せ
2008年9月時点、2.6.26.5 との事。所持していないが↑のよりは新しい。
日経BP社 (2013/4/17):Ubuntu 対象が多い。Tips 的記事多し。4章に10頁程 USB メモリ起動の Linux 作成記事有り。



grub.conf

USBフラッシュメモリへインストールしたものより:
なお、忘れかけているが確か SATA ハードディスクが存在する(インストール先に指定可能な)状態でインストール作業を進めたので USB メモリは sdb となっていたと思う。
grub インストール場面では順序を変える操作で USB メモリへ配置する事が出来た。

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sdb2
#          initrd /initrd-version.img
#boot=/dev/sdb
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux Server (2.6.18-8.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-8.el5 ro root=LABEL=/
        initrd /initrd-2.6.18-8.el5.img

黄色マーカー部が注目すべき処か…。
/dev/sdb なのに (hd0,0) で良い処は良く判らない…

initrd

VM環境にインストールしておいた RHEL5 の initrd を見てみる。
適当な場所へコピーしてから展開して見る。一応、USBフラッシュメモリへのインストール/起動も考えて、異なる点も調べている。

# gunzip < initrd-2.6.18-8.el5.img | cpio -i
# tree
.
|-- bin
| |-- insmod
| |-- modprobe -> /sbin/nash
| `-- nash
|-- dev
| |-- console
| |-- mapper
| |-- null
| |-- ptmx
| |-- ram -> ram1
| |-- ram0
| |-- ram1
| |-- rtc
| |-- systty
| |-- tty
…途中略
| `-- zero
|-- etc
|-- init
|-- lib
| |-- ahci.ko
| |-- ehci-hcd.ko
| |-- ext3.ko
| |-- jbd.ko
| |-- libata.ko
| |-- ohci-hcd.ko
| |-- scsi_mod.ko
| |-- sd_mod.ko
| `-- uhci-hcd.ko
| `-- usb-storage.ko ... USBフラッシュメモリにインストールした場合に入る。
|-- proc
|-- sbin -> bin
|-- sys
`-- sysroot

実は Ubuntu 12 も見たのだが、それに比べると随分あっさりしている。 さて init スクリプトを見ると

1: #!/bin/nash
2:
3: mount -t proc /proc /proc
4: setquiet
5: echo Mounting proc filesystem
6: echo Mounting sysfs filesystem
7: mount -t sysfs /sys /sys
8: echo Creating /dev
9: mount -o mode=0755 -t tmpfs /dev /dev
10: mkdir /dev/pts
11: mount -t devpts -o gid=5,mode=620 /dev/pts /dev/pts
12: mkdir /dev/shm
13: mkdir /dev/mapper
14: echo Creating initial device nodes
15: mknod /dev/null c 1 3
16: mknod /dev/zero c 1 5
17: mknod /dev/systty c 4 0
18: mknod /dev/tty c 5 0
19: mknod /dev/console c 5 1
20: mknod /dev/ptmx c 5 2
21: mknod /dev/rtc c 10 135
22: mknod /dev/tty0 c 4 0
…途中略
38: mknod /dev/ttyS3 c 4 67
39: echo Setting up hotplug.
40: hotplug
41: echo Creating block device nodes.
42: mkblkdevs

43: echo "Loading uhci-hcd.ko module"
44: insmod /lib/uhci-hcd.ko ... USB1.1
45: echo "Loading ohci-hcd.ko module"
46: insmod /lib/ohci-hcd.ko ... USB1.1
47: echo "Loading ehci-hcd.ko module"
48: insmod /lib/ehci-hcd.ko ... USB2.0
49: mount -t usbfs /proc/bus/usb /proc/bus/usb



50: echo "Loading jbd.ko module"
51: insmod /lib/jbd.ko ...................... ジャーナリング利用。ext3.ko より先である事。
52: echo "Loading ext3.ko module"
53: insmod /lib/ext3.ko ..................... Ext3 ファイルシステム
54: echo "Loading scsi_mod.ko module"
55: insmod /lib/scsi_mod.ko ................. SCSI デバイスの核
56: echo "Loading sd_mod.ko module"
57: insmod /lib/sd_mod.ko ................... これも SCSI?


USBフラッシュメモリにインストールした場合、ここから
     58 echo "Loading usb-storage.ko module"
     59 insmod /lib/usb-storage.ko .......... USB接続ストレージ
     60 echo Waiting for driver initialization.
     61 stabilized /proc/bus/usb/devices
ここまで追加。

62: echo "Loading libata.ko module"
63: insmod /lib/libata.ko
64: echo "Loading ahci.ko module"
65: insmod /lib/ahci.ko
66: echo Waiting for driver initialization.
67: stabilized --hash --interval 250 /proc/scsi/scsi
68: mkblkdevs
69: resume LABEL=SWAP-sdb3
70: echo Creating root device.
71: mkrootdev -t ext3 -o defaults,ro sdb2


72: echo Mounting root filesystem.
73: mount /sysroot
74: echo Setting up other filesystems.
75: setuproot
76: echo Switching to new root and running init.
77: switchroot

さて nash とは?

# bin/nash
(running in test mode).
Red Hat nash version 5.1.19.6 starting

ん?これ起動時にコンソールに出てる奴。
nash って何だろうと思っていたが、これだったのか…
因みに man nash は古いようで「script interpretor to interpret linuxrc images」となっている。
調べると昔のスクリプトは linuxrc だったそうな。

setquiet を呼んでいるのに echo を連発しているのはコメント代わりなのだろうか…
必要な時には setquiet を消してデバッグ出来るので良い。

黄色マーカー部はデバイス/パーティションに拠って変更せねばならない。

nash を詳しく知るには

どうやらソースを見るしか無さそう。
RHEL5 では mkinitrd に含まれているそうで、mkinitrd-5.1.19.6-1.src.rpm をダウンロード。
ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Server/en/os/SRPMS/

RPMパッケージからファイルを取り出す。次を参考に適当な場所へ展開。
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/522rpmcpio.html
$ mkdir work
$ cd work
$ rpm2cpio ../smartmontools-5.23-1.i386.rpm | cpio -id


Home / Linux boot のお勉強


© 2008 usskim    http://usskim.web.fc2.com/
inserted by FC2 system