SlideShare a Scribd company logo
QEMUでARM64bitベアメタルプログラミング
大神 祐真
yuma@ohgami.jp
2016/06/18
2016/06/18 大神 祐真 (yuma.ohgami.jp) 2
● 大神 祐真
– yuma@ohgami.jp
● 組み込み系のプログラマ
● http://yuma.ohgami.jp
– やっている事のまとめ
2016/06/18 大神 祐真 (yuma.ohgami.jp) 3
Raspberry Pi 3
2016/06/18 大神 祐真 (yuma.ohgami.jp) 4
Raspberry Pi 3
ARM 64ビットCPU
搭載
2016/06/18 大神 祐真 (yuma.ohgami.jp) 5
カーネル(Linux)
アプリ(Raspbian)
共に、現状は32ビット
64ビット: ARMv8
32ビットアーキテクチャ
2016/06/18 大神 祐真 (yuma.ohgami.jp) 6
OS無しで、
素のハードウェア(ベアメタル)を
直接制御してみる
2016/06/18 大神 祐真 (yuma.ohgami.jp) 7
OS無しで、
素のハードウェア(ベアメタル)を
直接制御してみる
ベアメタルプログラミング
2016/06/18 大神 祐真 (yuma.ohgami.jp) 8
実機での開発作業は
何かと面倒
とはいえ、
2016/06/18 大神 祐真 (yuma.ohgami.jp) 9
QEMUで効率化
実機での開発作業は
何かと面倒
とはいえ、
2016/06/18 大神 祐真 (yuma.ohgami.jp) 10
最も簡単なプログラム
b .
start.S
2016/06/18 大神 祐真 (yuma.ohgami.jp) 11
最も簡単なプログラム
[PC]$ aarch64-linux-gnu-as 
-o start.o start.S
[PC]$ aarch64-linux-gnu-objcopy 
-O binary start.o start.img
[PC]$ qemu-system-aarch64 
-cpu cortex-a57 -M virt 
-kernel start.img
2016/06/18 大神 祐真 (yuma.ohgami.jp) 12
C言語を使う
mov x0, #0x40080000
mov sp, x0
bl main
b .
start.S
int main(void)
{
return 0;
}
main.c
2016/06/18 大神 祐真 (yuma.ohgami.jp) 13
最も簡単なプログラム
[PC]$ aarch64-linux-gnu-as 
-o start.o start.S
[PC]$ aarch64-linux-gnu-gcc 
-c -o main.o main.c
[PC]$ aarch64-linux-gnu-ld 
-Ttext 0x40080000 
-o out.elf start.o main.o
2016/06/18 大神 祐真 (yuma.ohgami.jp) 14
最も簡単なプログラム
[PC]$ aarch64-linux-gnu-objcopy 
-O binary out.elf out.img
[PC]$ qemu-system-aarch64 
-cpu cortex-a57 -M virt 
-kernel out.img
2016/06/18 大神 祐真 (yuma.ohgami.jp) 15
シリアル通信でHello world!
int main(void)
{
put_str("Hello world!");
return 0;
}
2016/06/18 大神 祐真 (yuma.ohgami.jp) 16
シリアル通信でHello world!
#define DR 
(*(volatile unsigned int *)0x09000000)
#define FR 
(*(volatile unsigned int *)0x09000018)
void put_char(char ch)
{
while (FR & (1U << 5));
DR = (unsigned int)ch;
}
void put_str(char *str)
{
while (*str != '0')
put_char(*str++);
}
2016/06/18 大神 祐真 (yuma.ohgami.jp) 17
シリアル通信でHello world!
2016/06/18 大神 祐真 (yuma.ohgami.jp) 18
“ラズパイ3 ” ベアメタル
で検索
2016/06/18 大神 祐真 (yuma.ohgami.jp) 19
2016/06/18 大神 祐真 (yuma.ohgami.jp) 20
ご清聴、
ありがとうございました!

More Related Content

What's hot

3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
Kuniyasu Suzaki
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
Akihiro Suda
 
