ZYBO-Z7でUbuntu 16.04 LTSを動かす - メモ置き場
第5回目.
今回はZynq用のLinux kernelとデバイスツリーを作成する.
Linux kernelのビルド
xilinx-wiki.atlassian.net
を参考にすすめる.
まずレポジトリからコードをとってブランチを切っておく.
git clone https://github.com/Xilinx/linux-xlnx.git cd linux-xlnx git checkout -b zybo-z7
zynq用の設定をする.menuconfigでは設定画面が出てくるがそのままexitをしてよい.
make ARCH=arm xilinx_zynq_defconfig make ARCH=arm menuconfig
ビルドする.
make ARCH=arm UIMAGE_LOADADDR=0x8000 uImage
デバイスツリーの作成
Device Tree Compile(dtc)を使ってデバイスツリーをコンパイルする.XilinxのレポジトリにはZYBO用のデバイスツリーが含まれているので,それを修正してZYBO-Z7で使えるようにする.
arch/arm/boot/dts/zynq-zybo.dtsがそのデバイスツリー.同じディレクトリにzynq-zyboz7.dtsという名前でコピーしておく.zynq-zyboz7.dtsを次のように修正する.
--- arch/arm/boot/dts/zynq-zybo.dts 2019-01-28 23:04:52.689682318 +0900 +++ arch/arm/boot/dts/zynq-zyboz7.dts 2019-01-28 17:00:25.583176452 +0900 @@ -4,10 +4,10 @@ * Copyright (C) 2012 National Instruments Corp. */ /dts-v1/; -#include "zynq-7000.dtsi" +/include/ "zynq-7000.dtsi" / { - model = "Zynq ZYBO Development Board"; + model = "Zynq ZYBO-Z7 Development Board"; compatible = "digilent,zynq-zybo", "xlnx,zynq-7000"; aliases { @@ -19,11 +19,11 @@ memory@0 { device_type = "memory"; - reg = <0x0 0x20000000>; + reg = <0x0 0x40000000>; }; chosen { - bootargs = ""; + bootargs = "console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0"; stdout-path = "serial0:115200n8"; }; @@ -35,7 +35,7 @@ }; &clkc { - ps-clk-frequency = <50000000>; + ps-clk-frequency = <33333333>; }; &gem0 {
なぜかXilinxのレポジトリに元々あるデバイスツリーは/include/の部分が間違っている.
dtcでコンパイルする.
dtc -I dts -O dtb -o devicetree.dtb arch/arm/boot/dts/zynq-zyboz7.dts
これでdevicetree.dtbが生成される.
将来的にPSを変更した場合に,その構成に合うようデバイスツリーを修正しなければならない.例えばPSにAXIバスで何らかのモジュールを接続した場合,AXIバスのアドレスをデバイスツリーに追加していく必要がある.