Homework 7

Build a simple shell on mini-arm-os

目標:提供基本的 shell,並且可以透過新建立的 thread 計算來第一次作業的 fibonacci 數列。
 
 
分析:1. Shell 是Linux作業系統下的使用者命令介面(CLI: command-line interface),透過終端機接收使用者的指
  • 令,並予以執行,因此執行流程可分成三個階段:
 
  • A. 等待使用者完成輸入
  • B. 接收輸入資料,並且檢查是否可以執行
  • C. 執行使用者所下的命令
 
  • 2. 參考+鄭仲庭同學的筆記,我們可以知道,當USART傳輸通道發現另一端傳來新資料時,為了通知本地端接收此資料,會將RXN Interrupt enable的值設為true,即 *(USART2_SR) & USART_FLAG_RXNE == true,
  • 而該資料暫存在USART的8 bits暫存器中,因此,藉由下面的程式碼讀取字元。
  •  
    char get_c() {
  • while(!(*(USART2_SR) & USART_FLAG_RXNE)); 
  •  return  (char)(*(USART2_DR) & 0xFF); 
  •  }
 
  • 而這些終端機的輸出與讀取都與USART相關,因此將這類的函式與原本的usart_init歸類到usart.c檔案中。
 
  • 3. 執行編譯時將.s檔直接列入,便可呼叫裏頭的函式,並且將組語相關的函式統整在asm.h中。
 
  • 4. 字串處理相關的函式歸類在string.h
 
 
實作程式碼連結
 
  • 下面就兩種狀況來討論呼叫fibonacci數列函數
  •  
  • 1.  在與shell相同的thread執行
 
  • 2. 新增一個thread來執行fibonacci數列函數
 
  • 我們可以觀察到,若在新的執行緒中執行fibonacci函數的話,shell的"$"符號會先出來。
  • 這代表shell的執行緒在完成指令執行後,仍需等待一段時間才會切換到fibonacci的執行緒。
 

Homwork 8(B)

Build a romfs on simple shell

目標:建構唯讀檔案系統,並且在shell的基礎上提供相關指令。
 
 
探索:1. 首先得認識什麼是"檔案系統"。
  • 從資料結構的角度來說,檔案系統是一顆樹,而且唯獨資料夾類型的結點才能擁有子結點。
  •  
  • 在一般日常生活中,我們會使用各種不同格式的檔案,像是ext3, fat32等等,不同格式的檔案,就算內容一樣,儲存在硬碟中的Binary code會不相同,也因此一顆硬碟換到不同系統上時可能會無法辨識。
  •