前回は、PetaLinux v2017.2をカスタマイズ無しでビルドして、ZYBOで動くことは確認できたけれども、Ethernetの設定などが動いていなさそうだ、というところまでだった。
ログを見る限りでは、IntelのEthernetドライバを使っているようだったのだが、ZYBOにはカニマークのチップが載っている。
RTL8211E-VLというチップのようだ。
FPGAはともかく、デバイスドライバ周りはLinuxの範囲だから、ちゃんと仕立てないといかん。
PetaLinux v2017.2のリファレンスガイドによると、ZYBOで関係しそうなAuto Config SettingsのDevice-Treeファイルは、
- skeleton.dtsi
- zynq-7000.dtsi
- pcw.dtsi
- system-conf.dtsi
- system-top.dts
のようだ。
それ以外にLinuxで関係するのだったら、kernelのconfigか。
こちらは別フォルダで、project-spec/meta-plnx-generated/recipes-kernel/linux/configs/plnx_kernel.cfgにある。
reciepsというフォルダ名があるので、Yocto Projectなのか。
Digilentのpetalinux-bspsにもdevice-treeのディレクトリがある。
そして、kernelのconfigもあるようだ。
まず、Device Treeから片付ける。
dtsiの"i"は、includeの"i"。
components/plnx_workspace/device-tree-generation/system-top-dtsの中で*.dtsiをincludeしている。
推測だが、zynq7000.dtsiは差分があるものの、zynq7000シリーズに共通の設定が書いてありそうな気がするから、最新のものを使った方がよいのではなかろうか。
pcw.dtsiは、差分をマージしよう。
skeleton.dtsiは差分がないので、そのまま。
残るはsystem-conf.tdsiとsystem-top.dts。
どちらも差分が多い。
Digilentの方は、system-top.dtsでsystem-conf.dtsiだけをincludeし、system-conf.dtsiが他をincludeしている。
system-top.dts
system-conf.dtsi
skeleton.dtsi
zynq-7000.dtsi
pcw.dtsi
pl.dtsi
生成した方はzynq-7000.dtsi, pl.dtsi, pcw.dtsi, 最後にsystem-user.dtsiをincludeしている。
system-conf.dtsiは、plnx_arm-system.ppというファイルに出てきたのだが、これは自動生成されたファイルのような気がする。
コメントからすると、system-user.dtsiがsystem-conf.dtsiをincludeしているのかな?
system-top.dtsi
zynq-7000.dtsi
pl.dtsi
pcw.dtsi
system-user.dtsi
system-conf.dtsi
system-conf.dtsiはコメントに"DO NOT modify"となっているから、いじりたくはない。
しかし、アドレスっぽいものが書いてあるので、system-conf.dtsiに反映するための設定がどこかにあるはずだ。
他の設定はともかく、Ethernetのドライバは、kernelのmenuconfigで、ドライバを適当に選んだらうまいことやってくれるんじゃないの?
zynq / zybo > ZyboにてPetalinuxでEthernetを使うまでの手順 - Qiita
&gem0を書き換えたそうだ。
petalinux-config -c kernelも見てみたが、PHYなんかは比較的設定されているように見えるのだ。
system-conf.dtsiは書き換えたくなかったが、includeの関係からすると、そこを書き換えるのが一番よさそうに見える。
今回は、ZYBOの方にある&gem0の設定を追記して、petalinux-buildし直す。
ダメだ、変わらん。
ZYBOのPHY設定をコピーするのではなく、上記リンク先に書いてあるように書き換えた。
違いは、regやxlnxが追加されているというところか。
・・・ダメだった。
ログが変わらんので、どこかが足りないのか。
Generic PHY e000b000.etherne:00: attached PHY driver [Generic PHY] (mii_bus:phy_addr=e000b000.etherne:00, irq=-1)
e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
しかし、こちらのログでは、e1000eだがネットにつながっている。
PetaLinuxプロジェクトの新規作成 - ぼくの技術日誌
こちらはPHY driverがRTL8211Eとなっているが、私のところではGeneric PHYになっている。
そこだろうけど、kernelのconfigはRealtek PHYsにチェックを入れてるしなぁ。
Subsystem AUTO Hardware SettingsのEthernet Settingsで"ps7_ethernet_0"になっているのが関係しているのだろうか?
これ以外の選択は"manual"しかないのだが。。。
リファレンスガイドを見ていると、そういう設定は"system-user.dtsi"に書くようだ。
場所は、project-spec/meta-user/recipes-bsp/device-tree/filesの下にあった。
/include/ "system-conf.dtsi" / { }; &gem0 { phy-handle = <&phy0>; phy-mode = "rgmii-id"; reg = <0xe000b000 0x1000>; xlnx,eth-mode = <0x1>; xlnx,has-mdio = <0x1>; xlnx,ptp-enet-clock = <108333336>; ps7_ethernet_0_mdio: mdio { phy0: phy@1 { compatible = "realtek,RTL8211E"; device_type = "ethernet-phy"; reg = <1>; }; }; };
新しくprojectを作り直した。
が、全然だめになった。
macb e000b000.ethernet: invalid hw address, using random
libphy: MACB_mii_bus: probed
mdio_bus e000b000.etherne:01: mdio_device_register
macb e000b000.ethernet eth0: no PHY found
少なくとも、以前はPHYを認識できていたということか。
そして比較して気付いたが、U-Bootの段階で以前はログが出ていた。
Net: ZYNQ GEM: e000b000, phyaddr ffffffff, interface rgmii-id
PHY is not detected
GEM PHY init failed
No ethernet found.ZYNQ GEM: e000b000, phyaddr ffffffff, interface rgmii-id
mdio_register: non unique device name 'eth0'
ZYNQ GEM: e000b000, phyaddr ffffffff, interface rgmii-id
mdio_register: non unique device name 'eth0'
ZYNQ GEM: e000b000, phyaddr ffffffff, interface rgmii-id
mdio_register: non unique device name 'eth0'
ZYNQ GEM: e000b000, phyaddr ffffffff, interface rgmii-id
mdio_register: non unique device name 'eth0'
No ethernet found.
ZYNQ GEM: e000b000, phyaddr ffffffff, interface rgmii-id
mdio_register: non unique device name 'eth0'
eth0はLinuxで見えていたのだが、U-Bootだから設定していないので出ているログなのだろうか?
念のため、system-user.dtsiに追加した部分をコメントアウトしたが、ちゃんとeth0が見えた。
ただ、U-Bootのログが出ていない・・・・あ、Subsystem AUTO Hardware SettingsのEthernet SettingsでPrimary Ethernetをmanualにしていたのをわすれていた。
設定をp7にすると、U-Bootに同じログが出た。
ということは、Subsystem AUTO Hardware SettingsはLinuxでEthernetを使うことに関しては影響がないということか。
PHYのところがうまくいってないのか。
まあ、少なくとも、system-user.dtsiに書いたことが原因でethernetのPHYが認識しなくなったのだから、ここにうまいこと書けばよいのだろう。
&gem0 { phy-handle = <&phy0>; phy-mode = "rgmii-id"; gem0_mdio: mdio { phy0: phy@1 { compatible = "realtek,RTL8211E"; device_type = "ethernet-phy"; reg = <1>; }; }; };
これはpetalinux-bspsに書いてあった内容だが、ダメ。
U-Bootに出てくるログで、phyaddrが1になった。
macb e000b000.ethernet eth0: Cadence GEM rev 0x00020118 at 0xe000b000 irq 145 (00:0a:35:00:22:01)
Generic PHY e000b000.etherne:00: attached PHY driver [Generic PHY] (mii_bus:phy_addr=e000b000.etherne:00, irq=-1)↓↓
mdio_bus e000b000.etherne:01: mdio_device_register
macb e000b000.ethernet eth0: no PHY found
見比べると、eth0が見えているときはirq=-1だから、変な感じがする。
アドレスは指定していないのに、0xe000b000になるのも、なんとなく気になる。
うーん、わからん。。。
知識がない分、地道にdtsiを変更しながら動作を見ていくしかないのか。
わたしも同じ状況で、今やPetalinux2014.4に戻そうかと思ってます。
返信削除「Xilinxのバカヤローこの3日間の休みを返せ、余計な変更ばかりして」との思いです
うぅ、仲間が。。。
削除Linux環境ができたらHDL勉強するんだ!とがんばっているものの、気力が続くか心配です。
Xilinxの開発ボードだったら標準でサポートされてるんでしょうね。