FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

「Zedroid - Android (5.0 and later) on Zedboard」をやってみる(7. Linuxブート途中で失敗)

前回のLinuxが立ち上がらない原因を調べていたのだが、どうやらBOOT.binを作成するとき、U-bootのファイルはu-bootではなく、u-boot.elfに改名しておかなければならない気がする。

f:id:msyksphinz:20170506112911p:plain

生成されるBOOT.binのファイルサイズも違うので、ファイル名が違うだけではない気がする。良く分からない。

とりあえずこれでBOOT.binを作成してビルドすると、U-bootが起動するようになった。

f:id:msyksphinz:20170506113127p:plain

しかしここから先、カーネルパニックを起こしてしまい終了。。。これは何だろう?解析する必要があるなあ。なかなか先は長い。

f:id:msyksphinz:20170506113206p:plain

「Zedroid - Android (5.0 and later) on Zedboard」をやってみる(6. SDカードへの書き直し)

前回SDカードを使ってブートしてみたが、動作しなかった。

いろいろ解析を続けていたのだが、まずZedBoardのプログラム書き込み終了の青色LEDが点灯していなかった。

そこでデザインなどの再ビルドと再度SDカードに書き込みを行い、再度SDカードから起動すると青色LEDが点灯するようになった。

だがまだGUIも出ないし、何もコンソールに出力されない。 よく考えてみると、何かしら出てこないといけないはずだと思うのだが、、、解析を続けていきたいと思う。

「Zedroid - Android (5.0 and later) on Zedboard」をやってみる(5. SDカードへの書き込み・ブート失敗)

ここまででAndroidをブートさせるためのファイル群ができたので、SDカードに書き込んでブートの試行をしてみよう。

参考にしている資料は以下。

www.slideshare.net

SDカードには4つのパーティションを作らなければならないらしい。

  • 1st primary: VFAT(FAT32) over 1GB with boot flag
  • 2nd primary: ext4 over 1GB
  • 3rd primary: ext4 over 500MB
  • 4th primary: Linux Swap over 500MB

ちなみに、3rdは500MBでは足りなかったので、1-4までのパーティションはそれぞれ1GBずつ確保した。 パーティション確保にはfdiskを用いる。

まず、1st Primaryのパーティションには、

  • Zedboard用のハードウェアバイナリ [Xilinx SDK dir]/BOOT.bin
  • カーネルファイル [kernel dir]/arch/arm/boot/uImage
  • バイスツリー [kernel dir]/arch/arm/boot/dts/devicetree.dtb
  • アンドロイドファイルシステム [Android dir]/uramdisk.image.gz

を格納する。

2nd Primaryのパーティションには、Androidのsystemファイル群を格納する。Androidのファイル群はAndroidディレクトリのout/target/product/zedboard/system.imgを使えばよいと思う。ddで格納する。

sudo dd if=system.img of=/dev/sdb3

3rd Primaryのパーティションには、Androidのユーザデータファイル群を格納する。これにはAndroidディレクトリのout/target/product/zedboard/userdata.imgを使えばよいと思う。ddで格納する。

sudo dd if=userdata.img of=/dev/sdb3

これでZedboardのジャンパピンを調整してブートしてみたが、うまく動作しなかった。 どこを間違えたかなあ。。。解析必要。

関連記事

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

6th RISC-V Workshop Agendaが発表されました

RISC-V Workshopの第6回目、今回は上海だ。

f:id:msyksphinz:20170503012538p:plain

riscv.org

開催日:May 8-11, 2017 場所:Shanghai Jiao Tong University (SJTU) in Shanghai China

今回はnVIDIAが協賛している。アジェンダは上記のリンクの通りだが、ざっと眺めてみた感じ、第5回ほどのバリエーションは揃っていないように思える。

注目なのは、

  • Keynote Address: “RISC-V at NVIDIA” Frans Sijstermans, NVIDIA
  • “Modern Software Development Methodology for RISC-V Devices”, Larry Lapides, Imperas

