スキップしてメイン コンテンツに移動

Zephyr make qemu error

環境

MacBook Air Mid 2013 (OS X 10.11.6)
Zephyr Kernel v1.4.0

参考

(1) ツールチェインのビルドエラー1

エラー

$ ct-ng build
[INFO ]  Performing some trivial sanity checks
[ERROR]  Your file system in '/Volumes/CrossToolNG/build/.build' is *not* case-sensitive!
[ERROR]
[ERROR]  >>
[ERROR]  >>  Build failed in step '(top-level)'
[ERROR]  >>
[ERROR]  >>  Error happened in: CT_Abort[scripts/functions@329]
[ERROR]  >>        called from: CT_TestAndAbort[scripts/functions@351]
[ERROR]  >>        called from: main[scripts/crosstool-NG.sh@93]
[ERROR]  >>
[ERROR]  >>  For more info on this error, look at the file: 'build.log'
[ERROR]  >>  There is a list of known issues, some with workarounds, in:
[ERROR]  >>      '/usr/local/Cellar/crosstool-ng/1.22.0_1/share/doc/crosstool-ng/crosstool-ng-1.22.0/B - Known issues.txt'
[ERROR]
[ERROR]  (elapsed: 24505002:43.00)
[00:00] / make: *** [build] Error 1

解決策

参考URLのスクリプトやディスクユーティリティでは、Case-sensitiveなイメージを作成できなかった。下記で必要なイメージを作成することができる。

$ hdiutil create -size 8g -fs "Case-sensitive HFS+" -type SPARSE -volname CrossToolNG CrossToolNG.sparseimage

(2) ツールチェインのビルド2

エラー

$ ct-ng build
(省略)
[ERROR]  >>  Build failed in step 'Checking that gcc can compile a trivial statically linked program (CT_WANTS_STATIC_LINK)'
[ERROR]  >>        called in step '(top-level)'
(省略)

解決策

$ ct-ng menuconfig
で、
C compiler ->  Link libstdc++ statically into the gcc binary のチェックを外す。

(3) サンプルアプリのビルド

エラー

$ cd samples/hello_world/microkernel/
$ make
/Users/..../Documents/zephyr-v1.4.0/scripts/Makefile.toolchain.xtools:2: *** XTOOLS_TOOLCHAIN_PATH is not set.  Stop.
make[1]: *** [sub-make] Error 2
make: *** [all] Error 2

解決策

~/.zepherrc に下記を追加
export XTOOLS_TOOLCHAIN_PATH=/Volumes/CrossToolNG/x-tools

(4) Qemu実行

エラー

$ make BOARD=qemu_x86 qemu
  Using /Users/..../Documents/zephyr-v1.4.0 as source for kernel
  GEN     ./Makefile
  CHK     include/generated/version.h
  CHK     misc/generated/configs.c
  CHK     include/generated/offsets.h
  CHK     misc/generated/sysgen/prj.mdef
To exit from QEMU enter: 'CTRL+a, x'
[QEMU] CPU: qemu32
make[2]: /usr/bin/qemu-system-i386: No such file or directory

解決策

$ QEMU_BIN_PATH=/usr/local/bin make BOARD=qemu_x86 qemu

コメント

このブログの人気の投稿

Initial run-length encoding@bzip2を読んでみた