はりぼて OS で ELF なアプリを起動してみた
はりぼて OS で ELF なアプリを起動してみたはりぼて OS で ELF なアプリを起動してみた
はりぼて OS で ELF なアプリを起動してみた
uchan_nos
 
Yoctoで綺麗なkernel configを作る
Yoctoで綺麗なkernel configを作るYoctoで綺麗なkernel configを作る
Yoctoで綺麗なkernel configを作る
shimadah
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
 
FPGAをロボット(ROS)で「やわらかく」使うには
FPGAをロボット(ROS)で「やわらかく」使うにはFPGAをロボット(ROS)で「やわらかく」使うには
FPGAをロボット(ROS)で「やわらかく」使うには
Hideki Takase
 
Rust で RTOS を考える
Rust で RTOS を考えるRust で RTOS を考える
Rust で RTOS を考える
ryuz88
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
一路 川染
 
Zynq mp勉強会資料
Zynq mp勉強会資料Zynq mp勉強会資料
Zynq mp勉強会資料
一路 川染
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
 
Protocol Buffers 入門
Protocol Buffers 入門Protocol Buffers 入門
Protocol Buffers 入門
Yuichi Ito
 
CUDAプログラミング入門
CUDAプログラミング入門CUDAプログラミング入門
CUDAプログラミング入門
NVIDIA Japan
 
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)Takeshi HASEGAWA
 
GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -
zgock
 
レガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free osレガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free os
uchan_nos
 
UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動
uchan_nos
 
画像処理の高性能計算
画像処理の高性能計算画像処理の高性能計算
画像処理の高性能計算
Norishige Fukushima
 

What's hot (20)

3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
はりぼて OS で ELF なアプリを起動してみた
はりぼて OS で ELF なアプリを起動してみたはりぼて OS で ELF なアプリを起動してみた
はりぼて OS で ELF なアプリを起動してみた
 
Yoctoで綺麗なkernel configを作る
Yoctoで綺麗なkernel configを作るYoctoで綺麗なkernel configを作る
Yoctoで綺麗なkernel configを作る
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
FPGAをロボット(ROS)で「やわらかく」使うには
FPGAをロボット(ROS)で「やわらかく」使うにはFPGAをロボット(ROS)で「やわらかく」使うには
FPGAをロボット(ROS)で「やわらかく」使うには
 
Rust で RTOS を考える
Rust で RTOS を考えるRust で RTOS を考える
Rust で RTOS を考える
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
 
Zynq mp勉強会資料
Zynq mp勉強会資料Zynq mp勉強会資料
Zynq mp勉強会資料
 
initramfsについて
initramfsについてinitramfsについて
initramfsについて
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
Protocol Buffers 入門
Protocol Buffers 入門Protocol Buffers 入門
Protocol Buffers 入門
 
CUDAプログラミング入門
CUDAプログラミング入門CUDAプログラミング入門
CUDAプログラミング入門
 
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
 
GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -
 
レガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free osレガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free os
 
UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動
 
画像処理の高性能計算
画像処理の高性能計算画像処理の高性能計算
画像処理の高性能計算
 

Viewers also liked

フルスクラッチ自作OS(OS5)の紹介
フルスクラッチ自作OS(OS5)の紹介フルスクラッチ自作OS(OS5)の紹介
フルスクラッチ自作OS(OS5)の紹介
Yuma Ohgami
 
【シェル芸】コマンド7つで簡易コンテナ
【シェル芸】コマンド7つで簡易コンテナ【シェル芸】コマンド7つで簡易コンテナ
【シェル芸】コマンド7つで簡易コンテナ
Yuma Ohgami
 
Linux : The Common Mailbox Framework
Linux : The Common Mailbox FrameworkLinux : The Common Mailbox Framework
Linux : The Common Mailbox Framework
Mr. Vengineer
 
Introduction to raspberry pi_エンジニア勉強会20130618
Introduction to raspberry pi_エンジニア勉強会20130618Introduction to raspberry pi_エンジニア勉強会20130618
Introduction to raspberry pi_エンジニア勉強会20130618
エンジニア勉強会 エスキュービズム
 
