March 1, 2014

Linux for Nios II (MMU) on custom design

socfpga-linux カーネルでデフォルトパラメータが設定されている Altera Embedded Systems Development Kit, Cyclone III Edition [altera.com] (3C120) ではない FPGA ボードでオリジナルの Qsys デザインを作成し、MMU を有効にした Nios II で Linux をブートした。

MMU を有効にした Nios II で Linux を動かす場合の最近の流儀はルートファイルシステムは uClinux [uclinux.org] でなく、BuildRoot [buildroot.net] に移行した模様。ビルド方法などの各種情報も Category:Linux - Altera Wiki [alterawiki.com] から Nios II Linux User Manual ・ Documentation ・ RocketBoards.org [rocketboards.org] に一本化されている。流行りは ARM 内蔵の Altera SoC [altera.com] に移ったのか、Nios II (MMU) + Linux で BuildRoot 移行後の情報はとても少ない(日本語では皆無?)。ちなみに、Altera SoC の場合は Yocto になる模様。Altera SoC Yocto Powered Embedded Linux [altera.com]

基本的に Nios II Linux User Manual ・ Documentation ・ RocketBoards.org [rocketboards.org] に従う。以下のセクションは上記文書に合わせる。

ホスト環境
  • RedHat 5 x86_64
  • Quartus II v13.1 (64bit)

1. Setting up toolchain
Sourcery CodeBench Lite Edition - Altera Nios II Processor - GNU/Linux release をダウンロード、インストール。 利用バージョン: Sourcery CodeBench Lite 2013.05-43

$ export PATH=/<your path>/CodeSourcery/Sourcery_CodeBench_Lite_for_Nios_II_GNU_Linux/bin/:$PATH
$ export ARCH=nios2
$ export CROSS_COMPILE=nios2-linux-gnu-

2. Building root filesystem
git レポジトリでも良いが、Buildroot - Download [buildroot.net] より、リリース版をダウンロード、展開。
利用バージョン: buildroot-2013.11.tar.(bz2|gz)

$ wget http://www.rocketboards.org/pub/Documentation/NiosIILinuxUserManual/nios2_defconfig
$ mv nios2_defconfig configs/
$ make nios2_defconfig
$ make menuconfig
$ make source
(オフラインビルドをしたい場合)
$ make

3. Building U-Boot
とりあえず U-Boot は使わず、JTAG (nios2-download) でカーネルとルートファイルシステムをメモリに展開するため、スキップ。

4. Building Nios II Linux kernel
sopc2dts [alterawiki.com] をインストールしておく。
レポジトリ: sopc-tools.git
ブランチは無いので、master の現時点での head をダウンロード、展開、make。
利用バーション: commit 83a62e0e3d8618afeb92bf15f2696fbd0804680a [rocketboards.org]
java がインストールされていなければ、インストールしておく。

# yum install java-1.7.0-oracle-devel  
CentOS 6 で OpenJDK ではエラーになったので、Oracle Java を利用。
OpenJDK (CentOS 6) でもコンパイル、実行できた。
# yum install java-1.7.0-openjdk-devel  

linux-socfpga.git [rocketboards.org] レポジトリの socfpga-3.13 [rocketboards.org] head のスナップショットをダウンロード、展開。
利用バージョン: commit: bb0bb0a2a05443edef7af9f7de9fc8c3f36f01cb [rocketboards.org]
$ make 3c120_defconfig
$ java -jar ../sopc-tools-83a62e0/sopc2dts/sopc2dts.jar --board ../hoge.boardinfo --input ../hoge.sopcinfo --output arch/nios2/boot/dts/hoge.dts
(.sopcinfo は Qsys で出力。.boardinfo は一度 sopc2dts --gui で起動し生成。)
$ make menuconfig
General setup -> Initial RAM filesystem and RAM disk (initramfs/initrd) support を有効化
General setup -> Initramfs source file(s). に "../buildroot/output/images/rootfs.cpio" など、buildroot で生成したルートファイルシステムの .cpio のパスを指定
Platform options -> Compile and link device tree into kernel image を有効化
Platform options -> Device tree source file. に "arch/nios2/boot/dts/hoge.dts" など上記 .dts のパスを指定
$ make zImage
$ nios2-download -g vmlinux && nios2-terminal
(nios2-download -g arch/nios2/boot/zImage の方が転送が速い)

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.