Wikipediaのbzip2圧縮アルゴリズムの一部を読んだので意訳して紹介します。 参考にしたソースコードは bzip2-1.0.6 です。 Wikipedia https://en.wikipedia.org/wiki/Bzip2#Initial_run-length_encoding bzip2 ソースコード https://github.com/junkawa/bzip2/tree/master/bzip2-1.0.6 概要 bzip2では、入力データを読み込んだ時( copy_input_until_stop()@bzlib.c → ADD_CHAR_TO_BLOCK() → add_pair_to_block() ) に ランレングス符号化 を行う。 Wikipedia Any sequence of 4 to 255 consecutive duplicate symbols is replaced by the first four symbols and a repeat length between 0 and 251.   4〜255回、同じシンボルが連続した場合、「最初の4シンボル+残りの繰り返し回数」に置き換わる。 Thus the sequence "AAAAAAABBBBCCCD" is replaced with "AAAA\3BBBB\0CCCD", where "\3" and "\0" represent byte values 3 and 0 respectively.  "AAAAAAABBBBCCCD"は、"AAAA\3BBBB\0CCCD"に置き換わる。 AAAAAAA (Aが7回)は、最初の4シンボル(AAAA) + 残りの繰り返し回数(3)となる。 BBBB (Bが4回)は、最初の4シンボル(BBBB) + 残りの繰り返し回数(0)となる。 C,Dは連続回数が4回に達しないのでそのままとなる。 ここでは分かりやすさのため、A,B,Cというシンボルを使っているが、実際のbzip2では1シンボルは1バイト(0〜255の値)。 したがって、シンボル7...

Zephyr build (4)

この記事で関係するターゲット $(TMP_ELF) ターゲット このターゲットは、アーキテクチャに関係なく実行される(x86依存ではない)。 [zephyr_base]/Makefile $(TMP_ELF): $(zephyr-deps) $(KBUILD_ZEPHYR_APP) linker.cmd $(KERNEL_NAME).lnk $(Q)$(CC) -T linker.cmd @$(KERNEL_NAME).lnk -o $@ $(TMP_ELF) 前の記事 参照。 $(zephyr-deps) TODO 後で調べる $(KBUILD_ZEPHYR_APP) 未定義 $(KERNEL_NAME).lnk zephyr.lnk $(KERNEL_NAME) については、 前の記事 参照。 $(Q)$(CC) -T linker.cmd @$(KERNEL_NAME).lnk -o $@ /Volumes/CrossToolNG/x-tools/i586-pc-elf/bin/i586-pc-elf-gcc -T linker.cmd @zephyr.lnk -o .tmp_zephyr.prebuilt リンカスクリプト (linker.cmd)、リンカオプション(zephyr.lnk)を使い、.tmp_zephyr.prebuilt を生成する。 linker.cmd [zephyr_base]/samples/hello_world/microkernel/outdir/linker.cmd 次の記事 参照 zephyr.lnk [zephyr_base]/Makefile 次の記事 参照

Zephyr build (2)

この記事で関係するターゲット qemu ターゲット [zephyr_base]/Makefile qemu: zephyr (省略) 詳細は 前の記事 参照。 zephyrターゲット [zephyr_base]/Makefile zephyr: $(zephyr-deps) $(KERNEL_BIN_NAME) $(zephyr-deps) [zephyr_base]/Makefile $(zephyr-deps) := $(KBUILD_LDS) $(KBUILD_ZEPHYR_MAIN) TODO 後で調べる $(KERNEL_BIN_NAME) zephyr.bin [zephyr_base]/samples/hello_world/microkernel/outdir/.config CONFIG_KERNEL_BIN_NAME="zephyr" TODO .config の生成方法(ct-ng makemenuconfigがベース?)、.config の Makefile中のinlcude箇所。 [zephyr_base]/Makefile KERNEL_NAME = $(subst $(DQUOTE),,$(CONFIG_KERNEL_BIN_NAME)) KERNEL_BIN_NAME = $(KERNEL_NAME).bin $(KERNEL_BIN_NAME) ターゲット [zephyr_base]/Makefile ifeq ($(ARCH),x86) $(KERNEL_ELF_NAME): staticIdt.o final-linker.cmd $(call cmd,lnk_elf) @$(WARN_ABOUT_ASSERT) else $(KERNEL_ELF_NAME): $(TMP_ELF) @cp $(TMP_ELF) $(KERNEL_ELF_NAME) @$(WARN_ABOUT_ASSERT) endif 今回は、ARCHがx86の場合を調べる。 staticIdt.o 次の記事 参照 final-linker.cmd TODO 調査 $(KERNEL_ELF_NAME) zephyr.elf [zephy...