syslinuxを使ってUEFIで起動するUSBメモリ

Linuxのブートローダといえば今はgrubが多い。EFI対応のgrubもあって設定項目も豊富で動的にパラメータを変更できるのも良い。ただ複雑でややこしい。それにひとたびブートローダが状態を見失うと復帰が結構めんどい。

それに比較してsyslinuxは軽量で、本体は数個のファイルだけでextだけでなくFATやPXEにも置けるし、liloみたいに面倒もないし、個人的にはブートローダとしての理にかなっていると思う。それに最近はUEFIもごく一般的になってるので、重量級で高機能なブートローダって要らない気がする。

で、UEFIを今まで理解しないまま来てしまったので、ブートローダをレガシーなMBRのgrubからUEFIなsyslinuxに変えてみるテスト。実験用環境はUbuntu desktop 10.04TLSが動くものを用意。PCは何台か試したが、Intel ComputeStick以外はすべて64ビットUEFIだった。ComputeStickも設定変更で64ビットUEFIになる。どうやらATOMマシンのうちWin8.1を動かしたいものは32ビットUEFIが標準っぽい。UEFIのビット数は起動したいOSのそれと同じにする必要がある。64ビットUEFIのシステムは32ビットのWindowsやi386なLinuxは起動しない。ここでは64ビットUEFIシステムのみを対象とした。

1.USBメモリを用意

適当なUSBメモリをFAT16かFAT32でフォーマットし、/EFI/BOOT ディレクトリと /linux ディレクトリを作成。パーティション無しのスーパーフロッピー形式、MBR形式でフルに1パーティションどちらでも良い気がするが、MBR形式1パーティションのが安全な気がする。

.

2.syslinuxをダウンロード

http://www.syslinux.org/wiki/index.php/Download からリンクをたどって
https://www.kernel.org/pub/linux/utils/boot/syslinux/ のsyslinux-6.03.zip を落とす。

.

3.64ビットUEFI用のsyslinuxのファイルをUSBメモリに配置

syslinux-6.03.zip の中から syslinux.efi 、ldlinux.e64 を取り出してUSBメモリに置く。
(syslinux)/efi64/efi/syslinux.efi を (USB)/EFI/BOOT/bootx64.efi にリネームコピー、
(syslinux)/efi64/com32/ldlinux.e64を (USB)/EFI/BOOT/ にそのままコピー、

.
4.LinuxカーネルをUSBメモリに配置
実働環境の (ubuntu)/boot/ から vmlinuz と initrd をUSBメモリの適当なところに持ってくる。

(ubuntu)/boot/vmlinuz-3.19.0-25-generic を (USB)/linux にコピー。
(ubuntu)/boot/initrd.img-3.13.0-65-generic を (USB)/linux にコピー。

※ここでは /linux にしたがsyslinux.cfgで指定するのでEFIパーティション内ならどこでも良い。/boot や /EFI/boot に置きたい人もいるだろう。その場合はsyslinux.cfgを合わせて変更すること。現行のsyslinuxでは別パーティションのファイルは参照できないので注意。将来はできるようになるかもしれない。

.
5.設定ファイルを作成
次のような内容で(USB)/EFI/BOOT/syslinux.cfg を作成。UUIDは適当なので、実際は実働環境の /dev/disk/by-uuid とかを確認する。syslinux.cfgは (USB)/EFI/boot/syslinux/ とか (USB)/ とか (USB)/syslinux/ に置いても良いはず。読みに行く順番があるので複数置くと最初に読まれたものだけが処理される。

## syslinux.cfg ここから ##

SAY uefi syslinux config
PROMPT 1
TIMEOUT 30
DEFAULT linux64

LABEL linux64
KERNEL /linux/vmlinuz-3.13.0-65-generic
APPEND ro initrd=/linux/initrd.img-3.13.0-65-generic root=UUID=00183394-08dc-4c70-bfad-57af39255555

## ここまで ##

