版本 2671f83b26396fcd6117201eaa0efb1867f0c852
Lab36: ELF
預期目標
- 在
STM32F429i Discovery</embedded/STM32F429>
_ 開發簡易 ELF loader - 學習 OpenOCD 和 gdb
- 複習
Week #7: ELF</embedded/2014q3w7>
_ 學習進度
預先準備
- 確認
$PATH
可找到Lab 35</embedded/Lab35>
_ 設定的 GNU Toolchainarm-none-eabi-gcc -v
預期輸出4.8.3-11ubuntu1
一類包含 ubuntu 的字串- 若否,請重新設定 PATH 環境變數
- 確認
STM32F429i Discovery</embedded/STM32F429>
_ 板子已經由 USB 線接上裝有 GNU/Linux 的開發環境,並確保Lab 35</embedded/Lab35>
_ 所提及的工具均已正確安裝,如 openocd 與 gdb
取得 ELF loader 並在 STM32 驗證
cd workspace
# 假設工作目錄為workspace
git clone https://github.com/embedded2014/elf-loader.git && elf-loader
- 開啟兩個虛擬終端機,在其中一個終端機執行以下
make openocd
,預期輸出為
.. code-block:: prettyprint
CC main.c
CC start.c
LINK app.elf
text data bss dec hex filename
164 8 4 176 b0 app.elf
Creating list...
...
Launch OpenOCD for stm32f4discovery
Open On-Chip Debugger 0.9.0-dev-00105-ge1bc7f4 (2014-08-08-20:38)
...
- 在另外一個終端機執行
make run
cd workspace/elf-loader && make run
- 切換到原本執行 OpenOCD 的視窗,可見到以下輸出 (請保持耐心)
.. code-block:: prettyprint
ELF: Scan ELF indexs...
ELF: Examining section 1 .text
ELF: Examining section 2 .rel.text
ELF: Examining section 3 .rodata
...
ELF: Examining section 11 .symtab
ELF: Examining section 12 .strtab
ELF: Done
ELF: Relocating section .text
ELF: Offset Info Type Name
ELF: 00000034 00001202 R_ARM_ABS32 i
...
ELF: Relocating section .rodata
ELF: Offset Info Type Name
ELF: 00000038 00001502 R_ARM_ABS32 banner
...
ELF: symAddr=20000F48 relAddr=20000F8C
ELF: R_ARM_ABS32 relocated is 0x20000F54
Hello world on Oct 30 2014 at 17:28:11 (0)
...
Done
semihosting: *** application exited ***
- 看到
Hello world
字樣出現 10 次,表示app/main.c
編譯與連結出來的app-striped.elf
已正確載入並執行
參考作業要求
- 擴充
Lab 35 STM32F429</embedded/Lab35>
_ 作業的freertos-stm32<https://github.com/embedded2014/freertos-stm32>
_,允許在執行時期透過 OpenOCD,從 host 端載入 ELF 執行檔 (可視為遊戲程式的 plugin) 並執行 - 整合
Lab 32</embedded/Lab32>
_ 開發的檔案系統與 shell,除了ls
和cat
命令外,額外提供exec
命令
繳交作業
- 截止日期
- Nov 8, 2014 (含) 之前
- 更新作業提案到共筆網站:
Lab 36 / 作業共筆<https://embedded2014.hackpad.com/2014q3-Week-7-lzIBL1fkunQ>
_,需要標注自己的 ID- 將符合作業提案的程式碼,提交到自行 fork 的
freertos-stm32<https://github.com/embedded2014/freertos-stm32>
_
- 將符合作業提案的程式碼,提交到自行 fork 的
參考資料
BeagleBoard OpenOCD<http://elinux.org/BeagleBoardOpenOCD>
_GDB and OpenOCD<http://openocd.sourceforge.net/doc/html/GDB-and-OpenOCD.html>
_