製品情報>Artix-7評価ボード>MicroblazeでLinux>Linuxカーネルを作る

Linuxカーネルを作る

このディレクトリ以下は書きかけです。内容については保障できません。平成26年7月22日

準備

XILINXの開発環境が入ったLinuxマシンでシェルを立ち上げたら、下の2行を実行してください。

export CROSS_COMPILE=microblazeel-xilinx-linux-gnu-
source /opt/Xilinx/SDK/2013.2/settings32.sh

U-Bootのmkimageツールの作成

U-BootからLinuxを起動するときには、mkimageというツールを使ってカーネルにヘッダを付けなければなりません。mkimageは、u-boot-xlnx/toolsの中にソースがあるものの、ビルドはされていません。どうやら、u-boot-xlnxのディレクトリでmake toolsとやるとmkimageなどのツールが生成されるようです。

つまり、

cd u-boot-xlnx
make tools

とやって、u-boot-xlnxの中にmkimageの実行ファイルを作っておいて、

cd u-boot-xlnx/tools
export PATH=`pwd`:$PATH

を行うことでパスを通しておくことでmkimageが使用できるようになるようです。

このようにして自分でビルドしてもよいのですが、ubuntuなどのディストリビューションではsudo apt-get install u-boot-toolsでもインストールできます。

Linuxのソースを取得する

githubのXILINXのレポジトリからLinuxのソース一式を取得します。結構時間がかかります。

git clone git://github.com/Xilinx/linux-xlnx.git

コンフィグを初期状態にする

以下のコマンドでコンフィグを初期状態にします。

cd linux-xlnx/
make ARCH=microblaze mmu_defconfig

メニューコンフィグを行う

以下のコマンドを入力して、メニューコンフィグを出します。

make ARCH=microblaze menuconfig

 

最初に設定すべき個所は、Platform optionsの中にある

の部分。

Physical address where Linux Kernel is を0xb0000000に設定します。

USE_MSR_INSTRとUSE_PCMP_INSTRは両方とも1にします。(デフォルトのまま)

それ以外をどのような値に設定すればよいかは、fpgaのプロジェクトディレクトリの、\fpga_withmmu\cpu\cpu.mhsの内容を読んで決めます。具体的には、特電Artix-7 MicroBlazeプロジェクトで使用したcpu.mhsは、

BEGIN microblaze
 ・・・
 PARAMETER C_USE_BARREL = 1
 PARAMETER C_USE_HW_MUL = 2
 PARAMETER C_USE_DIV = 1
 PARAMETER C_USE_FPU = 2
 ・・・(中略)・・・
END
・・・(中略)・・・
BEGIN axi_7series_ddrx
 ・・・
 PARAMETER C_S_AXI_BASEADDR = 0xb0000000
 PARAMETER C_S_AXI_HIGHADDR = 0xbfffffff
 ・・・
END

となっているので、

  • USE_BARREL=1
  • USE_DIV=1
  • USE_HW_MUL=2
  • USE_FPU=2

とします。(デフォルトのまま)

結局、設定するのは1か所です。

 

次にESCを押して1段戻った後、General setupの中にあるInitial RAM filesystemの設定。

Initial RAM filesystemを有効にして、

Initramfs source fileesを選択し、ファイル名を${ROOTDIR}/images/rootfs.cpioに設定します。

 

これで最低限のコンフィグができました。ESCを何回か押して、メニューコンフィグを抜けます。

カーネルをビルドする

以下のコマンドを入力し、カーネルをビルドします。10分くらいかかります。

make ARCH=microblaze UIMAGE_LOADADDR=0xb0000000 linux.bin.ub

できあがったイメージファイルは、u-boot-xlnx/arch/microblaze/boot/linux.bin.ubに格納されています。

もし、上記ディレクトリにlinux.bin.ubがなくてlinux.binしかない場合は、mkimageへのパスが通っていないので、本章の最初の部分を見てmkimageを使えるようにしておいてください。

 

いろいろなエラー

Initramfsの指定をしていない場合

xilinx_spi 40a40000.spi: at 0x40A40000 mapped to 0xf0080000, irq=3
xilinx_emaclite 40e00000.ethernet: Device Tree Probing
libphy: Xilinx Emaclite MDIO: probed
xilinx_emaclite 40e00000.ethernet: MAC address is now 02:00:00:00:10:64
xilinx_emaclite 40e00000.ethernet: Xilinx EmacLite at 0x40E00000 mapped to 0xF00A0000, irq=1
Xilinx Watchdog 41a00000.axi-timebase-wdt: Xilinx Watchdog Timer at f00c0000 with timeout 20s
TCP: cubic registered
NET: Registered protocol family 17
Key type encrypted registered
VFS: Cannot open root device "(null)" or unknown-block(0,0): error -6
Please append a correct "root=" boot option; here are the available partitions:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

 

 


© 2017 TokushuDenshiKairo Inc. All rights reserved