※UUIDの値は cat /proc/cmdline とか /dev/disk/by-uuid/* とかを参考にする。

終わり。

ここまでで、USBメモリのファイル構成は次のようになる。
(USB)
/EFI/BOOT/bootx64.efi     ← 64ビットUEFI用のsyslinux.efiをリネームしたもの
/EFI/BOOT/ldlinux.e64     ← 64ビットUEFI用のsyslinuxに入っているものそのまま
/EFI/BOOT/syslinux.cfg    ←環境にあわせて作るテキストファイル
/linux/vmlinuz-3.19.0-25-generic     ←動いている環境から持ってきたカーネルイメージ
/linux/initrd.img-3.13.0-65-generic   ←動いている環境から持ってきた初期RAMディスクイメージ

あとはこのUSBメモリをPCに差し込んで起動するだけ。PCのBIOS設定でBOOT方法でUEFIを使うようにしておくこと。Linuxの本体(ルートファイルシステム)が入っていないとinitrdの途中で止まるが、USBメモリから起動できることは確認できる。ここまで確認できれば後はsyslinuxのモジュールを追加したりLinuxの起動パラメータを変更して本体が動くようにしたりできると思う。起動順序は解説無しでもわかると思うくらい簡単で、

1.UEFIが/EFI/BOOT/bootx64.efiを見つけるとそれを読み込んで実行。
2.bootx64.efiはsyslinux本体なのでそれが同じところにあるldlinux.e64を読み込んで
3.syslinux.cfgを同じディレクトリに見つけるので解釈して実行。
4.syslinux.cfgにはカーネルとRAMディスクのイメージの場所が書いてあるので
それらを読み込んでシステム起動。

非常にシンプルで良い。ここで重要なのはUEFIが読みにいくファイル名が /UEFI/BOOT/bootx64.efi であることと、syslinux.efi(bootx64.efi)がldlinux.e64を必要としていること。

ここまでの手順で感の良い人ならWindowsのインストールディスクからFAT32でフォーマットしたUSBメモリにファイルをコピーするだけでUSB起動メディアができる理由が分かると思います。UEFIではMBR形式で必須の起動可能フラグとかブートセクタとかIPLとか要らない ので、MBRでもUEFIでもどちらでも起動できるようにするというのでなければ不要です。 UEFI的にはあたりまえなんですが知らない人もまだまだ多いです。

UEFIブートに関してisolinuxのほかに、efilinuxでも成功しているのだけどUbuntuのパッケージで入れるとなぜか動かなくてソースからビルドする必要があるのと/EFI/BOOT/startup.nshから起動するためにUEFI Shellが必要なので手順がかなり異なる。これについては後日掲載予定。

ちなみにUEFI用のsyslinuxからは他のUEFIアプリケーションを起動できない。いったんsyslinuxが起動したらUEFIアプリをチェインロードすることはできないので他OSとのマルチブートはUEFIシェルでスクリプトを組むかUEFIアプリをロードできるローダーで処理することになる。

はっきり書かれていた。将来UEFIアプリのロードがサポートされるといいな。
http://bugzilla.syslinux.org/show_bug.cgi?id=17

Keshav Amburay 2013-07-21 19:59:07 EDT

Syslinux 6.01 (and 6.02-preXX) do not support chainloading (U)EFI 
applications in efi64 or efi32 build. The shipped chain.c32 module 
contains code only for chainloading BIOS boot-sectors and is 
currently useless in (U)EFI systems.

DOS/V環境のCONFIG.SYSとAUTOEXEC.BAT

充実したDOS/V環境のCONFIG.SYSとAUTOEXEC.BAT。

.

■CONFIG.SYS

BUFFERS=20
FILES=30
LASTDRIVE=H
STACKS=9,256
DOS=HIGH,UMB
DOSDATA=UMB
COUNTRY=081,932,C:\DOS\COUNTRY.SYS
SHELL=C:\DOS\COMMAND.COM /P /E:512 /H
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE RAM I=B000-B7FF I=C900-E1FF I=E300-EFFF FRAME=D000
DEVICEHIGH=C:\DOS\$FONT.SYS
DEVICEHIGH=C:\DOS\SETVER.EXE
DEVICEHIGH=C:\DOS\$DISP.SYS
DEVICEHIGH=C:\DOS\$IAS.SYS
DEVICEHIGH=C:\DOS\ANSI.SYS /X
DEVICEHIGH=C:\DOS\POWER.EXE
rem DEVICEHIGH=C:\UTY\OAKCDROM.SYS /D:CDROM1
rem DEVICEHIGH=C:\UTY\MELCDU.EXE /A /D:CDROM1
DEVICEHIGH=C:\UTY\TEAC_CDI.SYS /D:CDROM1
REM IBMMKK
rem INSTALLHIGH=C:\DOS\IBMMKKV.EXE /M=S /Z=4 /C /L /J=90 /S=C:\DOS\MULTDICT.PRO /U=C:\$USRDICT.DCT
REM ATOK8
rem DEVICE=C:\ATOK8\ATOK8A.SYS /UCF=C:\ATOK8\ATOK8.UCF
rem DEVICE=C:\ATOK8\ATOK8B.SYS
rem DEVICEHIGH=C:\ATOK8\ATOK8IAE.SYS /P=2
REM 松茸3
rem DEVICEHIGH=C:\MTTK3\IAMTTK3A.DRV C:\MTTK3 /N
rem DEVICEHIGH=C:\MTTK3\IAMTTK3B.DRV
rem DEVICEHIGH=C:\MTTK3\MBUSHU.DRV
REM WX3
DEVICEHIGH=C:\DOS\KKCFUNC.SYS
DEVICE=C:\WX3\WXK.SYS /A5
DEVICE=C:\WX3\WX3A8.SYS /INI=C:\WX3\WX3SYS.INI /A5REM Norton AntiVirus 5
DEVICE=C:\nav\cloaking.exe
DEVICE=C:\NAV\NAVTSR.EXE
.

■AUTOEXEC.BAT

@ECHO OFF
PROMPT $P$G
PATH C:\WINDOWS;C:\DOS;C:\NAV;C:\NU;C:\VZ;C:\MIFES;C:\JUST5;C:\123R25J;C:\WTERM;C:\UTY
SET COMSPEC=C:\DOS\COMMAND.COM
SET TEMP=C:\TEMP
SET TMP=C:\TEMP
SET NU=C:\NU
SET JW2P=C:\SANSIRO;C:\HANA3;C:\JEDIT;C:\TARO5;C:\JW2;
SET WTERM=C:\WTERM\DATA\WTERM5A.DAT
SET TZ=JST-9
SET BLASTER=A220 I5 D1 H5 P330 T6
rem IMAGE
LH C:\DOS\KEYB.COM JP,932,C:\DOS\KEYBOARD.SYS
LH C:\DOS\MSCDEX.EXE /D:CDROM1 /L:G
LH C:\DOS\SMARTDRV.EXE C+ 4096
LH C:\DOS\DOSKEY.COM /INSERT

REM PCDOS付属のIBMアンチウィルスを使う場合
rem SET IBMAV=C:\DOS
rem CALL C:\DOS\IBMAVDR.BAT C:\DOS\
VER

.

FEPがいろいろ登録されてるが、必要な物だけコメントを外すスタイル。マルチコンフィグにするとごちゃごちゃするので。あとEMM386.EXEは仮想マシンだとかなり絶妙なので調整した方がいいかも。VirtualBox、qemu、VirtualPCそれぞれで最適値が違う気がする。

仮想マシンでDOS環境を作ってるていってるサイト、ブログを見てるとEMM386おかしいから外したらうまくいったとか、NOEMSじゃないとだめとか言っちゃってるの多め。DOSアプリってEMS使うものが結構多いし、UMB無いと特に日本語環境とかハマるのでちゃんと設定したほうがいいと思うの。

※15/03/11 EMM386.EXE のパラメータを変更。0xE2000~0xE2FFFFに穴を開けておくのがミソっぽい。疑似的なメモリマップは次のような感じ。EMSフレームはCC00でもD000でもどっちでも良いが自分の環境ではD000のがUMBが広くとれた。

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
A000 VI VI VI VI VI VI VI VI VI VI VI VI VI VI VI VI
B000 UM UM UM UM UM UM UM UM VI VI VI VI VI VI VI VI
C000 RO RO RO RO RO RO RO RO RO UM UM UM UM UM UM UM
D000 EM EM EM EM EM EM EM EM EM EM EM EM EM EM EM EM
E000 UM UM RO UM UM UM UM UM UM UM UM UM UM UM UM UM
F000 RO RO RO RO RO RO RO RO RO RO RO RO RO RO RO RO

VI:VideoRAM RO:ROM UM:UMB EM:EMSFrame

.

■CONFIG.PS2

BUFFERS=20
FILES=30
LASTDRIVE=H
DOS=HIGH,UMB
DOSDATA=UMB
COUNTRY=001,437,C:\DOS\COUNTRY.SYS
SHELL=C:\DOS\COMMAND.COM /P /E:512 /H
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE RAM I=B000-B7FF I=C900-E1FF I=E300-EFFF FRAME=D000
DEVICEHIGH=C:\DOS\DISPLAY.SYS CON=(EGA,437,2)
DEVICEHIGH=C:\DOS\SETVER.EXE
DEVICEHIGH=C:\DOS\ANSI.SYS /X
DEVICEHIGH=C:\DOS\POWER.EXE
rem DEVICEHIGH=C:\DOS\OAKCDROM.SYS /D:CDROM1
rem DEVICEHIGH=C:\UTY\MELCDU.EXE /A /D:CDROM1
DEVICEHIGH=C:\UTY\TEAC_CDI.SYS /D:CDROM1

■AUTOEXEC.PS2

@ECHO OFF
PROMPT $P$G
PATH C:\DOS\PS2;C:\DOS;C:\UTY;C:\VZ;C:\MIFES\EN
SET COMSPEC=C:\DOS\COMMAND.COM
SET TEMP=C:\TEMP
SET TMP=C:\TEMP
SET BLASTER=A220 I5 D1 H5 P330 T6
MODE CON CP PREP=((437 850) C:\DOS\ISO.CPI)
CHCP 437
LH C:\DOS\KEYB.COM JP,437,C:\DOS\KEYBOARD.SYS
LH C:\DOS\NLSFUNC.EXE C:\DOS\COUNTRY.SYS
LH C:\DOS\MSCDEX.EXE /D:CDROM1 /L:G
LH C:\DOS\SMARTDRV.EXE C+ 4096
LH C:\DOS\DOSKEY.COM /INSERT
LH C:\DOS\MOUSE.COM
SET IBMAV=C:\DOS\PS2
CALL C:\DOS\PS2\IBMAVDR.BAT C:\DOS\PS2\
VER

.

英語環境はあまり日本では見かけない設定にした。まずPC DOS 2000でサポートされたユーロ通貨記号を使えるようにしたいので、COUNTRY=でコードページを437(US)に設定、DISPLAY.SYSでハードウェアコードページを437に設定してソフトウェアコードページを2個確保。MODEでCONのソフトウェアコードページ437と850の設定を行う。最後にCHCPで437を指定。うまくいかなければMODE CON CP SELECT=437が効くかもしれない。これでフォントが差しかわって€を表示できるようになる。あと、フォントはISOのがすっきりしてて見やすい。(ユーロ通貨記号 € はAlt押しながらテンキーで1、8、9で入力できる。)

キーボードは日本語配列で使いたいが、KEYB.COMがコードページ932か437しか受け付けないのでKEYB.COMで 850を指定すると機能しない。弊害としてCHCP 850にするとき「準備できてないデバイスがある」とかいう警告が出る。

このあたりの設定がほとんど載ってなくて、日本語の情報は唯一 C:\DOS\README.TXT の最後付近で解説されているが、キーボードの日本語配列は無視されている。

※最近ゲットしたMS-DOSエンサイクロペディア(アスキーの古いやつ)に割と詳しく載ってた。PC-9801のDOSは言うに及ばず、日本のPCって本当に世界標準から外れてるなあと思った。

 

DOS/V環境が充実してきた

せっかくPC DOS 2000を買ったので、DOS/V環境を現在のWin10パソコン上に再現してみた。 DR-DOSをダウンロードしてフォントドライバをごにょってフリーDOS/Vだーなんてやっても面倒なだけでいまいちおもしろくないし、それに…

コンピューター ソフトなければ ただの箱

こんな川柳、今時のプレインのWindowsやらMac OSやら市販のAndroidから見ると???な感覚だとは思うけど、基本的にMS-DOS本体には最低限のシステムツールくらいしか付いていないので、「DOSだけ」ではできることも限られる。そこで現在ではほぼ手に入らない高価※で定番な市販ソフトをできる 限り動かせる環境を作ってみるテスト。※ワープロ単体10万円前後、表計算単体10万円前後、ツール類にいたってはエディタ単体で数万円、デフラグ単体で数万円とか、ファイラ単体で数万円とかそういうのが普通に出回ってたと思う時代。そりゃ不正コピーもされるでしょう。

▼はい、とりあえず起動しました。もちろんOSはIBM PC DOS 2000 日本語版。 この時点ですでに2個の市販ソフト動いているところが見えます。FEPはWXⅢ。MS-DOS/Vに付属するMS-IMEのいとこ。(MS-DOS/VのFEPやWin95のDOSIMEはWXⅡがベースのはず。)

dos1

▼DOS7付属のEMM386.EXEの機能は強力でメモリもたっぷり使えます。もちろんEMSもUMBも。QEMM9もあるのだけど仮想PCソフトではどうも分が悪い様子で。

dos11

▼DOSSHELLも動いてタスクスワップで作業が捗る。

dos2

▼で、何すんねんと言われたらまずスクリーンエディタでしょう。MIFES5.5とVzEditor1.6。MIFESは高杉で当時はVz派。社会人になってからMIFESは買いました。

dos5 dos6

▼パソコンといえば、表計算。もちろんLotus 1-2-3。今はLotusに座を奪われたMultiplanの末裔Excelが幅を利かせてLotusは見る影も無く。

dos8

▼表計算と来たら、次はワープロ。日本人なら誰でも知ってる一太郎。というかJustWindow2で仲良く動く一太郎5と花子3と三四郎。WindowsじゃなくてJustWindowです。

dos4

▼JW2のシンプルなテキストエディタと超マイナーなデータベースの五郎

dos-goro

▼日本ではメジャーなデータベース。その名も桐5。でも情報処理試験で出るリレーショナルDBではなくて、カード型DB。作成されたDBを使ってるところしか見たことない。

dos7

▼仕事ばかりしてても疲れるのでゲームでもどうですか?  信長の野望 天翔記 DOS/V版。FD5枚組み。Windows版は今でも売ってる気がする。この手のゲームはむつかしくて苦手。VirtualBoxだと音が出ない。SoundBlasterエミュレーションはPCM音声のみ。FM音源のAdLibが無いので遊ぶ時はqemuとかVirtualPCのが良い。まあこのシリーズは音が無くてもそれなりには遊べなくもない。

dos10

▼安心してパソコンを使うためにノートンアンチウィルスと便利なノートンユーティリティーズ。定義ファイルも「最新」に更新済み。ただし時間が止まってる。 ノートンユーティリティーズは今時のWindowsなら標準でそろっている機能が満載。スピードディスクってのはようするにデフラグ。

dos12 dos9

▼「DOS上で動くソフト」で忘れていけないのがWindows。IBM版WINDOWS 3.1。Win16アプリもいろいろあるのだけど今回はDOS/Vが主役なのでこれだけ。

dos3

▼DOSでウェッブブラウズ(インターネット)だってできます。UTF-8非対応とかJavaScriptがいまいちで実用には堪えませんが、VESA表示やNDIS2ドライバの動作検証としては使えます。OS/2っぽいUIも味わえます。

webboy

▼DOS時代はフリーソフトの存在も忘れてはいけない。このころのフリーソフトって今のOSSとは違ってクローズドソースが一般的。LHAの古いのは改竄ルーチン以外のソースは公開されてたと思う。大物フリーソフトのJW_CADとWTERM。機械系には進まなかったのでCADは今でも使えてない。WTERMはオムロンの28.8kモデムでBBSをまわるのに使ってました。PC-9801Nで。

dos13 dos14

FDとFILMTN。FILMTN派でした。下の写真も色が好みに変えてあります。

dos17 dos16

軽快なMIELもよく使った。よく見るとDOSSHELLはシェアウェアPKLiteで圧縮されてることが分かったり。日本人なら当然LHAだ。写真のLHAは古い。パスを直したら2.55bが出てきた。

dos18 dos15

これらのソフトは「信長の野望」を除いて単一の環境で動くようになってます。誰も必要としないCONFIG.SYS、AUTOEXEC.BATは後日掲載予定。→CONFIG.SYS と AUTOEXEC.BAT掲載済み。結構凝ったものだと思うんだけど、要らないだろうな。

DOS/V対応の日本語版ソフトで、なるべく後期のバージョンにこだわった。後期のDOSアプリは重く、ビデオやメモリまわりの制約で動きにくい。DOS/Vの日本語で実用的な環境を作るのはいばらの道。当時日本国内はPC-9801がはびこっていたから、DOSの設定方法などの資料や中古ソフトの流通もPC-98×1向けが大半。日本のPC文化はこれで取り残されてしまったね。まあいろんな理由でPC-98が嫌いなんで環境を作りたいとも思わないですが。また、PC-9801の比ではないくらいもっと数が出ていたであろうPC/XT、PC/AT用の英語版ソフトなら今でも世界中いたるところに落ちてるし、DOSBoxをはじめエミュレータも当然のごとくそれらを相手に作られてて、特にビデオまわりで苦労することも無いので「英語版DOS」に限れば環境を作るのにはあまり苦労しないです。

そこをあえてDOS/Vで、っていうのが今回の趣旨。今のほうがリアルDOS時代より充実してる。当時これくらい贅沢な環境を使えたらよかったのに。 ここに掲載したもの、ソフトだけでいくらするんだろ。

ブラウン管(オシロ)の輝点の周りの同心円

ブラウン管(オシロスコープ)の輝点の周りに見える同心円は電子の波動性による干渉縞だそうで。電子銃から出た電子が一様に拡散してるだけならぼんやり丸くなるだけのはずが、干渉性で1DIVごとくらいに円形の筋が出ている。

電子線の粒子性と波動性を同時に感じられる身近な現象。とはいえ、もうブラウン管なんてかなり少数派だし、あっても輝点の走査が止まってる状態なんてあまり見られないと思う。 カラーテレビのマスク付きだとどうなるのか確認したい。

電子線の干渉縞

※X字の光の筋はカメラの絞りによる光の干渉。