【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門 【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門
sandai
 
【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門 【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門
sandai
 
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門
sandai
 
【学習メモ#6th】12ステップで作る組込みOS自作入門
【学習メモ#6th】12ステップで作る組込みOS自作入門 【学習メモ#6th】12ステップで作る組込みOS自作入門
【学習メモ#6th】12ステップで作る組込みOS自作入門
sandai
 
【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門
sandai
 
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門
sandai
 
【学習メモ#5th】12ステップで作る組込みOS自作入門
【学習メモ#5th】12ステップで作る組込みOS自作入門【学習メモ#5th】12ステップで作る組込みOS自作入門
【学習メモ#5th】12ステップで作る組込みOS自作入門
sandai
 
【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門 【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門
sandai
 
Osc2013 tokyospring
Osc2013 tokyospringOsc2013 tokyospring
Osc2013 tokyospring
Masataka Tsukamoto
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
Hirotaka Kawata
 
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
Kishi Shundo
 
Zynq MPSoC勉強会 Codec編
Zynq MPSoC勉強会 Codec編Zynq MPSoC勉強会 Codec編
Zynq MPSoC勉強会 Codec編
Tetsuya Morizumi
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
sandai
 
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
kozossakai
 
やってよかったOS作り
やってよかったOS作りやってよかったOS作り
やってよかったOS作り
Hidemi Kawai
 
低レイヤー入門
低レイヤー入門低レイヤー入門
低レイヤー入門demuyan
 

Viewers also liked (20)

フルスクラッチ自作OS(OS5)の紹介
フルスクラッチ自作OS(OS5)の紹介フルスクラッチ自作OS(OS5)の紹介
フルスクラッチ自作OS(OS5)の紹介
 
【シェル芸】コマンド7つで簡易コンテナ
【シェル芸】コマンド7つで簡易コンテナ【シェル芸】コマンド7つで簡易コンテナ
【シェル芸】コマンド7つで簡易コンテナ
 
Linux : The Common Mailbox Framework
Linux : The Common Mailbox FrameworkLinux : The Common Mailbox Framework
Linux : The Common Mailbox Framework
 
Introduction to raspberry pi_エンジニア勉強会20130618
Introduction to raspberry pi_エンジニア勉強会20130618Introduction to raspberry pi_エンジニア勉強会20130618
Introduction to raspberry pi_エンジニア勉強会20130618
 
【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門 【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門
 
【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門 【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門
 
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門
 
【学習メモ#6th】12ステップで作る組込みOS自作入門
【学習メモ#6th】12ステップで作る組込みOS自作入門 【学習メモ#6th】12ステップで作る組込みOS自作入門
【学習メモ#6th】12ステップで作る組込みOS自作入門
 
【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門
 
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門
 
【学習メモ#5th】12ステップで作る組込みOS自作入門
【学習メモ#5th】12ステップで作る組込みOS自作入門【学習メモ#5th】12ステップで作る組込みOS自作入門
【学習メモ#5th】12ステップで作る組込みOS自作入門
 
【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門 【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門
 
Osc2013 tokyospring
Osc2013 tokyospringOsc2013 tokyospring
Osc2013 tokyospring
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
 
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
 
Zynq MPSoC勉強会 Codec編
Zynq MPSoC勉強会 Codec編Zynq MPSoC勉強会 Codec編
Zynq MPSoC勉強会 Codec編
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
 
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
 
やってよかったOS作り
やってよかったOS作りやってよかったOS作り
やってよかったOS作り
 
低レイヤー入門
低レイヤー入門低レイヤー入門
低レイヤー入門
 

More from Yuma Ohgami

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
 
Daisy OSでデイジーワールド!
Daisy OSでデイジーワールド!Daisy OSでデイジーワールド!
Daisy OSでデイジーワールド!
Yuma Ohgami
 
バイナリ生物学でデイジーワールド
バイナリ生物学でデイジーワールドバイナリ生物学でデイジーワールド
バイナリ生物学でデイジーワールド
Yuma Ohgami
 
