Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
sandai
PDF, PPTX
2,583 views
【学習メモ#5th】12ステップで作る組込みOS自作入門
12ステップで作る組込みOS自作入門 http://www.amazon.co.jp/dp/4877832394/ 坂井 弘亮(著) カットシステム
Technology
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 33
2
/ 33
3
/ 33
4
/ 33
5
/ 33
6
/ 33
7
/ 33
8
/ 33
9
/ 33
10
/ 33
11
/ 33
12
/ 33
13
/ 33
14
/ 33
15
/ 33
16
/ 33
17
/ 33
18
/ 33
19
/ 33
20
/ 33
21
/ 33
22
/ 33
23
/ 33
24
/ 33
25
/ 33
26
/ 33
27
/ 33
28
/ 33
29
/ 33
30
/ 33
31
/ 33
32
/ 33
33
/ 33
More Related Content
PDF
【学習メモ#3rd】12ステップで作る組込みOS自作入門
by
sandai
PDF
【学習メモ#4th】12ステップで作る組込みOS自作入門
by
sandai
PDF
【学習メモ#1st】12ステップで作る組込みOS自作入門
by
sandai
PDF
【学習メモ#11th】12ステップで作る組込みOS自作入門
by
sandai
PDF
【学習メモ#8th】12ステップで作る組込みOS自作入門
by
sandai
PDF
【学習メモ#7th】12ステップで作る組込みOS自作入門
by
sandai
PDF
【学習メモ#6th】12ステップで作る組込みOS自作入門
by
sandai
PDF
【学習メモ#9th】12ステップで作る組込みOS自作入門
by
sandai
【学習メモ#3rd】12ステップで作る組込みOS自作入門
by
sandai
【学習メモ#4th】12ステップで作る組込みOS自作入門
by
sandai
【学習メモ#1st】12ステップで作る組込みOS自作入門
by
sandai
【学習メモ#11th】12ステップで作る組込みOS自作入門
by
sandai
【学習メモ#8th】12ステップで作る組込みOS自作入門
by
sandai
【学習メモ#7th】12ステップで作る組込みOS自作入門
by
sandai
【学習メモ#6th】12ステップで作る組込みOS自作入門
by
sandai
【学習メモ#9th】12ステップで作る組込みOS自作入門
by
sandai
What's hot
PDF
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
by
Yuto Takei
PDF
2011.09.18 v7から始めるunix まとめ
by
Makiko Konoshima
PDF
0章 Linuxカーネルを読む前に最低限知っておくべきこと
by
mao999
PDF
x86とコンテキストスイッチ
by
Masami Ichikawa
PDF
d-kami x86-1
by
Daisuke Kamikawa
PDF
ラズパイでデバイスドライバを作ってみた。
by
Kazuki Onishi
PDF
プロセスとコンテキストスイッチ
by
Kazuki Onishi
PDF
あるコンテキストスイッチの話
by
nullnilaki
PDF
X86opti01 nothingcosmos
by
nothingcosmos
PDF
とあるDBAの黒い画面(ターミナル)
by
Kazuhiro Yoshikawa
PDF
とあるDBAの黒い画面(ターミナル)II
by
Kazuhiro Yoshikawa
PDF
[Basic 8] プロセスとスレッド / 入出力 / シェル
by
Yuto Takei
PDF
[Basic 9] 並列処理 / 排他制御
by
Yuto Takei
PPT
Altanative macro
by
Motohiro KOSAKI
PPT
リアルタイムOsのカスタマイズ
by
Kazuhiro Takahashi
KEY
core dumpでcode golf
by
Nomura Yusuke
PDF
シェル入門
by
ina job
PPT
d-kami x86-2
by
Daisuke Kamikawa
PDF
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
by
Hirotaka Kawata
PPTX
x86-64/Linuxに独自メモリ空間を勝手増設
by
Minoru Nakamura
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
by
Yuto Takei
2011.09.18 v7から始めるunix まとめ
by
Makiko Konoshima
0章 Linuxカーネルを読む前に最低限知っておくべきこと
by
mao999
x86とコンテキストスイッチ
by
Masami Ichikawa
d-kami x86-1
by
Daisuke Kamikawa
ラズパイでデバイスドライバを作ってみた。
by
Kazuki Onishi
プロセスとコンテキストスイッチ
by
Kazuki Onishi
あるコンテキストスイッチの話
by
nullnilaki
X86opti01 nothingcosmos
by
nothingcosmos
とあるDBAの黒い画面(ターミナル)
by
Kazuhiro Yoshikawa
とあるDBAの黒い画面(ターミナル)II
by
Kazuhiro Yoshikawa
[Basic 8] プロセスとスレッド / 入出力 / シェル
by
Yuto Takei
[Basic 9] 並列処理 / 排他制御
by
Yuto Takei
Altanative macro
by
Motohiro KOSAKI
リアルタイムOsのカスタマイズ
by
Kazuhiro Takahashi
core dumpでcode golf
by
Nomura Yusuke
シェル入門
by
ina job
d-kami x86-2
by
Daisuke Kamikawa
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
by
Hirotaka Kawata
x86-64/Linuxに独自メモリ空間を勝手増設
by
Minoru Nakamura
Viewers also liked
PDF
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
by
Hirotaka Kawata
PDF
【2000行弱!】x86用自作カーネルの紹介
by
Yuma Ohgami
PPTX
ゼロから始める自作 CPU 入門
by
Hirotaka Kawata
PDF
Web系だって低レイヤーがやりたいんだよ! コンパイラことはじめ
by
Nisei Kimura
PDF
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
by
Kishi Shundo
PDF
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
by
kozossakai
PDF
ハッキング実演
by
Ken Ogura
PDF
C++でできる!OS自作入門
by
uchan_nos
PDF
QEMUでARM64bitベアメタルプログラミング
by
Yuma Ohgami
PDF
CTF超入門 (for 第12回セキュリティさくら)
by
kikuchan98
PDF
Ctfのためのpython入門
by
shiracamus
PPTX
マイコンでマルチタスク
by
Katsuhiko Terawaki
PDF
低レイヤー入門
by
demuyan
PPTX
人工知能概論 1
by
Tadahiro Taniguchi
PDF
やってよかったOS作り
by
Hidemi Kawai
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
by
Hirotaka Kawata
【2000行弱!】x86用自作カーネルの紹介
by
Yuma Ohgami
ゼロから始める自作 CPU 入門
by
Hirotaka Kawata
Web系だって低レイヤーがやりたいんだよ! コンパイラことはじめ
by
Nisei Kimura
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
by
Kishi Shundo
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
by
kozossakai
ハッキング実演
by
Ken Ogura
C++でできる!OS自作入門
by
uchan_nos
QEMUでARM64bitベアメタルプログラミング
by
Yuma Ohgami
CTF超入門 (for 第12回セキュリティさくら)
by
kikuchan98
Ctfのためのpython入門
by
shiracamus
マイコンでマルチタスク
by
Katsuhiko Terawaki
低レイヤー入門
by
demuyan
人工知能概論 1
by
Tadahiro Taniguchi
やってよかったOS作り
by
Hidemi Kawai
Similar to 【学習メモ#5th】12ステップで作る組込みOS自作入門
PDF
ELFの動的リンク
by
7shi
PDF
V6 unix in okinawa
by
magoroku Yamamoto
PDF
Fbx解説 (1 構文編) (1)
by
らりお ザ・何とは言わない天然水ソムリエ
PPTX
はりぼて OS で ELF なアプリを起動してみた
by
uchan_nos
PDF
さわってみようTOPPERS/SSP
by
NSaitoNmiri
PDF
CTF for ビギナーズ バイナリ講習資料
by
SECCON Beginners
PDF
PFI Seminar 2010/02/18
by
Preferred Networks
PDF
llvm入門
by
MITSUNARI Shigeo
PDF
ただのリンカを書いた話.pdf
by
simotin13 Miyazaki
PDF
第2回勉強会スライド
by
koturn 0;
PDF
2011.06.11 v7から始めるunix まとめ
by
Makiko Konoshima
PDF
Presentation on your terminal
by
Takuya ASADA
PDF
目grep入門 +解説
by
murachue
PPTX
as-4. 条件分岐と繰り返し
by
kunihikokaneko1
PDF
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)
by
kozossakai
PPT
C++でHello worldを書いてみた
by
firewood
PDF
Hello world make
by
mitsu1119
PPTX
ネイティブコードを語る
by
Kenji Imasaki
PPTX
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...
by
Kaz Aiso
PDF
V6read#3
by
magoroku Yamamoto
ELFの動的リンク
by
7shi
V6 unix in okinawa
by
magoroku Yamamoto
Fbx解説 (1 構文編) (1)
by
らりお ザ・何とは言わない天然水ソムリエ
はりぼて OS で ELF なアプリを起動してみた
by
uchan_nos
さわってみようTOPPERS/SSP
by
NSaitoNmiri
CTF for ビギナーズ バイナリ講習資料
by
SECCON Beginners
PFI Seminar 2010/02/18
by
Preferred Networks
llvm入門
by
MITSUNARI Shigeo
ただのリンカを書いた話.pdf
by
simotin13 Miyazaki
第2回勉強会スライド
by
koturn 0;
2011.06.11 v7から始めるunix まとめ
by
Makiko Konoshima
Presentation on your terminal
by
Takuya ASADA
目grep入門 +解説
by
murachue
as-4. 条件分岐と繰り返し
by
kunihikokaneko1
フィーリングで読む40種類のアセンブラ(オープンソースカンファレンス2013 Tokyo/Spring ライトニングトーク)
by
kozossakai
C++でHello worldを書いてみた
by
firewood
Hello world make
by
mitsu1119
ネイティブコードを語る
by
Kenji Imasaki
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...
by
Kaz Aiso
V6read#3
by
magoroku Yamamoto
【学習メモ#5th】12ステップで作る組込みOS自作入門
1.
12ステップで作る組込みOS自作入門
5thステップ @sandai
2.
【参考書籍】 12ステップで作る組込みOS自作入門 【内容】 1ステップずつ、実際に動かしながらプログラムを発展さ せていく方式で無理なく学べる。OSやハードウェアに詳 しくない方にも理解できるよう に十分な説明を提供 坂井 弘亮(著) カットシステム(2010/5) 【税込価格】 4,410円 【サポートページ】 http://kozos.jp/books/makeos/
3.
もくじ 1.ELF形式 2.各種ヘッダ解説 3.プログラムの修正と追加と実行 4.まとめ
4.
1.ELF形式
5.
オブジェクト・ファイル・フォー
マット ● これまで作成してきた実行形式ファイルは単な るベタバイナリになっているわけではなく、内 部は特定のフォーマットで記述されている – これを一般にオブジェクト・ファイル・フォーマッ トと呼ぶ ● オブジェクト・ファイル・フォーマットはいく つか種類があり、a.out形式やEXE形式、COFF形 式など存在するが、一般的なのはELF形式
6.
ELF形式 ●
gccは標準でコンパイル・リンクで出力する ファイルはELF形式で作成する ● ELF形式が一番扱いやすく問題ない形式らしい
7.
リンクとリンカ ●
複数のオブジェクト・ファイルを結合して実行 形式ファイルを生成するのをリンクと言う – リンクはリンカによって行われる ● 個々のオブジェクト・ファイルもELF形式で内 部のセクションの種類は実行形式ファイルと同 じ。 – それぞれが.dataや.textを持っている ● つまりリンクとは、そういった個々のオブジェ クト・ファイルのセクションをまとめてひとつ の実行形式ファイルにするやつ
8.
セグメントとローダ ●
セグメントはリンク後に生成される – 実行形式ファイルになったときに生成される ● セグメントはローダで利用 ● ローダとは、実行形式ファイルのイメージをメ モリ上に展開する作業を行うプログラム ● ローダはメモリ上に展開するときに、セグメン 情報を見てその通りにメモリ上に展開する – 展開するときはもちろんセグメント単位で行う
9.
セクションとセグメントの違い ●
セクションは実行形式ファイルを作成するリン カのためにある – 個々のオブジェクト・ファイルを結合して実行形式 ファイルを作成するために、といった方が良いかも しれない ● セグメントはローダのためにある – メモリ上に展開するときにセグメント情報の通りに 行う – あとメモリ管理の方式の1つとしても利用されてい ると思ったけどこれは汎用OSだけ?それともそれと は違うセグメントのことか?調べてもわからんかっ た
10.
ELF形式の内部構造 ●
ELF形式のファイルは先頭にELFヘッダを持ち、 内部はセクションとセグメントでそれぞれ独立 した単位で分割されている ● セクションとセグメントの情報はセクション・ ヘッダ、プログラム・ヘッダというヘッダで管 理されている – 具体的なイメージ図は次ページを参照
11.
ELF形式の内部構造の図 169頁 図5.1 ELF形式の内部構造
より
12.
ELF形式のヘッダ情報 ●
ファイルの先頭はELFヘッダ – プログラム・ヘッダ・テーブルやセクション・ヘッ ダ・テーブルのアドレス位置やヘッダの個数などを 知ることができる ● その次にセグメントの情報を管理しているプロ グラム・ヘッダ・テーブル ● 終端にセクション情報を管理しているセクショ ン・ヘッダ・テーブル
13.
セクション・ヘッダとプログラム・
ヘッダ ● ファイル内部ではセクション・ヘッダとプログ ラム・ヘッダによってセクションとセグメント はそれぞれ独立して区分けされ管理している – 当然ヘッダ同士も独立している ● しかし先ほどの図を見る限りではセクションは セグメントに含まれる構成となっている ● これは複数のセクションをひとつのセグメント に含めることで、似た役割をもつセクションを まとめてメモリ上に展開することができるから – 必ずしもセクションがセグメントに含まれる必要は ないが、こっちの方が便利ね
14.
セクションとセグメントのまとめ ●
セクションはリンカが、セグメントはローダが 参照するもの ● リンク前のオブジェクト・ファイルはセグメン トを持たないし、プログラム・ヘッダもない ● リンク後の実行形式ファイルではセクションも セグメントもあるが、この状態でセクションを 削っても実行に問題はない ● どっちも区分けしている感じが似ているけれ ど、それぞれ役割や目的が違う
15.
2.各種ヘッダ解説
16.
ELFヘッダ ●
readelf -a kzload.elfで解析した結果を次の ページに掲載 – 「ELF Header:」の部分がヘッダ領域 ● ELFファイルの先頭に付加されるヘッダなので ELFヘッダと呼ぶ
17.
ELFヘッダ解析部分 ELF Header:
Magic: 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, big endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: Renesas H8/300 Version: 0x1 Entry point address: 0x282 Start of program headers: 52 (bytes into file) Start of section headers: 2352 (bytes into file) Flags: 0x810000 Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 3 Size of section headers: 40 (bytes) Number of section headers: 10 Section header string table index: 7
18.
マジック・ナンバ ●
ヘッダの先頭にある16バイトの識別領域である Magicは、ELFフォーマットのバージョンやOSの 種別などが格納されている – ファイルやデータの種別するために先頭に付加され る数値データを一般にマジック・ナンバと呼ぶ ● 先頭4バイトには必ず「7f 45 4c 46」(0x7f 'E' 'L' 'F')というデータが格納されていて、 これを見ることでそのファイルがELF形式であ ると判断することができる
19.
マジック・ナンバの識別情報 ●
それぞれのバイトデータの意味は以下の通り 171頁 図5.1 先頭16バイトの識別情報 より
20.
マジック・ナンバがある理由 ●
識別情報として最初に確認できるように先頭に バイト単位で配置している – これらの情報を識別した後でないとデータを正しく 読むことができないから ● 9~15のバイトは予約領域、リザーブ領域などと 呼ぶ – 将来的にELF形式が拡張されて何か情報が追加され ても問題ないように用意されている
21.
その他のELFヘッダの意味 172頁 表5.2 ELFヘッダの意味
より
22.
セクション・ヘッダ・テーブル ●
セクションの情報を管理しているヘッダの配列 Section Headers: [Nr] Name Type Addr Off Size ES Flg Lk Inf Al [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] .vectors PROGBITS 00000000 000094 000100 00 WA 0 0 4 [ 2] .text PROGBITS 00000100 000194 000654 00 AX 0 0 2 [ 3] .rodata PROGBITS 00000754 0007e8 0000a4 00 A 0 0 4 [ 4] .data PROGBITS 00fffc20 00088c 000004 00 WA 0 0 4 [ 5] .bss NOBITS 00fffc24 000890 000014 00 WA 0 0 4 [ 6] .comment PROGBITS 00000000 000890 00005a 00 0 0 1 [ 7] .shstrtab STRTAB 00000000 0008ea 000046 00 0 0 1 [ 8] .symtab SYMTAB 00000000 000ac0 0006c0 10 9 76 4 [ 9] .strtab STRTAB 00000000 001180 000250 00 0 0 1 Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings) I (info), L (link order), G (group), x (unknown) O (extra OS processing required) o (OS specific), p (processor specific)
23.
セクション・ヘッダの項目 174頁 表5.3 セクション・ヘッダの意味
より
24.
セクション・ヘッダ解説 ●
セクション名は可変長なのでヘッダにそのまま 格納されていない – .shstrtabセクションにまとめて格納 ● 重要なのはアドレス(Addr)、セクションの位置 (Off)、セクションのサイズ(size) ● アドレスはセクションが配置されている位置 – いわゆるVAにあたる。.dataや.bssはRAM上に配置さ れているアドレス ● セクションの位置やサイズは、ELFファイル内 でどの部分がそのセクションとなるかを表して いる
25.
プログラム・ヘッダ・テーブル ●
セグメントの情報を管理しているヘッダの配列 Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align LOAD 0x000094 0x00000000 0x00000000 0x00100 0x00100 RW 0x1 LOAD 0x000194 0x00000100 0x00000100 0x006f8 0x006f8 R E 0x1 LOAD 0x00088c 0x00fffc20 0x000007f8 0x00004 0x00018 RW 0x1 Section to Segment mapping: Segment Sections... 00 .vectors 01 .text .rodata 02 .data .bss
26.
プログラム・ヘッダの項目 176頁 表5.4 プログラム・ヘッダの意味
より
27.
プログラム・ヘッダ解説 ●
Type – LOADはメモリ上にロードされるセグメントというこ と。他に、動的リンク情報やプログラム・ヘッダ自 身がある ● Offset – ELFファイルの内部でのセグメント位置 ● FilSiz、MemSiz – ファイル中のサイズと、メモリ上のサイズ – 必ずしも同じ大きさではない
28.
3.プログラムの修正と追加と実行
29.
プログラムの修正と追加 ●
追加ファイル – elf.h、elf.c...ELF形式の解析 ● 修正ファイル – main.c...ELF形式の解析コマンド追加 – Makefile...elf.oをコンパイル対象にする ● 修正部分はrunコマンド追加しただけ – ELFファイルのうち、セグメント情報を表示するコ マンド
30.
elf.c ●
今回はkzload.elfのセグメント情報をターミナ ルに表示するプログラムになっている ● 構造体が大きいのでわかりにくい – 構造体はELFヘッダの部分と、プログラムヘッダの 部分を取得する感じになっている – その構造体のデータを表示するだけ ● たぶん次からELFファイルをメモリに展開する プログラムになるんだと思う
31.
セクション・ヘッダが末尾の理由 ●
プログラム・ヘッダがELFファイルの先頭付近 にあるのは、ファイルをダウンロードしながら メモリにロードできるようにするため – バッファ領域が小さいときはこういった形になる ● メモリの配置先情報を最初に確認できるように してるわけ ● セクション・ヘッダが末尾なのはロードに必要 ないから。サイズ節約やメモリ節約のときに、 セクション・ヘッダを捨てやすくしてる – 末尾にあったらオフセットを計算しなおしたり、面 倒なことせずにすむ
32.
4.まとめ
33.
まとめ ●
ELF形式のファイルの内部構造を解析できるよ うになった ● 具体的には内部におけるそれぞれのヘッダを操 作できるようになった ● セグメント・ヘッダの取得はできるようになっ たので、それを元に内容をメモリ上に展開する プログラムを書くことになるのかな ● あ、あと書籍では論理回路について解説してい るページがあるけど、ここでは省く
Download