Suche senden
Hochladen
NetBSD移植の昔話
•
10 gefällt mir
•
5,543 views
Masaru Oki
Folgen
1993年に公開されたばかりのNetBSDをX68030に移植した時のことを大まかにまとめてみました。
Weniger lesen
Mehr lesen
Software
Melden
Teilen
Melden
Teilen
1 von 24
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
RISC-Vの可能性
RISC-Vの可能性
たけおか しょうぞう
ルータ遊びことはじめ
ルータ遊びことはじめ
Takumi Sueda
Rust で RTOS を考える
Rust で RTOS を考える
ryuz88
Lispマシン ドキュメント和訳とか、 ちびLispとか
Lispマシン ドキュメント和訳とか、 ちびLispとか
たけおか しょうぞう
Lagopus on small arm board
Lagopus on small arm board
Masaru Oki
Openhard150114
Openhard150114
たけおか しょうぞう
自宅ラック勉強会Vol4 #routerboard
自宅ラック勉強会Vol4 #routerboard
kometch H
DEC_6600,DEC_TITAN Implementation of NetBSD(仮)
DEC_6600,DEC_TITAN Implementation of NetBSD(仮)
nullnilaki
Empfohlen
RISC-Vの可能性
RISC-Vの可能性
たけおか しょうぞう
ルータ遊びことはじめ
ルータ遊びことはじめ
Takumi Sueda
Rust で RTOS を考える
Rust で RTOS を考える
ryuz88
Lispマシン ドキュメント和訳とか、 ちびLispとか
Lispマシン ドキュメント和訳とか、 ちびLispとか
たけおか しょうぞう
Lagopus on small arm board
Lagopus on small arm board
Masaru Oki
Openhard150114
Openhard150114
たけおか しょうぞう
自宅ラック勉強会Vol4 #routerboard
自宅ラック勉強会Vol4 #routerboard
kometch H
DEC_6600,DEC_TITAN Implementation of NetBSD(仮)
DEC_6600,DEC_TITAN Implementation of NetBSD(仮)
nullnilaki
パソコン選び(抜粋)
パソコン選び(抜粋)
Eiji Matsumoto
S01 企業で活用が進む Microsoft Azureの仮想マシン (Windows)
S01 企業で活用が進む Microsoft Azureの仮想マシン (Windows)
Microsoft Azure Japan
レトロエクスプレス5講演
レトロエクスプレス5講演
Mari Yamaguchi
謎PCとの付き合い方(LILO東海道 2015/5発表分)
謎PCとの付き合い方(LILO東海道 2015/5発表分)
shimadah
Dpdk環境の話
Dpdk環境の話
Masaru Oki
20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門
20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門
Takeshi HASEGAWA
8bit 時代のプログラミング事情を訪ねて
8bit 時代のプログラミング事情を訪ねて
suno88
コンビニマルチコピー機の活用
コンビニマルチコピー機の活用
H2412003
retrobsd-2012-JUL-07 at JNUG BSD BoF
retrobsd-2012-JUL-07 at JNUG BSD BoF
たけおか しょうぞう
Movidius Neral Compute Stickを使ってみた
Movidius Neral Compute Stickを使ってみた
NISHIMOTO Keisuke
第2回IoT勉強会 in 岡山 | 2部 IoTデバイスを触ってみよう!
第2回IoT勉強会 in 岡山 | 2部 IoTデバイスを触ってみよう!
NISHIMOTO Keisuke
【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介
Yuma Ohgami
あるブートローダの話
あるブートローダの話
nullnilaki
S02 企業で活用が進む Microsoft Azureの仮想マシン (Linux)
S02 企業で活用が進む Microsoft Azureの仮想マシン (Linux)
Microsoft Azure Japan
ワンチップAndroidの紹介(ABC2013s)
ワンチップAndroidの紹介(ABC2013s)
博宣 今村
Rust-DPDK
Rust-DPDK
Masaru Oki
Rust-DPDK
Rust-DPDK
Masaru Oki
Lagopusとvagrant
Lagopusとvagrant
Masaru Oki
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
Masaru Oki
今よりも少し(?)昔、 Windowsを作ろうとした話
今よりも少し(?)昔、 Windowsを作ろうとした話
Masaru Oki
Onieで遊んでみようとした話
Onieで遊んでみようとした話
Masaru Oki
GPD WINが来た!
GPD WINが来た!
Masaru Oki
Weitere ähnliche Inhalte
Ähnlich wie NetBSD移植の昔話
パソコン選び(抜粋)
パソコン選び(抜粋)
Eiji Matsumoto
S01 企業で活用が進む Microsoft Azureの仮想マシン (Windows)
S01 企業で活用が進む Microsoft Azureの仮想マシン (Windows)
Microsoft Azure Japan
レトロエクスプレス5講演
レトロエクスプレス5講演
Mari Yamaguchi
謎PCとの付き合い方(LILO東海道 2015/5発表分)
謎PCとの付き合い方(LILO東海道 2015/5発表分)
shimadah
Dpdk環境の話
Dpdk環境の話
Masaru Oki
20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門
20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門
Takeshi HASEGAWA
8bit 時代のプログラミング事情を訪ねて
8bit 時代のプログラミング事情を訪ねて
suno88
コンビニマルチコピー機の活用
コンビニマルチコピー機の活用
H2412003
retrobsd-2012-JUL-07 at JNUG BSD BoF
retrobsd-2012-JUL-07 at JNUG BSD BoF
たけおか しょうぞう
Movidius Neral Compute Stickを使ってみた
Movidius Neral Compute Stickを使ってみた
NISHIMOTO Keisuke
第2回IoT勉強会 in 岡山 | 2部 IoTデバイスを触ってみよう!
第2回IoT勉強会 in 岡山 | 2部 IoTデバイスを触ってみよう!
NISHIMOTO Keisuke
【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介
Yuma Ohgami
あるブートローダの話
あるブートローダの話
nullnilaki
S02 企業で活用が進む Microsoft Azureの仮想マシン (Linux)
S02 企業で活用が進む Microsoft Azureの仮想マシン (Linux)
Microsoft Azure Japan
ワンチップAndroidの紹介(ABC2013s)
ワンチップAndroidの紹介(ABC2013s)
博宣 今村
Ähnlich wie NetBSD移植の昔話
(15)
パソコン選び(抜粋)
パソコン選び(抜粋)
S01 企業で活用が進む Microsoft Azureの仮想マシン (Windows)
S01 企業で活用が進む Microsoft Azureの仮想マシン (Windows)
レトロエクスプレス5講演
レトロエクスプレス5講演
謎PCとの付き合い方(LILO東海道 2015/5発表分)
謎PCとの付き合い方(LILO東海道 2015/5発表分)
Dpdk環境の話
Dpdk環境の話
20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門
20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門
8bit 時代のプログラミング事情を訪ねて
8bit 時代のプログラミング事情を訪ねて
コンビニマルチコピー機の活用
コンビニマルチコピー機の活用
retrobsd-2012-JUL-07 at JNUG BSD BoF
retrobsd-2012-JUL-07 at JNUG BSD BoF
Movidius Neral Compute Stickを使ってみた
Movidius Neral Compute Stickを使ってみた
第2回IoT勉強会 in 岡山 | 2部 IoTデバイスを触ってみよう!
第2回IoT勉強会 in 岡山 | 2部 IoTデバイスを触ってみよう!
【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介
あるブートローダの話
あるブートローダの話
S02 企業で活用が進む Microsoft Azureの仮想マシン (Linux)
S02 企業で活用が進む Microsoft Azureの仮想マシン (Linux)
ワンチップAndroidの紹介(ABC2013s)
ワンチップAndroidの紹介(ABC2013s)
Mehr von Masaru Oki
Rust-DPDK
Rust-DPDK
Masaru Oki
Rust-DPDK
Rust-DPDK
Masaru Oki
Lagopusとvagrant
Lagopusとvagrant
Masaru Oki
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
Masaru Oki
今よりも少し(?)昔、 Windowsを作ろうとした話
今よりも少し(?)昔、 Windowsを作ろうとした話
Masaru Oki
Onieで遊んでみようとした話
Onieで遊んでみようとした話
Masaru Oki
GPD WINが来た!
GPD WINが来た!
Masaru Oki
新生Lagopus2017(仮称)
新生Lagopus2017(仮称)
Masaru Oki
Lagopus as open flow hybrid switch 実践編
Lagopus as open flow hybrid switch 実践編
Masaru Oki
LagopusでPPPoEを使えるか考えてみた件
LagopusでPPPoEを使えるか考えてみた件
Masaru Oki
Lagopus どれだけ速いのか
Lagopus どれだけ速いのか
Masaru Oki
Lagopus 0.2.7
Lagopus 0.2.7
Masaru Oki
Ryu+Lagopusで OpenFlowの動きを見てみよう
Ryu+Lagopusで OpenFlowの動きを見てみよう
Masaru Oki
Lagopus match improvements
Lagopus match improvements
Masaru Oki
Lagopus 0.2.4
Lagopus 0.2.4
Masaru Oki
Open flow tunnel extension on lagopus vswitch
Open flow tunnel extension on lagopus vswitch
Masaru Oki
Lagopus as open flow hybrid switch
Lagopus as open flow hybrid switch
Masaru Oki
Net bsd advent calendar 2015 bpf
Net bsd advent calendar 2015 bpf
Masaru Oki
Using rump on NetBSD 7.0
Using rump on NetBSD 7.0
Masaru Oki
Rumpを使ってみる
Rumpを使ってみる
Masaru Oki
Mehr von Masaru Oki
(20)
Rust-DPDK
Rust-DPDK
Rust-DPDK
Rust-DPDK
Lagopusとvagrant
Lagopusとvagrant
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
今よりも少し(?)昔、 Windowsを作ろうとした話
今よりも少し(?)昔、 Windowsを作ろうとした話
Onieで遊んでみようとした話
Onieで遊んでみようとした話
GPD WINが来た!
GPD WINが来た!
新生Lagopus2017(仮称)
新生Lagopus2017(仮称)
Lagopus as open flow hybrid switch 実践編
Lagopus as open flow hybrid switch 実践編
LagopusでPPPoEを使えるか考えてみた件
LagopusでPPPoEを使えるか考えてみた件
Lagopus どれだけ速いのか
Lagopus どれだけ速いのか
Lagopus 0.2.7
Lagopus 0.2.7
Ryu+Lagopusで OpenFlowの動きを見てみよう
Ryu+Lagopusで OpenFlowの動きを見てみよう
Lagopus match improvements
Lagopus match improvements
Lagopus 0.2.4
Lagopus 0.2.4
Open flow tunnel extension on lagopus vswitch
Open flow tunnel extension on lagopus vswitch
Lagopus as open flow hybrid switch
Lagopus as open flow hybrid switch
Net bsd advent calendar 2015 bpf
Net bsd advent calendar 2015 bpf
Using rump on NetBSD 7.0
Using rump on NetBSD 7.0
Rumpを使ってみる
Rumpを使ってみる
NetBSD移植の昔話
1.
NetBSD移植の昔話 Mar 24, 2018 Masaru
OKI @masaru0714
2.
16bit~32bitパソコンの時代 (1990年代前半) ● いろんなメーカーからいろんなパソコンが出ていた。 ●
アーキテクチャが製品ごとにバラバラ! ○ CPUが違う (68000, 80386, … 仮想記憶もなかったり貧弱だったり .) ○ メモリも違う (基本オンボード、増設 RAMは製品ごとに独自規格 ) ○ 周辺回路も違う (PCIでもISAでもない独自バスが製品ごと、メモリマップも ) ○ コネクタも違う (キーボードはキー数、プロトコルもそれぞれ違う ) ○ サウンド機能は豪華だったり貧弱だったり (ビジネス用の製品ではビープ音のみ、など ) ○ USBはない、マウスは機種によっては標準添付だがオプションの製品も ○ ハードウェア仕様は書籍で入手、データシートそのものの入手は難しいことも ● LANはないわけではないが高価(10BaseT 8ポートHUBが数万円していた) ● インターネット(Web)も黎明期 ● ハードウェアは基本的にメーカー純正品か互換品を選択するしかない ● OSも基本的にはメーカー提供のもの(主流はx86用のMS-DOS)
3.
参考: こんな機種がありました シャープ X68000 最初のモデルは1988年発売 CPU:
68000 (後に68030) MEM: 1MB (初代) 添付OS: Human68k 価格: 369,000円(初代) 富士通 FM-TOWNS 最初のモデルは1989年発売 CPU: 80386 (後にPentium) MEM: 2MB (初代) 添付OS: TownsOS 価格: 338,000円 (初代) NEC PC-9801 最初のモデルは1982年発売 CPU: 8086 (後に486DX) MEM: 128KB (初代) 添付OS(?): N-BASIC(86) 価格: 298,000円(初代)
4.
当時のX68000開発環境 ● OSはHuman68kという、MS-DOS/m68kみたいなかんじのもの(シングルタスク) ● メーカーがスクリーンエディタとアセンブラとリンカを製品に標準添付していた ●
メーカーがCコンパイラを販売していた ● 当時すでにあったgcc (バージョン1.36とか)を移植した個人がいた ● 高速な互換リンカを作り上げた個人がいた ● 高速な互換アセンブラを作り上げた個人がいた ● MicroEMACSやviクローンを移植した個人がいた ● UNIX互換コマンド(lsとか)やUNIX風シェルを開発した個人がいた ● 他のGNUソフトウェアを移植する人もいた(awk, sedなど) ● UNIXのlibc風のライブラリを作り上げる人たちもいた ● TeXを移植する人もいた
5.
UNIXへの憧れ 当時仕事でSunのワークステーション(BSD系のSunOSが動いていた)を使っていたこともあり、本物のUNIXへの 大きなあこがれがあった。が、UNIXは商品であり、ソースコードを合法的に入手し動かすことは個人には不可能 だった。 1991年に386BSD version 0.0が公開されたときの興奮を今でもかすかに覚えている。デュアルブートや他OS との住み分けなど微塵も考えられていなかった当時の386BSDインストーラを可搬メディア(FD)から起動すると、 ハードディスクの一部を問答無用でスワップとして使用し、入っていたMS-DOS環境が破壊されるという笑えない 事故もあった。 なお、Linuxも最初のバージョンが作られたのは1991年だった。
6.
386BSDからNetBSDへ 386BSDは大いに歓迎され、たくさんのユーザからバグ報告や修正の提案などがなされ、386BSD 0.1がリリー スされたものの、修正が反映されたリリースがなかなか出ないため、有志がpatchkitをリリースしていた。 1993年4月、NetBSDが初めて公開された。386BSDと各種パッチなどをベースにしたバージョン0.8である。 カーネルソースの中にはi386の他amiga, hp300といったディレクトリが存在していて、最初の公開時点ですでに マルチアーキテクチャ対応を目指していることがうかがえる。 なお、類似プロジェクトのFreeBSDの最初のリリースは1993年12月である。
7.
X68030 ● 1988年に6800010MHzを搭載し発売されたX68000。 ● 途中CPUクロックを16MHzにアップする他は一切変更ないまま5年が経過。 ●
1993年、ついに32bit CPUを搭載した新機種X68030が発売に。 ● 68030はSunのワークステーションでも採用されていたCPU。 ● UNIXが動く!! と思ったら、CPUは組み込み向けの68EC030。 ● 仮想記憶が実装されていないvariantだった。 しかし ● 68EC030はソケットに実装されていた。 ● 68030を買ってくれば交換可能! 希望がつながった!
8.
NetBSD移植する! ● 完全に趣味 ● 業務とは全く関係なくやった ●
要求も期限もないので、できなかったら諦めるくらいの気概で ● まったく先が見えないので、一緒にやろうとか手伝ってと言って乗り気になる人はいなかった ● 山登りに例えるとこう GOAL 大 ???
9.
NetBSD移植の流れ 1. ハードウェアの入手 2. ソースコードの入手 3.
開発環境の整備 4. 移植元アーキテクチャの選定 5. コンフィグ整理とビルドの確認 6. ブートローダーの開発と起動テスト 7. メモリマップの調整 8. デバイスドライバ(シリアルコンソール)の開発 9. 起動するまで動かす 10. SCSIドライバなどの開発 11. ブートメディア構築 12. init diedとの戦い
10.
1.ハードウェアの入手 ● X68030本体 (68030b16MHz,
4MBメモリ) ○ 秋葉原のツクモパソコン本店で購入。 1993年5月。 ● 68030 ● 68881 ○ 秋葉原のラジオデパートに、当時秋葉原エレクトリックパーツという店があり、そこで売られていたものを入手。 同じく1993年5月。 デバッグ用のハードウェア(ICE等)は使わなかった
11.
2.ソースコードの入手 ● NIFTY-ServerのFUNIXからテキストエンコードされたtarballをダウンロード ● ひとまずカーネルソースだけ ●
14,400bps(電話回線のモデム経由) ● 数時間(だったかすらはっきり覚えていない、それ以上かも)かかる
12.
3.開発環境の構築 ● 標準OSであるHuman68k上で、NetBSDをビルドできるようにする ● いわゆるクロスビルド環境だが、当時は手軽に構築する手段がなかった ●
BSD makeをHuman68kに移植 ○ 既存のツールやライブラリのおかげで、ほぼビルドするだけ ○ GNU makeではビルドできない。最初は添付シェルスクリプトで作る ● a.out(当時はELFではなかった)を出力するgccをビルド ● gasやGNU Linkerも用意(ldはbinutilsに入っていた)
13.
4.移植元アーキテクチャの選定 ● 同じm68kファミリーを使っているアーキテクチャを選ぶ ● hp300
or amiga ○ hp300はHP9000/300シリーズワークステーション ○ amigaはコモドール社のパソコン Amiga ● Amigaを選択 ● cp -R sys/amiga sys/x68k (当時x68kと書いてたかは覚えていない。x68030かも?)
14.
5.コンフィグ調整とビルドの確認 ● まずカーネルのビルドの方法を調べるところから。(Makefileがなかった) ● config(8)を使ってMakefileを生成することが分かる。ツールは移植した。 ●
AmigaとX68030では当然メモリマップが異なる。デバイスも異なる。 ● まず最初は、作られるカーネルのコンフィグから使えないデバイスを外す。 ● そしてカーネルのビルドが通るかを確認する。 ● 当時は68030 16MHzでカーネルビルドにたしか数時間。
15.
6.ブートローダーの開発と起動テスト ● X68030のBIOS ROMには、Human68kで使われているFAT16のファイルを読み書きするサービスが提 供されていたので、まずはそれを使ってFAT16上にあるa.out形式のNetBSDカーネルをメモリに読み込 み、セクション情報通りのアドレスに置いて、実行番地にジャンプするプログラムを開発。 ●
実際には、実行番地がどこなのかを探すところから。_startってどこよ? → locore.s ● カーネルの実行エントリ(_start)直後に、I/Oを叩いて内蔵LEDを光らせるコードを入れて、ブートさせてみ て、LEDが光るかを確認。printfデバッグより原始的なLチカデバッグ。
16.
7.メモリマップの調整 ● 68030は、コールドスタート時、仮想記憶はオフになっている。 ● システムレジスタのあるビットを1にすることで、仮想記憶が有効になる。 ●
仮想記憶が有効になってもプログラムカウンタはそのままの値。 ● つまり、仮想記憶を有効にする場合、ページテーブルを事前に組んでおいて、仮想記憶を有効にした後そ のままプログラムが動けるように配置する。 ○ もっとも簡単なのは仮想アドレス =物理アドレスとする。 ● その他、ビデオメモリの位置やデバイスのアドレス空間など調整する ● AmigaとX68030とではメモリマップが異なるので、いろいろ書き換える。
17.
8.デバイスドライバ(シリアルコンソール)の開発 ● 少なくともコンソールが必要。シリアルドライバを作った。 ○ チップはZ8530
SCC。既存ドライバがなかったので見様見真似で書いた。 ● NetBSDカーネル起動直後は割り込みを使わないので、割り込みは後回し。 ● 起動直後に出るバナーが表示されるまで相当の時間を要した。 ○ シリアルドライバがおかしいのではなく前出のメモリマップ周りのバグ。 ● ここでTLBとページテーブルと、機種非依存メモリ管理のpmapをかなり読んだ。
18.
9.起動するまで動かす ● NetBSDカーネルの起動バナーが初めて表示されたのはいつか記憶にない。 ● rootファイルシステムがないので当然カーネルの吐くメッセージを見るだけ。 ●
no root filesystemだかそんなメッセージを出して止まるまで。 ● 起動しない頃には、カーネルのソースコード内に「シリアルに1文字出力」を埋め込んでどこまで動いたか を観測していた。いわゆるprintfデバッグの簡易版。
19.
10.SCSIドライバなどの開発 ● X68030の標準ストレージインタフェースはSCSI ● 富士通製SCSIコントローラを内蔵していた ●
ドライバはないので作成した ● 友人がつてでデータシートを入手してくれて非常に助かった ● いきなりおかしなデータを書いて壊されるとつらいので、最初はread only。 ● 並行してビデオコンソールドライバとキーボードドライバも作成した ● 当時、デバイスのmajor, minorは手で採番していたので、採番した
20.
11. ブートメディア構築 ● 当時はramdiskからブートする仕組みがなかった(と思う) ●
可搬ストレージ(MO)にブートメディアを構築することにする。 ● amiga用に配布されているファイルシステムイメージを入手、MOに書き込む。 ● NetBSDカーネルのコンフィグでMOをrootとするよう書いてビルド。 ● 起動。 ● 失敗。superblockがおかしいなどと言われる。修正、テストの繰り返し。
21.
12. init diedとの戦い ●
rootをようやくmountできた ● その直後に動くのが/sbin/init ● だがこいつがすぐ死ぬ。カーネルはinit diedと言ったっきりだんまり。 ● 仮想記憶周りの問題か、ファイルシステム周りの問題か。 ● 覚えていないが、どうにか死ななくできた。しかしその先が動かない ● なぜかと思ったらそういえばタイマー割り込み作ってないからコンテキストスイッチしないことに今さら気づ く。作り込む。
22.
シングルユーザーブート! ● (たしか)1993年9月、NetBSD/X68030が初めてシングルユーザーブートに成功。 ● ここまで独りで作業。ネットには参考情報がなく、書籍とソースだけが頼りだった。 ○
4.3BSDの本、一般的UNIX内部構造の本、 X68000ハードウェア解説の本 ● 移植したものを動かすまで、動いているNetBSDを見たことがなかった。 ● SCSIドライバを書き込み可能にして、NetBSD上でカーネルをセルフビルドして、a.outのアラインメントが 想定と違っていて調整したりなど。 ● 動き出してからは、他のデバイスを開発する人やX11を動かす人などたくさんの皆様の協力が得られた。 ● 1996年5月、NetBSD/x68kはオフィシャルのリポジトリにマージされた。
23.
昔は移植って大変だったけど 現在 ● クロスビルド環境はシェルスクリプト一発で作れる(NetBSDの場合) ● 共通レイヤー(MI)と機種依存部分(MD)が分離されていて読み書きしやすい ●
ramdiskからブートできるのでテストしやすい ● インターネットに情報がたくさん落ちている、参考ソースも落ちている 知らないところから始めても、スムーズに移植を進められる周辺環境が整っている! しかし最近の開発ボードではメーカー提供のLinuxがあらかじめ用意されていることが多い
24.
まとめ 昔のパソコンはそれぞれ独自のハードウェアだった OSの移植に関する情報がなかったので調べるのも作業も大変だった OS移植をすることで内部構造や動作を把握することができた 現在は情報、環境ともに整っていて、移植するなら作業が捗る! だが、個人が移植する必要性も薄れてきた
Jetzt herunterladen