OSC2023 Tokyo/Fall展示内容(予定)と技術書典15向け新刊(執筆中)のご紹介
OSC2023 Tokyo/Fall展示内容(予定)と技術書典15向け新刊(執筆中)のご紹介OSC2023 Tokyo/Fall展示内容(予定)と技術書典15向け新刊(執筆中)のご紹介
OSC2023 Tokyo/Fall展示内容(予定)と技術書典15向け新刊(執筆中)のご紹介
Yuma Ohgami
 
去年「バイナリ生物学」で今年「PDP-7」だったのはなぜなのか?
去年「バイナリ生物学」で今年「PDP-7」だったのはなぜなのか?去年「バイナリ生物学」で今年「PDP-7」だったのはなぜなのか?
去年「バイナリ生物学」で今年「PDP-7」だったのはなぜなのか?
Yuma Ohgami
 
60年代ゲームハードPDP-7のご紹介
60年代ゲームハードPDP-7のご紹介60年代ゲームハードPDP-7のご紹介
60年代ゲームハードPDP-7のご紹介
Yuma Ohgami
 
来週の展示内容紹介
来週の展示内容紹介来週の展示内容紹介
来週の展示内容紹介
Yuma Ohgami
 
DaisyOS(仮)のご紹介
DaisyOS(仮)のご紹介DaisyOS(仮)のご紹介
DaisyOS(仮)のご紹介
Yuma Ohgami
 
セキュリティ・ネクストキャンプ2022 オンライン [N9] バイナリ生物学入門
セキュリティ・ネクストキャンプ2022 オンライン [N9] バイナリ生物学入門セキュリティ・ネクストキャンプ2022 オンライン [N9] バイナリ生物学入門
セキュリティ・ネクストキャンプ2022 オンライン [N9] バイナリ生物学入門
Yuma Ohgami
 
セキュリティ・ネクストキャンプ2022 オンライン [N5] バイナリ生物学入門
セキュリティ・ネクストキャンプ2022 オンライン [N5] バイナリ生物学入門セキュリティ・ネクストキャンプ2022 オンライン [N5] バイナリ生物学入門
セキュリティ・ネクストキャンプ2022 オンライン [N5] バイナリ生物学入門
Yuma Ohgami
 
『へにゃぺんて』のこれまでを振り返るブログ記事の紹介
『へにゃぺんて』のこれまでを振り返るブログ記事の紹介『へにゃぺんて』のこれまでを振り返るブログ記事の紹介
『へにゃぺんて』のこれまでを振り返るブログ記事の紹介
Yuma Ohgami
 
「へにゃぺんて」のこれまでを振り返るブログ記事の紹介
「へにゃぺんて」のこれまでを振り返るブログ記事の紹介「へにゃぺんて」のこれまでを振り返るブログ記事の紹介
「へにゃぺんて」のこれまでを振り返るブログ記事の紹介
Yuma Ohgami
 
バイナリ生成環境『daisy-tools』のご紹介
バイナリ生成環境『daisy-tools』のご紹介バイナリ生成環境『daisy-tools』のご紹介
バイナリ生成環境『daisy-tools』のご紹介
Yuma Ohgami
 
セガサターンで動く自作シンセサイザーの紹介
セガサターンで動く自作シンセサイザーの紹介セガサターンで動く自作シンセサイザーの紹介
セガサターンで動く自作シンセサイザーの紹介
Yuma Ohgami
 
セガサターンマシン語プログラミングの紹介
セガサターンマシン語プログラミングの紹介セガサターンマシン語プログラミングの紹介
セガサターンマシン語プログラミングの紹介
Yuma Ohgami
 
ハードの作りで振り返るセガサターン
ハードの作りで振り返るセガサターンハードの作りで振り返るセガサターン
ハードの作りで振り返るセガサターン
Yuma Ohgami
 
エミュレータのコードを読んでわかるセガサターン
エミュレータのコードを読んでわかるセガサターンエミュレータのコードを読んでわかるセガサターン
エミュレータのコードを読んでわかるセガサターン
Yuma Ohgami
 