一つ目はnVIDIARISC-V関係の講演。前回もnVIDIAは発表していたが、今回はRISC-Vでどのようなことをしゃべるのだろう。

ちなみに第4回開催時のnVIDIAの発表資料はこちらだ。

https://riscv.org/wp-content/uploads/2016/07/Tue1100_Nvidia_RISCV_Story_V2.pdf

もう一つは今回新たにRISC-V FoundationのメンバーになったImperasの発表だ。 こちらは仮想プラットフォームなどの環境が得意分野の会社だ。RISC-V Foundation加入時の発表にも、

RISC-V Gains a Software Development Solution from Imperas | Imperas

Imperas has developed and released open source models of the RISC-V RV32I / RV32G and RV64I / RV64G cores through the Open Virtual Platforms™ (OVP™) website.

おもしろそうじゃない!

「Zedroid - Android (5.0 and later) on Zedboard」をやってみる(4. Androidのビルド)

前回の続き。参考にしているのは以下の資料。

www.slideshare.net

今回はAndroidのビルドを行う。

Androidソースコードダウンロード

まずはAndroidソースコードをダウンロードして、Googleのrepoコマンドを使用してsyncする。

repo init -u https://github.com/noritsuna/zedroid_manifests -b zedroid-5.0.2_r1
repo sync
source ./build/envsetup.sh
lunch zedboard-userdebug

makeなのだが、OpenJDKのVersion 7をインストールしないと実行できない。UbuntuでOpenJDKをインストールする。

sudo add-apt-repository ppa:openjdk-r/ppa
sudo aptitude update
sudo aptitude install openjdk-7-jre

sudo update-alternatives --config javac
sudo update-alternatives --config java

Javaのバージョンを確認して、OpenJDKになっていればOK。

java -version

ビルドを通すためのリポジトリの変更

ビルド中にいくつか落ちたので(メモを取っておけばよかった)、それを直すためにいくつか修正を加えている。

mv prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8/x86_64-linux/bin/ld prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8/x86_64-linux/bin/ld.origin
ln -s /usr/bin/ld.gold prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8/x86_64-linux/bin/ld
mv prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld.origin
ln -s /usr/bin/ld.gold prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld

さらに、build/core/clang/HOST_x86_common.mkにも修正を加えた。

--sysroot=$($(clang_2nd_arch_prefix)HOST_TOOLCHAIN_FOR_CLANG)/sysroot \
+  -B$($(clang_2nd_arch_prefix)HOST_TOOLCHAIN_FOR_CLANG)/x86_64-linux/bin \
-no-integrated-as

これでmakeが通るようになる。といっても、手元のマシンでmakeが終了するのに約1時間かかった。大変な処理だ。

make

これでAndroidのイメージが出来上がる。最後にイメージファイルを作成する。

mkimage -A arm -O linux -T ramdisk -a 0x2000000 -n "Zedboard ramdisk" -d ./out/target/product/zedboard/ramdisk.img uramdisk.image.gz

過去の記事

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

「Zedroid - Android (5.0 and later) on Zedboard」をやってみる(3. uImageのビルド)

前回の続き。参考にしているのは以下の資料。

www.slideshare.net

uImageのビルドを行う。

カーネルビルド。

sudo apt install -y u-boot-tools
git clone https://github.com/noritsuna/zedroid_device_xilinx_zedboard-kernel.git
cd zedroid_device_xilinx_zedboard-kernel/
git checkout zedroid-5.0.2_r1
make zynq_zed_android_defconfig
make uImage LOADADDR=8000

これでuImageが作成される。

  UIMAGE  arch/arm/boot/uImage
Image Name:   Linux-3.17.0-ge380070
Created:      Sun Apr 30 22:26:01 2017
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    3311208 Bytes = 3233.60 kB = 3.16 MB
Load Address: 00008000
Entry Point:  00008000
  Image arch/arm/boot/uImage is ready

バイスリーファイルを作成する。

make zynq-zed-adv7511.dtb
  DTC     arch/arm/boot/dts/zynq-zed-adv7511.dtb

