0からzyboのLinux起動を試しており、イーサネットがつながらなかった。
e-tipsmemo.hatenablog.com
大体ここをベースに今回はUbuntu 17 (Artful)を利用する。
①デザイン
zyboのイーサネットピンをMIOから出す。MDIOを忘れないようにする。
参考
④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が降ってこなくて、ネットに繋がらなかった。
エトセ・ネットワーク・インターフェースはもういらないらしく、代わりに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
が追加で必要かもしれない。