zybo ethernet Ubuntu 17 ipv4

0からzyboのLinux起動を試しており、イーサネットがつながらなかった。
e-tipsmemo.hatenablog.com
大体ここをベースに今回はUbuntu 17 (Artful)を利用する。

①デザイン

zyboのイーサネットピンをMIOから出す。MDIOを忘れないようにする。
f:id:katakanan:20180207210954p:plain
参考
f:id:katakanan:20180205235840p:plain:w200

②bitstreamをつくる。

省略

SDKを立ち上げてFSBLを作る。

省略

④Device treeをつくる。

ここが一番バージョンによって変わっているのか、ドライバが違うからだめなのかよくわからないが
とにかく、Digilentgithubにある書き方では動かなかった。(いままでは動いていた気がする)
動かなかった。。?書き方。
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";
も忘れないようにする。

Ubuntu ipv6の無効化

ここから先はUbuntuの設定

$ sudo ip link set eth0 up

をすると、NICが起きる(?)。
qiita.com
これをすれば無効にはなった。

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

が追加で必要かもしれない。