0からzyboのLinux起動を試しており、イーサネットがつながらなかった。
e-tipsmemo.hatenablog.com
大体ここをベースに今回はUbuntu 17 (Artful)を利用する。
①デザイン
zyboのイーサネットピンをMIOから出す。MDIOを忘れないようにする。
参考
②bitstreamをつくる。
省略
③SDKを立ち上げてFSBLを作る。
省略
④Device treeをつくる。
ここが一番バージョンによって変わっているのか、ドライバが違うからだめなのかよくわからないが
とにかく、Digilentのgithubにある書き方では動かなかった。(いままでは動いていた気がする)
動かなかった。。?書き方。
linux-Digilent-Dev/zynq-zybo.dts at master · Digilent/linux-Digilent-Dev · GitHub
ps7_ethernet_0: ps7-ethernet@e000b000 { #address-cells = <1>; #size-cells = <0>; clock-names = "ref_clk", "aper_clk"; clocks = <&clkc 13>, <&clkc 30>; compatible = "xlnx,ps7-ethernet-1.00.a"; interrupt-parent = <&ps7_scugic_0>; interrupts = <0 22 4>; phy-handle = <&phy0>; phy-mode = "rgmii-id"; reg = <0xe000b000 0x1000>; xlnx,eth-mode = <0x1>; xlnx,has-mdio = <0x1>; xlnx,ptp-enet-clock = <108333336>; mdio { #address-cells = <1>; #size-cells = <0>; phy0: phy@1 { compatible = "realtek,RTL8211E"; device_type = "ethernet-phy"; reg = <1>; } ; } ; } ;
これでも一応、eth0は出現するが
$ sudo ip link set eth0 up
でエラーが出る。
xemacps e000b000.ps7-ethernet: XEMACPS mii bus mii_probe fail.
xemacps e000b000.ps7-ethernet: eth0: no PHY found
device-tree-generatorを使ってみる。
xilinxの最新のdevice-tree-generatorを利用すると、全く違う構成になっている。
gem0: ethernet@e000b000 { compatible = "cdns,zynq-gem", "cdns,gem"; reg = <0xe000b000 0x1000>; status = "disabled"; interrupts = <0 22 4>; clocks = <&clkc 31>, <&clkc 31>, <&clkc 14>; clock-names = "pclk", "hclk", "tx_clk"; #address-cells = <1>; #size-cells = <0>; };
status="okay"
に変更。
phy-mode
を設定しているのは、pcw.dtsi
にある。
&gem0 { phy-mode = "rgmii-id"; status = "okay"; xlnx,ptp-enet-clock = <0x6750918>; };
ここはどうやらgem0
本体と最終的に中身がマージされる。
あとはmdio
の設定があるべきでそれは
system-top.dts
に置く?
mdio { compatible= "cdns,macb-mdio"; reg= <0xe000b000 0x1000>; clocks = <&clkc 30>, <&clkc 30>, <&clkc 13>; clock-names = "pclk", "hclk", "tx_clk"; #address-cells = <1>; #size-cells = <0>; eth_phy0:phy@1 { compatible = "realtek,RTL8211E"; device_type = "ethernet-phy"; reg = <0x1>; }; };
これを追加して(cpuなどと同じ階層)みたところ、なんかうまくいった。
compatibleの値はプローブされるときに必要になる気がしているが
それが違うということはなんかドライバが別なのだろうか・・?
bootargs = "console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=1";
も忘れないようにする。
⑤ipv4 dhcp
なぜかipv4が降ってこなくて、ネットに繋がらなかった。
エトセ・ネットワーク・インターフェースはもういらないらしく、代わりにnetplanなるもので設定するらしい。
websiteforstudents.com
# This file describes the network interfaces available on your system # For more information, see netplan(5). network: version: 2 renderer: networkd ethernets: eth0: dhcp4: yes
コマンドによって適用されるが、文法チェックを行ってくれるので安心。
sudo netplan apply
これでipv4が降ってきてpingが通った。
もしかしたら、
/etc/systemd/network/25-eth0.network
に
[Match] Name=eth0 [Network] DHCP=ipv4
が追加で必要かもしれない。