*dragonfly上で llvm の CrossCompile をした時のメモ [#v9d0fb30] ** 準備[#m668d5c0] - ディレクトリを作成 % mkdir ~/src/cbclang-arm % cd ~/src/cbclang-arm - arm-linux-gnueabihf のインストール --http://www.mediafire.com/file/r77svbzhqbwsmle/gcc-linaro-arm-linux-gnueabihf-raspbian-2014.05_mac.zip からダウンロードして展開し /usr/local/linaro/arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc があることを確認する ** CrossCompile [#gebb5bbb] - http://www.welzels.de/blog/en/arm-cross-compiling-with-mac-os-x/ を 参考にhello.cを作って実行する -- プログラミング例 #include<stdio.h> int main(void) { puts("Hello World"); return 0; } -- 実行 % /usr/local/linaro/arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc -g -o hello hello.c -- CrossCompile できているか確認 % file hello hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.26, BuildID[sha1]=a78af9ba00197d52a8ed7cbac433b24360c57283, not stripped ** Raspberry pi 3 で動かす [#re6435f8] - QEMUのインストール % brew install qemu - 必要な CPU がサポートされているかチェック % qemu-system-arm -M versatilepb -cpu '?' | grep arm1176 arm1176 arm1176が出力されればOK - 起動 dragonfly上に先生のRaspberry Pi3 の kernel を置いてあるので,それを起動する % cd ~/Users/one/src/cbclang-arm/raspberry3 % sh run-pi3.sh 別環境からkernel を持ってきた場合は実行する前に shell を書き直す必要がある ** CbClang-on-arm CMake [#ra244ed6] - ディレクトリを作成 % cd .. % mkdir cbclang-on-arm % mkdir cbclang-arm-cross - https://stackoverflow.com/questions/17275348/how-to-specify-new-gcc-path-for-cmake を参考にshell を作成 % vi cbclang-on-arm/cmake.sh export CC=/usr/local/linaro/arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc export CXX=/usr/local/linaro/arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++ cmake -G Ninja \ CMAKE_INSTALL_PREFIX:PATH=`pwd` ~/hg/CbC/CbC_llvm - 実行 % cd cbclang-on-arm/ % rm -rf CMakeFiles CMakeCache.txt a.out % ninja >& ers & % tail -f ers ** qemuでの起動 [#sf52f156] - dalmoreに入って % cd /mnt/dalmore-home/one/src/xv6-rpi/src % make clean; make -f makefile-armclang qemu - デバッグ % /net/open/Linux/arm/gcc-arm-none-eabi-7-2017-q4-major/bin/arm-none-eabi-gdb kernel.elf