エミュレータのコードを読んでわかる「セガサターン」
エミュレータのコードを読んでわかる「セガサターン」エミュレータのコードを読んでわかる「セガサターン」
エミュレータのコードを読んでわかる「セガサターン」
Yuma Ohgami
 
シェルスクリプトでセガサターンマシン語ベアメタルプログラミング
シェルスクリプトでセガサターンマシン語ベアメタルプログラミングシェルスクリプトでセガサターンマシン語ベアメタルプログラミング
シェルスクリプトでセガサターンマシン語ベアメタルプログラミング
Yuma Ohgami
 
ゲームボーイ向けOSの作り方
ゲームボーイ向けOSの作り方ゲームボーイ向けOSの作り方
ゲームボーイ向けOSの作り方
Yuma Ohgami
 

More from Yuma Ohgami (20)

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
Daisy OSでデイジーワールド!
Daisy OSでデイジーワールド!Daisy OSでデイジーワールド!
Daisy OSでデイジーワールド!
 
バイナリ生物学でデイジーワールド
バイナリ生物学でデイジーワールドバイナリ生物学でデイジーワールド
バイナリ生物学でデイジーワールド
 
OSC2023 Tokyo/Fall展示内容(予定)と技術書典15向け新刊(執筆中)のご紹介
OSC2023 Tokyo/Fall展示内容(予定)と技術書典15向け新刊(執筆中)のご紹介OSC2023 Tokyo/Fall展示内容(予定)と技術書典15向け新刊(執筆中)のご紹介
OSC2023 Tokyo/Fall展示内容(予定)と技術書典15向け新刊(執筆中)のご紹介
 
去年「バイナリ生物学」で今年「PDP-7」だったのはなぜなのか?
去年「バイナリ生物学」で今年「PDP-7」だったのはなぜなのか?去年「バイナリ生物学」で今年「PDP-7」だったのはなぜなのか?
去年「バイナリ生物学」で今年「PDP-7」だったのはなぜなのか?
 
60年代ゲームハードPDP-7のご紹介
60年代ゲームハードPDP-7のご紹介60年代ゲームハードPDP-7のご紹介
60年代ゲームハードPDP-7のご紹介
 
来週の展示内容紹介
来週の展示内容紹介来週の展示内容紹介
来週の展示内容紹介
 
DaisyOS(仮)のご紹介
DaisyOS(仮)のご紹介DaisyOS(仮)のご紹介
DaisyOS(仮)のご紹介
 
セキュリティ・ネクストキャンプ2022 オンライン [N9] バイナリ生物学入門
セキュリティ・ネクストキャンプ2022 オンライン [N9] バイナリ生物学入門セキュリティ・ネクストキャンプ2022 オンライン [N9] バイナリ生物学入門
セキュリティ・ネクストキャンプ2022 オンライン [N9] バイナリ生物学入門
 
セキュリティ・ネクストキャンプ2022 オンライン [N5] バイナリ生物学入門
セキュリティ・ネクストキャンプ2022 オンライン [N5] バイナリ生物学入門セキュリティ・ネクストキャンプ2022 オンライン [N5] バイナリ生物学入門
セキュリティ・ネクストキャンプ2022 オンライン [N5] バイナリ生物学入門
 
『へにゃぺんて』のこれまでを振り返るブログ記事の紹介
『へにゃぺんて』のこれまでを振り返るブログ記事の紹介『へにゃぺんて』のこれまでを振り返るブログ記事の紹介
『へにゃぺんて』のこれまでを振り返るブログ記事の紹介
 
「へにゃぺんて」のこれまでを振り返るブログ記事の紹介
「へにゃぺんて」のこれまでを振り返るブログ記事の紹介「へにゃぺんて」のこれまでを振り返るブログ記事の紹介
「へにゃぺんて」のこれまでを振り返るブログ記事の紹介
 
バイナリ生成環境『daisy-tools』のご紹介
バイナリ生成環境『daisy-tools』のご紹介バイナリ生成環境『daisy-tools』のご紹介
バイナリ生成環境『daisy-tools』のご紹介
 