バイスリーファイルを名前変更しておく。

mv arch/arm/boot/dts/zynq-zed-adv7511.dtb arch/arm/boot/dts/devicetree.dtb

関連記事

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

「Zedroid - Android (5.0 and later) on Zedboard」をやってみる(2. U-Bootの作成)

前回の続き。参考にしているのは以下の資料。

www.slideshare.net

U-bootをビルドする

まずは、ZedBoard Linux用のU-Bootをコンパイルする。これは、Xilinxリポジトリからダウンロードしてコンパイルする。

VivadoがインストールされていればARMのクロスコンパイラ群はすでにインストールされている。 また、Xilinxのu-boot-xlnxリポジトリを一からダウンロードすると巨大なので、githubにアップされているリリースパッケージxilinx-v2017.1.tar.gzを利用した。

sudo apt install device-tree-compiler

wget https://github.com/Xilinx/u-boot-xlnx/archive/xilinx-v2017.1.tar.gz
tar xfz xilinx-v2017.1.tar.gz
cd u-boot-xlnx-xilinx-v2017.1

export CCOMPILER=arm-xilinx-eabi-gcc
export CROSS_COMPILE=arm-xilinx-eabi-
export ARCH=arm

make zynq_zed_config
make

u-bootのファイルが生成されている。

ls -1 | grep u-boot
u-boot
u-boot-nodtb.bin
u-boot.bin
u-boot.cfg
u-boot.cfg.configs
u-boot.img
u-boot.lds
u-boot.map
u-boot.srec
u-boot.sym

SDKでのU-bootの作成

[File]→[New]→[Application Project]を選択する。

Project Nameには"FSBL"を指定する。

Target Hardwareには何故か生成したハードウェアプロジェクトcf_adv7511_zed_hw_platform_1が表示されていなかったので、自分で作る羽目になってしまった。

“Target Hardware"のグループで[New]をクリックする。

新しく"Project Name"として"cf_adv_7511_hw_platform_1"を指定し、エクスポートしたハードウェアのhdfファイルを指定する。これは、プロジェクトディレクトadv7511/zed/adv7511_zed.sdk/system_top.hdfを指定する。 これ[Finish]をクリックすると、新しくTarget Hardwareが指定されていることがわかる。

上記は別に必要なくて、system_top_hw_platform_0を指定しておけば良いということが分かった。

f:id:msyksphinz:20170430223121p:plain

[Next]をクリックする。

“Available Templates:"は"Zynq FSBL"を指定する。

f:id:msyksphinz:20170430223204p:plain

FSBLのプロジェクトが作成された。

f:id:msyksphinz:20170430223215p:plain

Zynq Boot Imageを作成する。

SD-Cardに格納すべきブートイメージを作成する。

[Xilinx-Tools]→[Create Zynq Boot Image]をクリックする。

f:id:msyksphinz:20170430223427p:plain

最初は、何も入力されていなかった。まずは、先ほど指定したu-bootのバイナリを指定する。

f:id:msyksphinz:20170430223511p:plain

SDKディレクトadv7511/zed/adv7511_zed.sdk/FSBL/Debug/FSBL.elfと、生成したハードウェアファイルadv7511/zed/adv7511_zed.sdk/cf_adv7511_zed_hw_platform_1/system_top.bitを指定する。

また、Output BIF file pathにはadv7511/zed/adv7511_zed.sdk/bootimage/boot.bifを、Output pathにはadv7511/zed/adv7511_zed.sdk/bootimage/boot.binを指定した。

f:id:msyksphinz:20170430223529p:plain

どうやら最初にFSBLのプロジェクトを選択した状態で[Create Zynq Boot Image]を選択すると、デフォルトでいくつかファイルが指定される様子。

u-bootのバイナリu-bootu-boot.elfにリネームしておき、指定する。

f:id:msyksphinz:20170506113927p:plain

これでCreate Imageをクリックすると、ブートイメージBOOT.binが作成される。

次はカーネルのビルドを行おう。

関連記事

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com