ARM——操作系統—最小操作系統

自己動手寫最小的ARM操作系統。能夠看到自己的代碼,真的控制着硬件啓動起來,心情是不一樣的。

ARM是嵌入式設備,想寫個操作系統就需要了解硬件。在X86時代有BIOS幫我們,大部分東西簡化了。在ARM時代,最小的操作系統,是設置好串口。通過串口打印字符。

最小的PC,也是有鍵盤,顯示器和主機。

最小的嵌入式設備,無鍵盤,無顯示器,只有主機,最通用的就是串口了。所以最小的操作系統,也只能通過這裏輸出。

我們要做的工作,(目前沒有使用中斷,從最小系統的角度,已經夠了,理解就好。):

1.閱讀SOC的芯片手冊,找到如何設置UART寄存器。

2.往串口寫數據。

    .org 0x0000
    @
    @ UART initialisation (38400 8N1)
    @
    ldr    r0, =0x1c090000       @ UART base (Versatile Express)
    mov    r1, #0x10             @ ibrd
    str    r1, [r0, #0x24]
    mov    r1, #0xc300
    orr    r1, #0x0001           @ cr
    str    r1, [r0, #0x30]

    mov    r1, #'f'
    str    r1, [r0, #0x0]
    mov    r1, #'o'
    str    r1, [r0, #0x0]
    mov    r1, #'r'
    str    r1, [r0, #0x0]
    mov    r1, #'e'
    str    r1, [r0, #0x0]
    mov    r1, #'s'
    str    r1, [r0, #0x0]
    mov    r1, #'t'
    str    r1, [r0, #0x0]
    mov    r1, #'c'
    str    r1, [r0, #0x0]
    mov    r1, #'e'
    str    r1, [r0, #0x0]
    mov    r1, #'l'
    str    r1, [r0, #0x0]
    mov    r1, #'l'
    str    r1, [r0, #0x0]

    mov    r1, #0x0A
    str    r1, [r0, #0x0]
    b      .

Makefile

# Build an ELF linux image

IMAGE       = boot.bin
BOOTLOADER  = boot.S

CROSS_COMPILE	= arm-none-linux-gnueabi-

AS		= $(CROSS_COMPILE)as
LD		= $(CROSS_COMPILE)ld

all:$(IMAGE)
	
clean:
	rm -f $(IMAGE)

$(IMAGE): $(BOOTLOADER)
	$(AS) -o $@ $<
	

fastmodels模擬運行的截圖


qemu模擬運行的截圖



發佈了81 篇原創文章 · 獲贊 30 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章