CurtOS 研究 -- Jserv 的嵌入式作業系統

作業系統

簡介

行程管理

記憶體管理

輸出入管理

檔案管理

使用者介面

嵌入式系統

RTOS

中斷處理

案例研究

EOS0

CurtOS

F9

UNIXv6

NachOS

uCOSII

L4

RtThread

Haiku

MINIX

Linux

Windows

mykernel

訊息

相關網站

參考文獻

最新修改

簡體版

English

安裝環境

  1. MinGW : http://www.mingw.org/
  2. CodeSourcery : SOURCERY CODEBENCH LITE EDITION FOR ARM EABI
  3. QEMU on windows :

參考

  1. Jserv's CURT v1 ARM 精簡作業系統:以下是我設定作業環境來編繹CURT v1的心得 (rework 2011-04-14), 2010年1月27日星期三
  2. CuRT OS 的下載點

重新下載 Curt-V1-Rework

嘗試過程

D:\OpenComputer\jserv\CuRT_v1>make
make -C app/shell
make[1]: Entering directory `D:/OpenComputer/jserv/CuRT_v1/app/shell'
arm-none-linux-gnueabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../include
s -Wall -Werror -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscal
e -mabi=aapcs-linux -mno-thumb-interwork main.c -o main.o
process_begin: CreateProcess((null), arm-none-linux-gnueabi-gcc -c -I../../inclu
des/arch/arm/mach-pxa -I../../includes -Wall -Werror -fno-builtin -O0 -g -march=
armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-linux -mno-thumb-interwork ma
in.c -o main.o, ...) failed.
make (e=2): 系統找不到指定的檔案。
make[1]: *** [main.o] Error 2
make[1]: Leaving directory `D:/OpenComputer/jserv/CuRT_v1/app/shell'
make: *** [all] Error 2

D:\OpenComputer\jserv\CuRT_v1>arm-non-linux-gnueabi-gcc
'arm-non-linux-gnueabi-gcc' 不是內部或外部命令、可執行的程式或批次檔。

下載包含 arm-non-linux-gnueabi-gcc 的 CodeSourcery 之工具鏈

要先下載 CodeSourcery 的 ToolChain

http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/

在其中選 Sourcery CodeBench Lite Edition for ARM GNU/Linux (這版才對)

https://sourcery.mentor.com/sgpp/lite/arm/portal/release2029

重新 make

D:\OpenComputer\jserv\CuRT_v1>make
make -C app/shell
make[1]: Entering directory `D:/OpenComputer/jserv/CuRT_v1/app/shell'
arm-none-linux-gnueabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../include
s -Wall -Werror -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscal
e -mabi=aapcs-linux -mno-thumb-interwork main.c -o main.o
arm-none-linux-gnueabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../include
s -Wall -Werror -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscal
e -mabi=aapcs-linux -mno-thumb-interwork ../../device/serial.c -o ../../device/s
erial.o
../../device/serial.c: In function 'SerialInit':
../../device/serial.c:39:2: error: suggest parentheses around operand of '!' or
change '&' to '&&' or '!' to '~' [-Werror=parentheses]
cc1.exe: all warnings being treated as errors

make[1]: *** [../../device/serial.o] Error 1
make[1]: Leaving directory `D:/OpenComputer/jserv/CuRT_v1/app/shell'
make: *** [all] Error 2

程式錯誤的修正

重新下載 Curt-V1-Rework

用 TortoiseSVN 下載 (Checkout) CurtOS

專案網址:http://code.google.com/p/curt-v1-rework/source/checkout

  1. Non-members may check out a read-only working copy anonymously over HTTP.

svn checkout http://curt-v1-rework.googlecode.com/svn/trunk/ curt-v1-rework-read-only

CurtOsSvn.jpg

結果發現用的編譯器改了,原本為 arm-none-linux-gnueabi-gcc 現在卻改為 arm-none-eabi-gcc,只好重新下載

當中的 Download the EABI Release 版本。

