annotate slide/thesis.md @ 7:79fb933328ec default tip

slide
author tobaru
date Thu, 22 Feb 2018 12:20:52 +0900
parents 3a99fc0296ce
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
1 title:Gears OS on Raspberry Pi
7
tobaru
parents: 6
diff changeset
2 author:河野研 桃原優
4
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
3 profile:
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
4
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
5 # Raspberry Pi 上での Gears OS
7
tobaru
parents: 6
diff changeset
6 - 本研究室ではCbC(Continuation base C)言語を用いて実装する Gears OS の研究を行っている。
5
0aabd94a0126 スライド修正
tobaru
parents: 4
diff changeset
7 - 本研究では、ARM で動くシングルボードコンピュータである Raspberry Pi で Gears OS を動かせるようになる事で、ハードウェア上でもメタレベルの処理、並列実行ができるプログラミングを記述できるようになる事を目指している。
7
tobaru
parents: 6
diff changeset
8 - メタレベルの処理では、メモリ管理、スレッド管理、CPU や GPU の資源管理を記述 することができる。
4
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
9
7
tobaru
parents: 6
diff changeset
10 # スライドの流れ
tobaru
parents: 6
diff changeset
11 - RaspberryPi上でのGearsOSの実装
tobaru
parents: 6
diff changeset
12 - RaspberryPi上でのCbCのmake
tobaru
parents: 6
diff changeset
13 - make時間の比較
tobaru
parents: 6
diff changeset
14 - OSX上でのCbCのCrossCompile
tobaru
parents: 6
diff changeset
15 - Linux上でのCbCのCrossCompile
tobaru
parents: 6
diff changeset
16 - ARM版xv6をKVMで立ち上げる
tobaru
parents: 6
diff changeset
17
tobaru
parents: 6
diff changeset
18 # RaspberryPi上でのGearsOSの実装
tobaru
parents: 6
diff changeset
19 - RaspberryPiはARMのバイナリを扱う
tobaru
parents: 6
diff changeset
20 - まずはCbCコンパイラをARMのバイナリを生成するように作成する。
tobaru
parents: 6
diff changeset
21 - その後に、作成したARM版xv6を参考にCbC言語を使ってRaspberryPiで動くGearsOSを実装する。
6
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
22
4
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
23
7
tobaru
parents: 6
diff changeset
24 # xv6
tobaru
parents: 6
diff changeset
25 - xv6 とはUNIX V6というOS をANSI C(標準規格のC言語) に書き換えたシンプルな OS である。
tobaru
parents: 6
diff changeset
26 - UNIX V6 は1975年にリリースされた古いOSでANSI C以前のC言語で実装されていた。
tobaru
parents: 6
diff changeset
27 - ARMのバイナリを生成するARM版xv6 は Raspberry Pi 上で動かす事ができる。
tobaru
parents: 6
diff changeset
28
tobaru
parents: 6
diff changeset
29 # RaspberryPi上でCbC言語のmake
tobaru
parents: 6
diff changeset
30 - RaspberryPi上でGearsOSを動かしたいので、まずはRaspberryPi上でCbCのmakeを行なった。
tobaru
parents: 6
diff changeset
31
tobaru
parents: 6
diff changeset
32 # RaspberryPi上でCbC言語のmake
tobaru
parents: 6
diff changeset
33 - Raspberry Pi上でGearsOSを実装するために、LLVMで実装したCbC言語のmakeを試した。
tobaru
parents: 6
diff changeset
34 - Raspberry Pi 1 のメモリは 256MB と小さいため、 CbC言語 を make することができない。
tobaru
parents: 6
diff changeset
35 - Raspberry Pi 3 だとメモリは 1GB あり CbC言語 を make できるが、時間がかかる。
tobaru
parents: 6
diff changeset
36 - Raspberry Pi の OS である Rasbian は qemu によるメモリの拡張もできないので別のOS上でRasbianを立ち上げてもmake時間を短縮できない。
tobaru
parents: 6
diff changeset
37
4
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
38
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
39 # make 時間の比較
7
tobaru
parents: 6
diff changeset
40 - 次の環境を用いて、LLVM上に実装されたCbCのmake時間の比較を行なった
tobaru
parents: 6
diff changeset
41 <div align="center"><img src="./images/maketime.pdf" width="900" height="250" style="center"></div>
tobaru
parents: 6
diff changeset
42 - 毎回756GB,32Coreのサーバをフル稼働させるのは現実的でないが、16GB,4Coreの環境でもmake時間が早くなっているのがわかる。
tobaru
parents: 6
diff changeset
43
tobaru
parents: 6
diff changeset
44
tobaru
parents: 6
diff changeset
45
tobaru
parents: 6
diff changeset
46 # Ninja
tobaru
parents: 6
diff changeset
47 - それぞれのサーバではGoogleによって開発されたbuildシステムninja-buildをもちいてmakeを行なった。
tobaru
parents: 6
diff changeset
48 - ninja-buildは適切なCore数で実行してくれるので、CPUの数を調べて指定する手間を省ける。
tobaru
parents: 6
diff changeset
49 - 環境によってはCPUの数を指定しない場合よりかなり高速にmakeを行える。
4
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
50
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
51 # CrossCompile
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
52 - CrossCompile を行うことで make 時間の問題を解決する方法がある。
7
tobaru
parents: 6
diff changeset
53 - CrossCompile とは、別の OS で実行可能なコードを生成するコンパイルの手法である。
tobaru
parents: 6
diff changeset
54 - Raspbian 以外の OS 環境であらかじめ Raspberry Pi で CbC言語 が動くように CrossCompile を行い、その コードを Raspberry Pi に移す事で、実行できるようになる。
tobaru
parents: 6
diff changeset
55 - Raspberry Pi の OS である Rasbian は qemu によるメモリの拡張もできないので、CrossCompileで Raspberry Pi 上に CbC言語 を実装する方が好ましい。
4
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
56
7
tobaru
parents: 6
diff changeset
57 # CrossCompileを行なった環境
tobaru
parents: 6
diff changeset
58 - OSX
tobaru
parents: 6
diff changeset
59 - Linux
tobaru
parents: 6
diff changeset
60 - LLVM/Clangで実装されたCbC
tobaru
parents: 6
diff changeset
61 - GCCで実装されたCbC
6
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
62
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
63 # OSX CrossCompile
7
tobaru
parents: 6
diff changeset
64 - OSX上でCbC言語を実装を試みた
6
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
65 - OSX上でCrossCompileを行うとMach-Oのバイナリが生成される。
7
tobaru
parents: 6
diff changeset
66 - Mach-Oのローダーを作らなければならず、実装は困難である。
6
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
67
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
68
4
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
69 # Linux CrossCompile
7
tobaru
parents: 6
diff changeset
70 - Linux環境でCbC言語を動かす際にCrossCompileを行なう方法がある。
6
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
71 - RaspberryPiはARMのコードを生成するので、CrossCompileによってARMのコードを生成すればRaspberry Pi でも実行可能なファイルを作ることができる。
7
tobaru
parents: 6
diff changeset
72 % # T図形
tobaru
parents: 6
diff changeset
73 % - CbC言語 を Raspberry Pi で動かすためのアプローチの手法を、I と T の形をした図の組み合わせによって説明を行う。
tobaru
parents: 6
diff changeset
74 % - I の上部分に cbclang や Xv6 などのソースコード名を、下部分にその機能の記述言語を記してある
tobaru
parents: 6
diff changeset
75 % - T の上部分は左に入力されるファイル、右に出力されるその機能によって出力されるファイルが記され、下部分にその機能の記述言語が記されている。
6
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
76 % <div align="center"><img src="./images/examples_2.pdf" style="center"></div>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
77
7
tobaru
parents: 6
diff changeset
78 # Linux上でのCbC言語の実装
tobaru
parents: 6
diff changeset
79 - OSX上に立ち上げられたLinux で ARM版xv6を使い、CbC言語のファイルからa.outを出力するまでの過程を図に示す。
tobaru
parents: 6
diff changeset
80 - CbC言語は C によって記述されているため、CからARM形式の.oファイルを生成し、.oからARMのa.outを出力する。
tobaru
parents: 6
diff changeset
81 - これらはARM形式なのでRaspberryPiで実行できるファイルである。
tobaru
parents: 6
diff changeset
82 <div align="center"><img src="./images/OSX_Linux_VM.pdf" style="center"></div>
6
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
83
7
tobaru
parents: 6
diff changeset
84 % - OSX上に立ち上げられたLinux で CbC言語 のCrossCompileを行う過程を図に示す。
6
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
85
7
tobaru
parents: 6
diff changeset
86 # CbC言語の種類
tobaru
parents: 6
diff changeset
87 - CbC言語 には、2種類の方法によって実装されている。
tobaru
parents: 6
diff changeset
88 - LLVM/Clang 上に実装したCbC
tobaru
parents: 6
diff changeset
89 - GCC 上に実装したCbC
6
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
90
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
91 # LLVM/Clang
7
tobaru
parents: 6
diff changeset
92 - LLVM とは任意のプログラミング言語のコンパイルをサポートする事を目的としたプロジェクトです。
tobaru
parents: 6
diff changeset
93 - モジューラと再利用可能なコンパイラとツールチェーン技術の集まりである。
tobaru
parents: 6
diff changeset
94 - Clang はLLVMをバックエンドとしたコンパイラで、C/C++/Objective-C の高速なコンパイルを目的としている。
5
0aabd94a0126 スライド修正
tobaru
parents: 4
diff changeset
95
6
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
96 # LLVM CrossCompile
7
tobaru
parents: 6
diff changeset
97 - LLVM上に実装されたCbCに対してCrossCompileを行なった。
tobaru
parents: 6
diff changeset
98 - ARM版xv6のMakefile に変更を加えることで LLVM/Clang 上に実装 された CbC言語 で Raspberry Pi で実行できる ARM の コードを生成できるようにCrossCompilerを作ったが、動作していない
6
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
99 - LLVMかxv6のどちらに修正が必要なのか分かってないのでデバッガを使って調査していく
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
100
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
101
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
102 # KVM
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
103 - ARM版のxv6をデバッグするためにKVMを使用する。
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
104 - KVMとは完全仮想化を実現できる機能の事である。
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
105 - 完全仮想化なので、kernelに変更を加えなくても別のOSを動かせるメリットがある。
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
106 - KVMはqemuによって操作を行う。
7
tobaru
parents: 6
diff changeset
107 - qemu-system-armはRaspberryPiをサポートしていなかったが、KVMを立ち上げるために使うxmlファイルに変更を加える事で、KVMを立ち上げることに成功した。
tobaru
parents: 6
diff changeset
108 % - qemu-system-armはRaspberryPiをサポートしていなかったが、KVMを立ち上げるために使うxmlファイルにarch='armv7l' machine='versatileab'を指定する事で、解決した。
6
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
109
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
110
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
111 # GCC CrossCompile
7
tobaru
parents: 6
diff changeset
112 - GCC上に実装されたCbCについてCrossCompileを行なった。
6
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
113 - GCC は C/C++/Objective-C などを様々な言語をコンパイルすることのできるコンパイラである。
7
tobaru
parents: 6
diff changeset
114 - GCCで実装されたCbC言語についてはARMのコードを生成するようにMakefileを作成した。
6
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
115 - Linux上でARMのコードを生成するためのツールチェーンであるgcc-linux-gnuを使う事でxv6をKVM上で動作させる事に成功した。
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
116
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
117
7
tobaru
parents: 6
diff changeset
118 % - LLVMと同様に動作していなかったが、GCCで実装されたCbC言語コンパイラのバージョンをあげる事で、 動作させる事に成功した。
6
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
119
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
120 # 今後の課題
7
tobaru
parents: 6
diff changeset
121 - LLVMで実装されたでCbCで作成したxv6が動作しない原因をKVMを用いて調べる。
6
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
122 - 必要であれば、xv6またはLLVMを修正していく。
7
tobaru
parents: 6
diff changeset
123 - ARM版xv6のkernelの構文に沿ってCbC言語で書き換える部分を考察する。
6
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
124
4
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
125
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
126 # T図形
7
tobaru
parents: 6
diff changeset
127 - CbC言語 を Raspberry Pi で動かすためのアプローチの手法を、I と T の形をした図の組み合わせによって説明を行う。
6
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
128 - I の上部分に cbclang や Xv6 などのソースコード名を、下部分にその機能の記述言語を記してある
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
129 - T の上部分は左に入力されるファイル、右に出力されるその機能によって出力されるファイルが記され、下部分にその機能の記述言語が記されている。
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
130
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
131 <div align="center"><img src="./images/examples_2.pdf" style="center"></div>
4
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
132
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
133
7
tobaru
parents: 6
diff changeset
134 # Linux上でのCbC言語の実装
tobaru
parents: 6
diff changeset
135 - OSX上に立ち上げられたLinux で CbC言語 のCrossCompileを行う過程を図に示す。
tobaru
parents: 6
diff changeset
136 - CbC言語は C によって記述されているため、CからARM形式の.oファイルを生成し、.oからARMのa.outを出力する。
4
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
137 - これらはARM形式なのでRaspberryPiで実行できるファイルである。
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
138 <div align="center"><img src="./images/OSX_Linux_VM.pdf" style="center"></div>
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
139
6
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
140 # LLVM CrossCompile Makefile
4
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
141 - makefileの一部を下に示す。
7
tobaru
parents: 6
diff changeset
142 - CCはコンパイラで、すでにmakeしたCbC言語のコンパイラを指定している。
4
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
143 - AS(アセンブラ)やLD(リンカー)はarm-linux-gnuに続くコマンドを指定する。
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
144 - CFLAGS にターゲットオプションで arm-linux-gnueabihfを指定することで、ARMのコードを生成することができる。
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
145 - libgcc
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
146
6
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
147
4
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
148 ```c
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
149 QEMU = qemu-system-arm
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
150
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
151 include makefile.inc
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
152 CC = /usr/local/cbclang/bin/clang
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
153 AS = arm-linux-gnu-as
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
154 LD = arm-linux-gnu-ld
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
155 OBJCOPY = arm-linux-gnu-objcopy
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
156 OBJDUMP = arm-linux-gnu-objdump
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
157
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
158 CFLAGS = -target arm-linux-gnueabihf -march=armv7a -fno-pic -static -fno-builtin -fno-strict-aliasing -Wall -I. -I ../cbclang/arm -g -O0
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
159 LDFLAGS = --noinhibit-exec
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
160 ASFLAGS = -target arm-linux-gnueabihf
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
161
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
162 LIBGCC = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
163
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
164 # link the libgcc.a for __aeabi_idiv. ARM has no native support for div
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
165 LIBS =/net/open/RaspberryPi/rasbian-img/usr/lib/gcc/arm-linux-gnueabihf/6/libgcc.a
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
166 ```
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
167
6
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
168 # LinuxのCPUコア
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
169 - CPUごとのコア数 18
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
170 - 論理プロセッサー 72
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
171 ```c
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
172 +dalmore+one grep cpu.cores /proc/cpuinfo | sort -u
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
173 cpu cores : 18
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
174 +dalmore+one grep processor /proc/cpuinfo | wc -l
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
175 72
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
176 ```
4
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
177
6
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
178 # OSXコア数
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
179 ```c
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
180 +firefly+one system_profiler SPHardwareDataType
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
181 Hardware:
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
182
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
183 Hardware Overview:
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
184
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
185 Model Name: Mac Pro
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
186 Model Identifier: MacPro5,1
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
187 Processor Name: 6-Core Intel Xeon
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
188 Processor Speed: 2.66 GHz
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
189 Number of Processors: 2
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
190 Total Number of Cores: 12
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
191 L2 Cache (per Core): 256 KB
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
192 L3 Cache (per Processor): 12 MB
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
193 Memory: 16 GB
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
194 Processor Interconnect Speed: 6.4 GT/s
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
195 Boot ROM Version: MP51.007F.B03
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
196 SMC Version (system): 1.39f11
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
197 SMC Version (processor tray): 1.39f11
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
198 Serial Number (system): YM20300FGWR
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
199 Serial Number (processor tray): J515201PEBH8C
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
200 Hardware UUID: F6CA8AEA-6A98-53A9-826F-B3A3D465F23B
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
201 ```
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
202
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
203 # arm1.xml
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
204 ```c
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
205 <domain type='qemu' id='22'>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
206 <name>arm1</name>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
207 <uuid>8028f71a-1db8-40a4-94fa-5a4a42014273</uuid>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
208 <memory>131072</memory>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
209 <currentMemory>131072</currentMemory>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
210 <vcpu>1</vcpu>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
211 <os>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
212 <type arch='armv7l' machine='versatileab'>hvm</type>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
213 <kernel>/var/lib/libvirt/images/zImage-versatile-2.6.24-rc7.armv5tel</kernel>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
214 <cmdline>&quot;root=0800&quot;</cmdline>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
215 <boot dev='hd'/>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
216 </os>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
217 <features>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
218 <acpi/>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
219 </features>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
220 <clock offset='utc'/>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
221 <on_poweroff>destroy</on_poweroff>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
222 <on_reboot>restart</on_reboot>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
223 <on_crash>restart</on_crash>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
224 <devices>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
225 <emulator>/bin/qemu-system-arm</emulator>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
226 <disk type='file' device='disk'>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
227 <driver name='qemu' type='raw'/>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
228 <source file='/var/lib/libvirt/images/arm1.img'/>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
229 <target dev='hdc' bus='scsi'/>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
230 </disk>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
231 <input type='mouse' bus='ps2'/>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
232 <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0' passwd='43u@khii'>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
233 <listen type='address' address='0.0.0.0'/>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
234 </graphics>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
235 <video>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
236 <model type='cirrus' vram='16384' heads='1' primary='yes'/>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
237 </video>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
238 </devices>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
239 </domain>
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
240
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
241 ```
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
242
3a99fc0296ce mindmap slide 修正
tobaru
parents: 5
diff changeset
243 # GCC CrossCompile makefile
4
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
244 - CC にarm-linux-gnu-gccを指定することでARMのコードを生成できるようになる
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
245 - AS(アセンブラ)やLD(リンカー)はarm-linux-gnuに続くコマンドを指定する。
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
246 ```c
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
247 QEMU = qemu-system-arm
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
248
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
249 include makefile.inc
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
250 CC = arm-linux-gnu-gcc
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
251 AS = arm-linux-gnu-as
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
252 LD = arm-linux-gnu-ld
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
253 OBJCOPY = arm-linux-gnu-objcopy
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
254 OBJDUMP = arm-linux-gnu-objdump
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
255
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
256 CFLAGS = -fno-pic -static -fno-builtin -fno-strict-aliasing -Wall -I. -g -O0
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
257
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
258 ASFLAGS =
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
259
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
260 LIBGCC = $(shell $(CC) -print-libgcc-file-name)
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
261
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
262 LINK_BIN = $(call quiet-command,$(LD) $(LDFLAGS) ¥
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
263 -T $(1) -o $(2) $(3) $(LIBS) -b binary $(4), " LINK $(TARGET_DIR)$@")
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
264
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
265 LINK_INIT = $(call quiet-command,$(LD) $(LDFLAGS) ¥
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
266 $(1) -o $@.out $<, " LINK $(TARGET_DIR)$@")
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
267 OBJCOPY_INIT = $(call quiet-command,$(OBJCOPY) ¥
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
268 -S -O binary --prefix-symbols="_binary_$@" $@.out $@, " OBJCOPY $(TARGET_DIR)$@")
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
269 ```
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
270
d0d503dd3fd5 thsis_slide
tobaru
parents:
diff changeset
271
7
tobaru
parents: 6
diff changeset
272 # T図形
tobaru
parents: 6
diff changeset
273 - CbC言語 を Raspberry Pi で動かすためのアプローチの手法を、I と T の形をした図の組み合わせによって説明を行う。
tobaru
parents: 6
diff changeset
274 - I の上部分に cbclang や Xv6 などのソースコード名を、下部分にその機能の記述言語を記してある
tobaru
parents: 6
diff changeset
275 - T の上部分は左に入力されるファイル、右に出力されるその機能によって出力されるファイルが記され、下部分にその機能の記述言語が記されている。
tobaru
parents: 6
diff changeset
276
tobaru
parents: 6
diff changeset
277 <div align="center"><img src="./images/examples_2.pdf" style="center"></div>