明天就要上班了...
給自己一點安慰
不上白不上, 上了不白上
努力加油, 徵求自我介紹範例:)
今天要來看第一個Lab中的source跟所需的linker script
SECTIONS
{
. = 0x80000;
.text : { *(.text) }
}
這裡因為aarch64架構的定義, 起始位置為0x80000
所以我們也把text段擺在這個位址上, CPU就可以直接銜接進入點
.section ".text"
.global _start
_start:
wfe
b _start
這裡可以看到我們定義了一個global的_start
這個_start symbol就被bound在GLOBAL上
這個點很關鍵, 因為我們必須定義好_start
才能讓CPU知道我們接下來要執行的代碼在哪裡
接下來我們就可以開始簡單用qemu模擬
qemu-system-aarch64 -M raspi3 -kernel kernel8.img -display none -serial null -serial stdio -S -s
這裡執行下去程序會暫時停止在第一個被執行的指令上
我們如何得知我們的程序順利被加載呢?
Bingo, 強大的GDB神器
$ gdb
$ (gdb) target remote :1234
可以看到我們的程序停在_start, 並且接著會持續循環無窮迴圈
以上得知, 我們的text段在linker script定義在0x80000開始.
並且進入我們撰寫的_start, 開始迴圈
Thanks
See u tomorrow
(引用圖源: 社畜人生加油 LINE貼圖)