D:\OpenComputer\jserv\CuRT_v1_rework>make
make -C app/shell
make[1]: Entering directory `D:/OpenComputer/jserv/CuRT_v1_rework/app/shell'
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Wall -
Werror -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=a
apcs-linux -mno-thumb-interwork main.c -o main.o
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Wall -
Werror -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=a
apcs-linux -mno-thumb-interwork ../../device/serial.c -o ../../device/serial.o
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Wall -
Werror -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=a
apcs-linux -mno-thumb-interwork ../../lib/stdio.c -o ../../lib/stdio.o
../../lib/stdio.c: In function '_PrintHex':
../../lib/stdio.c:174:6: error: variable 'cnt' set but not used [-Werror=unused-
but-set-variable]
../../lib/stdio.c:170:22: error: variable 'flagl' set but not used [-Werror=unus
ed-but-set-variable]
../../lib/stdio.c: In function 'strtoul':
../../lib/stdio.c:414:16: error: variable 'strtoul_err' set but not used [-Werro
r=unused-but-set-variable]
cc1.exe: all warnings being treated as errors

make[1]: *** [../../lib/stdio.o] Error 1

所以必須將 -Wall 選項拿掉。

接著就可以編譯成功了

D:\OpenComputer\jserv\CuRT_v1_rework>make
make -C app/shell
make[1]: Entering directory `D:/OpenComputer/jserv/CuRT_v1_rework/app/shell'
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Werror
 -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-l
inux -mno-thumb-interwork main.c -o main.o
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Werror
 -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-l
inux -mno-thumb-interwork ../../device/serial.c -o ../../device/serial.o
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Werror
 -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-l
inux -mno-thumb-interwork ../../lib/stdio.c -o ../../lib/stdio.o
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Werror
 -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-l
inux -mno-thumb-interwork ../../arch/arm/mach-pxa/port.c -o ../../arch/arm/mach-
pxa/port.o
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Werror
 -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-l
inux -mno-thumb-interwork ../../arch/arm/mach-pxa/start.S -o ../../arch/arm/mach
-pxa/start.o
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Werror
 -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-l
inux -mno-thumb-interwork ../../arch/arm/mach-pxa/asm_port.S -o ../../arch/arm/m
ach-pxa/asm_port.o
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Werror
 -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-l
inux -mno-thumb-interwork ../../kernel/kernel.c -o ../../kernel/kernel.o
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Werror
 -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-l
inux -mno-thumb-interwork ../../kernel/thread.c -o ../../kernel/thread.o
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Werror
 -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-l
inux -mno-thumb-interwork ../../kernel/list.c -o ../../kernel/list.o
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Werror
 -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-l
inux -mno-thumb-interwork ../../kernel/sync.c -o ../../kernel/sync.o
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Werror
 -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-l
inux -mno-thumb-interwork ../../kernel/ipc.c -o ../../kernel/ipc.o
arm-none-eabi-ld -nostdlib -static -e _start -p --no-undefined -X -T ld-script.l
ds -Map curt_image.map \
        -o curt_image.elf \
        ./main.o ../../device/serial.o ../../lib/stdio.o ../../arch/arm/mach-pxa
