開發紀錄 Week7
 
開發環境:Ubuntu14.04 32bits
github:JoeJJT
 

作業要求 (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)」
 

環境設定

參照 +Build minimal ARM Kernel from Scratch做設定
預先安裝的必要套件:
$sudo apt-get install git zlib1g-dev libsdl1.2-dev automake* autoconf* libtool libpixman-1-dev
$sudo apt-get install gcc-arm-none-eabi libnewlib-arm-none-eabi
若 Ubuntu 使用 64bit 版本 ,請額外安裝 lib32gcc1 之套件
$sudo apt-get install lib32gcc1 lib32ncurses5
 
QEMU:
$cd qemu_stm32
$git submodule update --init dtc || sudo apt-get install libfdt-dev
$./configure --disable-werror --enable-debug \
    --target-list="arm-softmmu" \
    --extra-cflags=-DSTM32_UART_NO_BAUD_DELAY \
    --extra-cflags=-DSTM32_UART_ENABLE_OVERRUN \
    --disable-gtk
設定參數完就$make
 
設置環境變數:
export PATH=~/workspace/qemu_stm32/arm-softmmu:$PATH
為避免每次重開terminal都要再輸入一遍
$vim  ~/.bashrc
將環境設置加入後
$source ~/.bashrc
更新bashrc設定,可利用$echo $PATH來確認是否成功
STM32
00-HelloWorld
make qemu後,出現以下錯誤訊息:
arm-none-linux-gnueabi-gcc -fno-common -O0 -mcpu=cortex-m3 -mthumb -T hello.ld -nostartfiles  hello.c startup.c -o hello.elf
/usr/local/arm-2010q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/bin/ld: error: /usr/local/arm-2010q1/bin/../arm-none-linux-gnueabi/libc/thumb2/lib/libgcc_s.so: Conflicting architecture profiles A/M
/usr/local/arm-2010q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/bin/ld: failed to merge target specific data of file /usr/local/arm-2010q1/bin/../arm-none-linux-gnueabi/libc/thumb2/lib/libgcc_s.so
collect2: ld returned 1 exit status