Submit Search
Upload
【学習メモ#6th】12ステップで作る組込みOS自作入門
•
0 likes
•
1,694 views
S
sandai
Follow
12ステップで作る組込みOS自作入門 http://www.amazon.co.jp/dp/4877832394/ 坂井 弘亮(著) カットシステム
Read less
Read more
Technology
Report
Share
Report
Share
1 of 18
Download now
Download to read offline
Recommended
【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門
sandai
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門
sandai
【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門
sandai
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門
sandai
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
sandai
【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門
sandai
【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門
sandai
【学習メモ#5th】12ステップで作る組込みOS自作入門
【学習メモ#5th】12ステップで作る組込みOS自作入門
sandai
Recommended
【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門
sandai
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門
sandai
【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門
sandai
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門
sandai
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
sandai
【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門
sandai
【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門
sandai
【学習メモ#5th】12ステップで作る組込みOS自作入門
【学習メモ#5th】12ステップで作る組込みOS自作入門
sandai
リアルタイムOsのカスタマイズ
リアルタイムOsのカスタマイズ
Kazuhiro Takahashi
[Basic 8] プロセスとスレッド / 入出力 / シェル
[Basic 8] プロセスとスレッド / 入出力 / シェル
Yuto Takei
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
Kazuki Onishi
リアルタイムOSの必要性とTOPPERS/SSPの紹介
リアルタイムOSの必要性とTOPPERS/SSPの紹介
NSaitoNmiri
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
Yuto Takei
さわってみようTOPPERS/SSP
さわってみようTOPPERS/SSP
NSaitoNmiri
[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御
Yuto Takei
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
Kazuki Onishi
あるコンテキストスイッチの話
あるコンテキストスイッチの話
nullnilaki
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
X86opti01 nothingcosmos
X86opti01 nothingcosmos
nothingcosmos
Minix Learning
Minix Learning
榎本 優樹
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
Hirotaka Kawata
systemd 再入門
systemd 再入門
Kazuhiro Nishiyama
d-kami x86-2
d-kami x86-2
Daisuke Kamikawa
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
Minoru Nakamura
ぼくnmonです
ぼくnmonです
洋史 東平
Altanative macro
Altanative macro
Motohiro KOSAKI
Read daemon on 20121110 by shinaisan
Read daemon on 20121110 by shinaisan
shinaisan
Intel TSX について x86opti
Intel TSX について x86opti
Takashi Hoshino
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
Hirotaka Kawata
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
Kishi Shundo
More Related Content
What's hot
リアルタイムOsのカスタマイズ
リアルタイムOsのカスタマイズ
Kazuhiro Takahashi
[Basic 8] プロセスとスレッド / 入出力 / シェル
[Basic 8] プロセスとスレッド / 入出力 / シェル
Yuto Takei
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
Kazuki Onishi
リアルタイムOSの必要性とTOPPERS/SSPの紹介
リアルタイムOSの必要性とTOPPERS/SSPの紹介
NSaitoNmiri
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
Yuto Takei
さわってみようTOPPERS/SSP
さわってみようTOPPERS/SSP
NSaitoNmiri
[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御
Yuto Takei
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
Kazuki Onishi
あるコンテキストスイッチの話
あるコンテキストスイッチの話
nullnilaki
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
X86opti01 nothingcosmos
X86opti01 nothingcosmos
nothingcosmos
Minix Learning
Minix Learning
榎本 優樹
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
Hirotaka Kawata
systemd 再入門
systemd 再入門
Kazuhiro Nishiyama
d-kami x86-2
d-kami x86-2
Daisuke Kamikawa
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
Minoru Nakamura
ぼくnmonです
ぼくnmonです
洋史 東平
Altanative macro
Altanative macro
Motohiro KOSAKI
Read daemon on 20121110 by shinaisan
Read daemon on 20121110 by shinaisan
shinaisan
Intel TSX について x86opti
Intel TSX について x86opti
Takashi Hoshino
What's hot
(20)
リアルタイムOsのカスタマイズ
リアルタイムOsのカスタマイズ
[Basic 8] プロセスとスレッド / 入出力 / シェル
[Basic 8] プロセスとスレッド / 入出力 / シェル
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
リアルタイムOSの必要性とTOPPERS/SSPの紹介
リアルタイムOSの必要性とTOPPERS/SSPの紹介
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
さわってみようTOPPERS/SSP
さわってみようTOPPERS/SSP
[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
あるコンテキストスイッチの話
あるコンテキストスイッチの話
x86とコンテキストスイッチ
x86とコンテキストスイッチ
X86opti01 nothingcosmos
X86opti01 nothingcosmos
Minix Learning
Minix Learning
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
systemd 再入門
systemd 再入門
d-kami x86-2
d-kami x86-2
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
ぼくnmonです
ぼくnmonです
Altanative macro
Altanative macro
Read daemon on 20121110 by shinaisan
Read daemon on 20121110 by shinaisan
Intel TSX について x86opti
Intel TSX について x86opti
Viewers also liked
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
Hirotaka Kawata
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
Kishi Shundo
QEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミング
Yuma Ohgami
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
kozossakai
やってよかったOS作り
やってよかったOS作り
Hidemi Kawai
低レイヤー入門
低レイヤー入門
demuyan
Railsチュートリアルの歩き方 (第3版)
Railsチュートリアルの歩き方 (第3版)
Yohei Yasukawa
人工知能概論 1
人工知能概論 1
Tadahiro Taniguchi
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門
Hirotaka Kawata
【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介
Yuma Ohgami
Web系だって低レイヤーがやりたいんだよ! コンパイラことはじめ
Web系だって低レイヤーがやりたいんだよ! コンパイラことはじめ
Nisei Kimura
C++でできる!OS自作入門
C++でできる!OS自作入門
uchan_nos
Ctfのためのpython入門
Ctfのためのpython入門
shiracamus
ハッキング実演
ハッキング実演
Ken Ogura
CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)
kikuchan98
Viewers also liked
(15)
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
QEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミング
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
やってよかったOS作り
やってよかったOS作り
低レイヤー入門
低レイヤー入門
Railsチュートリアルの歩き方 (第3版)
Railsチュートリアルの歩き方 (第3版)
人工知能概論 1
人工知能概論 1
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門
【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介
Web系だって低レイヤーがやりたいんだよ! コンパイラことはじめ
Web系だって低レイヤーがやりたいんだよ! コンパイラことはじめ
C++でできる!OS自作入門
C++でできる!OS自作入門
Ctfのためのpython入門
Ctfのためのpython入門
ハッキング実演
ハッキング実演
CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)
Similar to 【学習メモ#6th】12ステップで作る組込みOS自作入門
2009年のPHPフレームワーク
2009年のPHPフレームワーク
Takuya Sato
あるmmapの話
あるmmapの話
nullnilaki
Open Source System Administration Framework - Func
Open Source System Administration Framework - Func
Gosuke Miyashita
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス
5mingame2
php and sapi and zendengine2 and...
php and sapi and zendengine2 and...
do_aki
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
祐司 伊藤
20121217 jawsug-yokohama
20121217 jawsug-yokohama
Tetsuya Chiba
Ansible2.0と実用例
Ansible2.0と実用例
OSSラボ株式会社
PEZY-SC programming overview
PEZY-SC programming overview
Ryo Sakamoto
2010年インストールマニアックス ~Javaアプリ編~
2010年インストールマニアックス ~Javaアプリ編~
normalian
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
Gingerbread
Gingerbread
android sola
Php in ruby
Php in ruby
do_aki
スタート低レイヤー #0
スタート低レイヤー #0
Kiwamu Okabe
Programming camp Codereading
Programming camp Codereading
Hiro Yoshioka
Zマイスターとの新たな価値探求 z/OS
Zマイスターとの新たな価値探求 z/OS
IBMソリューション
What is chef
What is chef
Yukihiko SAWANOBORI
2013OSC関西@京都_CloudStackとCloudFoundaryがまるわかり!
2013OSC関西@京都_CloudStackとCloudFoundaryがまるわかり!
Midori Oge
php-src の歩き方
php-src の歩き方
do_aki
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
Yoshihisa Ozaki
Similar to 【学習メモ#6th】12ステップで作る組込みOS自作入門
(20)
2009年のPHPフレームワーク
2009年のPHPフレームワーク
あるmmapの話
あるmmapの話
Open Source System Administration Framework - Func
Open Source System Administration Framework - Func
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス
php and sapi and zendengine2 and...
php and sapi and zendengine2 and...
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
20121217 jawsug-yokohama
20121217 jawsug-yokohama
Ansible2.0と実用例
Ansible2.0と実用例
PEZY-SC programming overview
PEZY-SC programming overview
2010年インストールマニアックス ~Javaアプリ編~
2010年インストールマニアックス ~Javaアプリ編~
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
Gingerbread
Gingerbread
Php in ruby
Php in ruby
スタート低レイヤー #0
スタート低レイヤー #0
Programming camp Codereading
Programming camp Codereading
Zマイスターとの新たな価値探求 z/OS
Zマイスターとの新たな価値探求 z/OS
What is chef
What is chef
2013OSC関西@京都_CloudStackとCloudFoundaryがまるわかり!
2013OSC関西@京都_CloudStackとCloudFoundaryがまるわかり!
php-src の歩き方
php-src の歩き方
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
【学習メモ#6th】12ステップで作る組込みOS自作入門
1.
12ステップで作る組込みOS自作入門
6thステップ @sandai
2.
【参考書籍】 12ステップで作る組込みOS自作入門 【内容】 1ステップずつ、実際に動かしながらプログラムを発展さ せていく方式で無理なく学べる。OSやハードウェアに詳 しくない方にも理解できるよう に十分な説明を提供 坂井 弘亮(著) カットシステム(2010/5) 【税込価格】 4,410円 【サポートページ】 http://kozos.jp/books/makeos/
3.
もくじ 1.エントリ・ポイント 2.ブートローダとOSの作成 3.まとめ
4.
1.エントリ・ポイント
5.
エントリ・ポイント ●
ELF形式のファイルのセグメント情報は読み取 れるようになったので、これからセグメントを RAMに展開し処理を渡すことをする – このときにどのアドレスから実行開始すれば良いか を指示しなければならない ● この実行開始アドレスを、一般的にスタート・ アドレス又はエントリ・ポイントと呼ぶ – ELF形式ではエントリ・ポイントと言う
6.
ELF形式のエントリ・ポイント ●
ELF形式のファイルはエントリ・ポイントの情 報をヘッダに持っている – ELFヘッダのうち、「Entry point address」の部分 – そのアドレスから実行開始するのが妥当 ● アセンブリ的にはそのアドレスにジャンプする だけ。これを「実行を渡す」とか「処理を渡 す」と表現したりする
7.
2.ブートローダとOSの作成
8.
開発の流れ ●
ここからブートローダとOSに分かれる – ブートローダ ● ダウンロードしたOSを起動するプログラム – OS ● 今回はHello Worldを表示するだけのプログラム ● どっちもこれまで書いてきたプログラムをいじ るだけ
9.
ブートローダのプログラム ●
追加ファイル – なし ● 修正ファイル – elf.h,elf.c...メモリ上へのコピーとエントリ・ポ イント対応 – main.c...エントリ・ポイントからの起動を追加
10.
セグメントをRAMに展開する ●
そのままRAMにコピーするだけ ● 以前セグメント情報を表示していた部分を消し て以下のコードを追加 ● コピー先がVAではなくPAになってる。VAでも問 題ないが、あくまで論理アドレスだからPAの方 を利用すべしとのこと memcpy((char *)phdr->physical_addr, (char *)header + phdr- >offset, phdr->file_size); memset((char *)phdr->physical_addr + phdr->file_size, 0, phdr->memory_size - phdr->file_size);
11.
エントリ・ポイントを取得 ●
main.cで呼び出すエントリ・ポイントを返す関 数。ELFファイルのチェックとロードも行われ ている char *elf_load(char *buf) { struct elf_header *header = (struct elf_header * )buf; if (elf_check(header) < 0) return NULL; if (elf_load_program(header) < 0) return NULL; return (char *)header->entry_point; }
12.
OSのプログラム ●
追加ファイル – defines.h...ブートローダと同じ – lib.h,lib.c...ブートローダと同じ – serial.h,serial.c...ブートローダと同じ – startup.s...ブートローダと同じ – main.c...新しく作成。Hello Worldを表示 – ld.scr...OS側用のリンカ – Makefile ● これらのファイルは、~/12step/src/06/os以下 に保存
13.
プログラム修正 ●
main.c – 初期化関数を全て削除 ● データ領域のコピ、BSS領域のクリア、シリア ル・デバイスの初期化はブートローダ側でする ことになったので ● ld.scr – 全てram上に配置されるように変更 ● Makefile – 不要な部分を削除
14.
OS側のエントリ・ポイント ●
OS側のエントリ・ポイントは、ld.scrの ENTRY(“_start”)により、startup.sの_start ラベルの位置をエントリ・ポイントとしてELF ヘッダが作成 ● ブートローダのf()の呼び出しが、OS側の _startの位置から動作を開始することになる ● ブートローダのld.scrにもENTRY(“_start”) はあるが、実はこれは特に意味はない – リセット・ベクタから起動してるから
15.
プログラム実行 ●
osディレクトリでmakeして、それからbootload ディレクトリでmake、make image、make write してからのログ /Users/sandai/12step/src/06/os% sudo cu -l /dev/tty.usbserial-FTG6PQ4H Password: Connected. kzload (kozos boot loader) started. kzload> load ~+lsx kozos Sending kozos, 11 blocks: Give your local XMODEM receive command now. Bytes Sent: 1536 BPS:220 Transfer complete XMODEM receive succeeded! kzload> run starting from entry point: ffc020 Hello World! > echo aaa aaa
16.
補足 ●
もしosのld.scrで.text.startupの部分を削除 していなかったら、エントリ・ポイントのアド レス位置は違うので注意 ● なんなんだろうねこれ。よくわからんわ
17.
3.まとめ
18.
まとめ ●
ブートローダとOSを作成した – OSというか、Hello Worldのプログラム ● ブートローダ側とOS側でスタックとかかぶって るけどいいのかな? – ああ、あれか。スタックだもんな。関数抜け たら全部なくなるから、一緒のとこつかえば いいか ● とりあえずブートローダの仕組みがわかったの でよかった ● 書籍ではまだCPUの動作原理という話が続く が、ここでは省略する
Download now