/port.o ../../arch/arm/mach-pxa/start.o ../../arch/arm/mach-pxa/asm_port.o  ../.
./kernel/kernel.o ../../kernel/thread.o ../../kernel/list.o ../../kernel/sync.o
../../kernel/ipc.o
arm-none-eabi-objcopy -O binary -R .note -R .note.gnu.build-id -R .comment -S cu
rt_image.elf curt_image.bin
make[1]: Leaving directory `D:/OpenComputer/jserv/CuRT_v1_rework/app/shell'

D:\OpenComputer\jserv\CuRT_v1_rework>

但是,最後 QEMU 執行時卻沒有任何輸出?

D:\OpenComputer\jserv\CuRT_v1_rework\app\shell>qemu-system-arm -M connex -pflash
 flash-image -serial stdio

我看到 prepare-flash 這個 Shell 檔案中有下列指令:

#!/bin/sh

FLASH_IMAGE_NAME=flash-image

rm -f $FLASH_IMAGE_NAME
if [ -e curt_image.bin ]; then
    dd of=$FLASH_IMAGE_NAME bs=1k count=16k if=/dev/zero
    dd of=$FLASH_IMAGE_NAME bs=1k conv=notrunc if=curt_image.bin
else
    echo "Warning: no pre-built CuRT image file 'curt_image.bin' found."
    echo "Please invoke 'make' to get one."
    exit 1
fi

看來是要用 dd 先件出 flash-image 這個檔案,才能執行 qemu-system-arm。

但是 Dev C++ 沒有 DD,所以只好改用 MinGW 了。

改用 MinGW

ccc@R424-10 ~
$ ls
CuRT_v1_rework  Make3  lcc  ocs  qemu-system-arm  ss0  tcc

ccc@R424-10 ~
$ cd CuRT_v1_rework

ccc@R424-10 ~/CuRT_v1_rework
$ ls
LICENSE.txt  Makefile  REAMDE  app  arch  device  includes  kernel  lib

ccc@R424-10 ~/CuRT_v1_rework
$ make clean
make -C app/shell clean
make[1]: Entering directory `/home/ccc/CuRT_v1_rework/app/shell'
rm -f ../../arch/arm/mach-pxa/*.o \
              ../../kernel/*.o \
              ../../device/*.o \
              ../../lib/*.o \
              ./*.o \
              curt_image.bin curt_image.elf \
              flash-image
make[1]: Leaving directory `/home/ccc/CuRT_v1_rework/app/shell'

ccc@R424-10 ~/CuRT_v1_rework
$ make
make -C app/shell
make[1]: Entering directory `/home/ccc/CuRT_v1_rework/app/shell'
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Werror
 -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-l
inux -mno-thumb-interwork main.c -o main.o
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Werror
 -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-l
inux -mno-thumb-interwork ../../device/serial.c -o ../../device/serial.o
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Werror
 -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-l
inux -mno-thumb-interwork ../../lib/stdio.c -o ../../lib/stdio.o
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Werror
 -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-l
inux -mno-thumb-interwork ../../arch/arm/mach-pxa/port.c -o ../../arch/arm/mach-
pxa/port.o
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Werror
 -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-l
inux -mno-thumb-interwork ../../arch/arm/mach-pxa/start.S -o ../../arch/arm/mach
-pxa/start.o
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Werror
 -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-l
inux -mno-thumb-interwork ../../arch/arm/mach-pxa/asm_port.S -o ../../arch/arm/m
ach-pxa/asm_port.o
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Werror
 -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-l
inux -mno-thumb-interwork ../../kernel/kernel.c -o ../../kernel/kernel.o
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Werror
 -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-l
inux -mno-thumb-interwork ../../kernel/thread.c -o ../../kernel/thread.o
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Werror
 -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-l
inux -mno-thumb-interwork ../../kernel/list.c -o ../../kernel/list.o
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Werror
 -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-l
inux -mno-thumb-interwork ../../kernel/sync.c -o ../../kernel/sync.o
arm-none-eabi-gcc -c -I../../includes/arch/arm/mach-pxa -I../../includes -Werror
 -fno-builtin -O0 -g -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -mabi=aapcs-l
inux -mno-thumb-interwork ../../kernel/ipc.c -o ../../kernel/ipc.o
arm-none-eabi-ld -nostdlib -static -e _start -p --no-undefined -X -T ld-script.l
ds -Map curt_image.map \
                -o curt_image.elf \
                ./main.o ../../device/serial.o ../../lib/stdio.o ../../arch/arm/
mach-pxa/port.o ../../arch/arm/mach-pxa/start.o ../../arch/arm/mach-pxa/asm_port
.o ../../kernel/kernel.o ../../kernel/thread.o ../../kernel/list.o ../../kernel/
sync.o ../../kernel/ipc.o
arm-none-eabi-objcopy -O binary -R .note -R .note.gnu.build-id -R .comment -S cu
rt_image.elf curt_image.bin
make[1]: Leaving directory `/home/ccc/CuRT_v1_rework/app/shell'

ccc@R424-10 ~/CuRT_v1_rework
$ cd app

ccc@R424-10 ~/CuRT_v1_rework/app
$ cd shell

ccc@R424-10 ~/CuRT_v1_rework/app/shell
$ ls
Makefile        curt_image.map  main.o         run-on-connex-debug
curt_image.bin  ld-script.lds   prepare-flash  run-on-connex.bat
curt_image.elf  main.c          run-on-connex

ccc@R424-10 ~/CuRT_v1_rework/app/shell
$ prepare-flash
16384+0 records in
16384+0 records out
16777216 bytes (17 MB) copied, 0.938 seconds, 17.9 MB/s
16+1 records in
16+1 records out
16828 bytes (17 kB) copied, 0.063 seconds, 267 kB/s

ccc@R424-10 ~/CuRT_v1_rework/app/shell
$ run-on-connex

但執行時沒有任何結果,為何呢?

CurtOsRunError.jpg

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License