セガサターンで動く自作シンセサイザーの紹介
セガサターンで動く自作シンセサイザーの紹介セガサターンで動く自作シンセサイザーの紹介
セガサターンで動く自作シンセサイザーの紹介
 
セガサターンマシン語プログラミングの紹介
セガサターンマシン語プログラミングの紹介セガサターンマシン語プログラミングの紹介
セガサターンマシン語プログラミングの紹介
 
ハードの作りで振り返るセガサターン
ハードの作りで振り返るセガサターンハードの作りで振り返るセガサターン
ハードの作りで振り返るセガサターン
 
エミュレータのコードを読んでわかるセガサターン
エミュレータのコードを読んでわかるセガサターンエミュレータのコードを読んでわかるセガサターン
エミュレータのコードを読んでわかるセガサターン
 
エミュレータのコードを読んでわかる「セガサターン」
エミュレータのコードを読んでわかる「セガサターン」エミュレータのコードを読んでわかる「セガサターン」
エミュレータのコードを読んでわかる「セガサターン」
 
シェルスクリプトでセガサターンマシン語ベアメタルプログラミング
シェルスクリプトでセガサターンマシン語ベアメタルプログラミングシェルスクリプトでセガサターンマシン語ベアメタルプログラミング
シェルスクリプトでセガサターンマシン語ベアメタルプログラミング
 
ゲームボーイ向けOSの作り方
ゲームボーイ向けOSの作り方ゲームボーイ向けOSの作り方
ゲームボーイ向けOSの作り方
 

QEMUでARM64bitベアメタルプログラミング

  • 2. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 2 ● 大神 祐真 – yuma@ohgami.jp ● 組み込み系のプログラマ ● http://yuma.ohgami.jp – やっている事のまとめ
  • 3. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 3 Raspberry Pi 3
  • 4. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 4 Raspberry Pi 3 ARM 64ビットCPU 搭載
  • 5. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 5 カーネル(Linux) アプリ(Raspbian) 共に、現状は32ビット 64ビット: ARMv8 32ビットアーキテクチャ
  • 6. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 6 OS無しで、 素のハードウェア(ベアメタル)を 直接制御してみる
  • 7. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 7 OS無しで、 素のハードウェア(ベアメタル)を 直接制御してみる ベアメタルプログラミング
  • 8. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 8 実機での開発作業は 何かと面倒 とはいえ、
  • 9. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 9 QEMUで効率化 実機での開発作業は 何かと面倒 とはいえ、
  • 10. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 10 最も簡単なプログラム b . start.S
  • 11. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 11 最も簡単なプログラム [PC]$ aarch64-linux-gnu-as -o start.o start.S [PC]$ aarch64-linux-gnu-objcopy -O binary start.o start.img [PC]$ qemu-system-aarch64 -cpu cortex-a57 -M virt -kernel start.img
  • 12. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 12 C言語を使う mov x0, #0x40080000 mov sp, x0 bl main b . start.S int main(void) { return 0; } main.c
  • 13. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 13 最も簡単なプログラム [PC]$ aarch64-linux-gnu-as -o start.o start.S [PC]$ aarch64-linux-gnu-gcc -c -o main.o main.c [PC]$ aarch64-linux-gnu-ld -Ttext 0x40080000 -o out.elf start.o main.o
  • 14. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 14 最も簡単なプログラム [PC]$ aarch64-linux-gnu-objcopy -O binary out.elf out.img [PC]$ qemu-system-aarch64 -cpu cortex-a57 -M virt -kernel out.img
  • 15. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 15 シリアル通信でHello world! int main(void) { put_str("Hello world!"); return 0; }
  • 16. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 16 シリアル通信でHello world! #define DR (*(volatile unsigned int *)0x09000000) #define FR (*(volatile unsigned int *)0x09000018) void put_char(char ch) { while (FR & (1U << 5)); DR = (unsigned int)ch; } void put_str(char *str) { while (*str != '0') put_char(*str++); }
  • 17. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 17 シリアル通信でHello world!
  • 18. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 18 “ラズパイ3 ” ベアメタル で検索
  • 19. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 19
  • 20. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 20 ご清聴、 ありがとうございました!