Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

More Related Content

Viewers also liked

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

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

  1. 1. QEMUでARM64bitベアメタルプログラミング 大神 祐真 yuma@ohgami.jp 2016/06/18
  2. 2. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 2 ● 大神 祐真 – yuma@ohgami.jp ● 組み込み系のプログラマ ● http://yuma.ohgami.jp – やっている事のまとめ
  3. 3. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 3 Raspberry Pi 3
  4. 4. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 4 Raspberry Pi 3 ARM 64ビットCPU 搭載
  5. 5. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 5 カーネル(Linux) アプリ(Raspbian) 共に、現状は32ビット 64ビット: ARMv8 32ビットアーキテクチャ
  6. 6. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 6 OS無しで、 素のハードウェア(ベアメタル)を 直接制御してみる
  7. 7. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 7 OS無しで、 素のハードウェア(ベアメタル)を 直接制御してみる ベアメタルプログラミング
  8. 8. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 8 実機での開発作業は 何かと面倒 とはいえ、
  9. 9. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 9 QEMUで効率化 実機での開発作業は 何かと面倒 とはいえ、
  10. 10. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 10 最も簡単なプログラム b . start.S
  11. 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. 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. 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. 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. 15. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 15 シリアル通信でHello world! int main(void) { put_str("Hello world!"); return 0; }
  16. 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. 17. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 17 シリアル通信でHello world!
  18. 18. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 18 “ラズパイ3 ” ベアメタル で検索
  19. 19. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 19
  20. 20. 2016/06/18 大神 祐真 (yuma.ohgami.jp) 20 ご清聴、 ありがとうございました!

×