開發紀錄(A)
csie wiki:2015q3 Homework #7
作業區 +共筆
github

預期目標

  • 效能分析
  • 作業系統核心實驗
截止日期
  • Nov 18, 2015 (含) 之前
  • 只要完成作業要求 (A) (B) 其中一者即可
  • 越早在 GitHub 上有動態、越早接受 code review,評分越高
作業要求 (A)
  • 安裝和設定 QEMU
  • 依據指示,將 00-Semihosting, 00-HelloWorld, …, 07-Threads 均實際測試並研讀程式碼
  • 在 github 上 fork mini-arm-os,並修改 07-Threads (不要增加新的目錄!),提供基本的 shell,然後能夠用新建立的 thread 計算 fibonacci 數列
  • shell 程式碼可參照 rtenv+ 的 main.c,裡頭提供 shell 實做
  • 建立新的 Hackpad,列於「+作業區」,需要標注「開發紀錄 (A)」
 

內容

GDB
Makefile
qemudbg: os.bin
     @qemu-system-arm -M ? | grep stm32-p103 >/dev/null || exit
     qemu-system-arm -M stm32-p103 -nographic -gdb tcp::3333 -S -kernel os.bin
$make qemudbg 
開啟另一視窗
arm-none-eabi-gdb os.elf 
 (gdb) tar ext :3333 
 
00-Semihosting
Minimal semihosted ARM Cortex-M "Hello World"
----------------------------------------------------------------------------------------------
  • 藉由semihosting 的機制將message 顯示出來
  • ARM定義,當使用semihosting request 時,r0用來傳送此運算型態,而r1則用來傳送其他的參數。而其執行結果則透過r0回傳。
  • Semihost 目前所支援的運作方式如下:
  • 在從這裡可以看到為什麼程式碼裡的param[] 要這樣寫
Entry
On entry, R1 contains a pointer to a three-word data block:
word 1
contains a handle for a file previously opened with SYS_OPEN
word 2
points to the memory containing the data to be written
word 3
contains the number of bytes to be written from the buffer to the file.
  • inline assembly
asm(code : output operand list : input operand list : clobber list);