前回の記事では ZedBoard 用のカーネルで ZYBO を起動するところまで書きました。ZedBoard 用のカーネルでは、Ethernet のポートとして cgem0 が認識されますが、ifconfig であれやこれや頑張ってみてもどうにも使えません。dmesg をみるとこんな感じです。
[code:plain]
cgem0:
miibus0:
ukphy0:
ukphy0: none, 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-master, 1000baseT-FDX, 1000baseT-FDX-master, auto
ukphy1:
ukphy1: none, 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-master, 1000baseT-FDX, 1000baseT-FDX-master, auto
cgem0: Ethernet address: 00:1e:c0:ac:bf:8e
[/code]
一方、10.1-RELEASE をみると、src/sys/arm/conf/ZEDBOARD には
[code:plain]
device ether
device cgem # Zynq-7000 gig ethernet device
device mii
device e1000phy
[/code]
と書かれており、cgem に e1000phy を組み合わせて使うことになっているようです。e1000phy は Marvell 88E1000 用のドライバですが、ZYBO に載っているのは Realtek RTL8211E なので、rgephy を使うのが正しいです。
そういうわけで、ZYBO 用のカーネルコンフィギュレーションは ZEDBOARD のをちょっとだけいじれば OK です。
[code:plain]
-ident ZEDBOARD
+ident ZYBO
[/code]
[code:plain]
device ether
device cgem # Zynq-7000 gig ethernet device
device mii
-device e1000phy
+device rgephy # RealTek GbE PHY
[/code]
FreeBSD のソースコードリポジトリからソースツリーを取得してコンパイルします。root 権限は使わずにふつうにユーザ権限でやればよいでしょう。/usr/obj のかわりにどこにオブジェクトを生成するかは MAKEOBJDIRPREFIX で指定します。
[code:plain]
% setenv MAKEOBJDIRPREFIX=${pwd}/obj
% svn co https://svn0.us-west.freebsd.org/base/stable/10 src
% cd src
% cp sys/arm/conf/ZEDBOARD sys/arm/conf/ZYBO
% vi sys/arm/conf/ZYBO
% make -j8 buildworld TARGET_ARCH=armv6
% make -j8 buildkernel TARGET_ARCH=armv6 KERNCONF=ZEDBOARD
[/code]
あとは SD カードをマウントしてふつうにインストールします。
[code:plain]
% su
# mount /dev/da0s2a/mnt
# setenv MAKEOBJPREFIX=…
# make installworld DESTDIR=/mnt
# make installkernel DESTDIR=/mnt KERNCONF=ZYBO
[/code]
installworld では chflags noschg とかしないといけないところが何カ所かありますが、ま、なんとかなります。
ports とかもふつうに使えるので、ある程度の開発環境は ZYBO ネイティブでやるのがよさそうです。僕の研究室の環境ではふつうに ZYBO のログインを LDAP で認証して、NFS 経由でホームディレクトリが見えています 🙂