PYNQ: PYTHON PRODUCTIVITY

Can't access Jupyter through Browser

Hi,
I’m unable to connect my Browser to Jupyter-notebook on my custom built Pynq board.
The board is the GENESYS ZU 3EG and I used the prebuilt bionic aarch 64 via the command
make BOARDS=GENESYS PREBUILT=bionic_aarch…

The command ifconfig shows Ethernet connection:

xilinx@pynq:~$ ifconfig
eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 62:c1:e7:f4:49:86 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 29

eth0:1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.1.99 netmask 255.255.255.0 broadcast 192.168.1.255
ether 62:c1:e7:f4:49:86 txqueuelen 1000 (Ethernet)
device interrupt 29

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 576 bytes 42230 (42.2 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 576 bytes 42230 (42.2 KB)
TX errors 0 dropp
ed 0 overruns 0 carrier 0 collisions 0

Also I configured a static IP adress 192.168.1.99 which should be on the same network as my computer (static IP 192.168.1.105)

If I type ps aux | grep jupyter I get the output:

root 417 20.8 1.2 62132 50940 ? S 16:17 0:05 /usr/bin/python 3 /usr/bin/jupyter-notebook --no-browser --allow-root
xilinx 1405 0.0 0.0 5672 632 ttyPS0 S+ 16:17 0:00 grep --color=au to jupyter

also which jupyter returns:
/usr/bin/jupyter

and jupyter-notebook gives:

[I 16:25:09.388 NotebookApp] Writing notebook server cookie secret to /run/user/1000/jupyter/notebook_cookie_secret
[I 16:25:10.369 NotebookApp] Serving notebooks from local directory: /home/xilinx
[I 16:25:10.370 NotebookApp] 0 active kernels
[I 16:25:10.370 NotebookApp] The Jupyter Notebook is running at:
[I 16:25:10.370 NotebookApp] http://localhost:8888/?token=d4ba082ef4bdb2cb099c83e9d8e87894901b02baec9b1a84
[I 16:25:10.371 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[W 16:25:10.372 NotebookApp] No web browser found: could not locate runnable browser.
[C 16:25:10.373 NotebookApp]

Copy/paste this URL into your browser when you connect for the first time,
to login with a token:
    http://localhost:8888/?token=d4ba082ef4bdb2cb099c83e9d8e87894901b02baec9b1a84

but I cannot open this link, or open jupyter through 192.168.1.99:9090 or pynq:9090 either.

looking at the kernel messages related to Ethernet with dmesg | grep eth I get:

xilinx@pynq:~ dmesg | grep eth [ 0.000000] psci: probing for conduit method from DT. [ 5.213223] macb ff0b0000.ethernet: Not enabling partial store and forward [ 5.220130] macb ff0b0000.ethernet: invalid hw address, using random [ 5.231401] Generic PHY ff0b0000.ethernet-ffffffff:0f: attached PHY driver [Generic PHY] (mii_bus:phy_addr=ff0b0000.ethernet-ffffffff:0f, irq=POLL) [ 5.244621] macb ff0b0000.ethernet eth0: Cadence GEM rev 0x50070106 at 0xff0b0000 irq 29 (62:c1:e7:f4:49:86) [ 10.060349] macb ff0b0000.ethernet: gem-ptp-timer ptp clock registered. xilinx@pynq:~

And my custom device tree dtsi file looks like this for the ethernet part:

&gem0 {
phy-handle = <&phy0>;
phy-mode = “rgmii-id”;
phy0: phy@15 {
reg = <0x0F>;
};
which might not be correct? But received no errors from the operation system regarding network related issues.
Now I have the board connected via Ethernet to USB adapter to my PC. There I can ping from my computer to the board. But if I want to Ping my PC from the Board with ping: 192.168.1.105 I get:
From 192.168.1.99 icmp_seq=1 Destination Host Unreachable

If I connect my board directly to the router, I can’t ping any of PC or board.
I tried changing the settings of my router and allowed port forwarding for the ip adress of my computer
192.168.1.105 for the port 9090 (which should be the port jupyter will be using, right?) but without success.
If I look at the devices in my network over the site of the router (with the board directly connected to the router) the device doesn’t show up (at least it is not obvious to me)

Is this a problem related to the Firewall? I also tried creating a rule for the Ip adress of my board here, without success.

Does anyone know what I could try of what the problem might be or what I could test? Do you think it is a problem related to my build or is it a firewall issue?
Any help would be appreciated since I’m out of my depth at this point :smiley:
Best regards
Daniel

try to add “–ip=0.0.0.0” option

Board to PC ping is a firewall issue. I had similar error with tcf agent and pinging.

Thanks for replying so quickly. The option -ip=0.0.0.0 didn’t work also, the conncection also times out

From your log, Jupyter is running on http://localhost:8888, not on port 9090 that is usually used for PYNQ.

From your post I think you have tried out combinations, but not this one, so please check this first:
When directly connected to your PC, you need to browse to the http://:
Your port seems to be the Jupyter default: 8888
http://192.168.1.99:8888

However, if you can’t ping, you need to try resolve that issue first. It sometimes takes a little time for IP addresses to be resolved, so you may want to try a few times.

For info, the localhost link that Jupyter reports (http://localhost:8888) is only valid if you are connecting from a browser on the same machine Jupyter is running on.

If you connect the board to your router, it should get a DHCP IP address.
The static IP address probably won’t work. You need to figure out what this is. If you have a terminal to the board you can check with ifconfig once you are connected to the route.

If your router supports domain name resolution, you may be able to use the hostname of the board (should be pynq by default, but you can change it with the hostname command):
http://pynq:8888 (or whatever the Jupyter port is)

Cathal

hey Cathal,
thanks for clearing up my port confusion. There may be another issue I don’t understand because using port 8888 also doesn’t work.
I tried also with the ip argument: jupyter-notebook --ip=192.168.1.99 but this didn’t work either
for my router settings, I created a new rule for the ip of my computer in the network 192.168.1.105 with port 8888
I even created a new Firewall rule for port 8888 for local subnet with TCP protocol, still no success

Just for understanding:
the dmesg command has this line:
macb ff0b0000.ethernet: invalid hw address, using random [ 5.231401]
could this be the reason behind it not working?
Maybe there is something wrong with the dtsi file I constructed?
what kind of errors could it be?

I don’t think this is an issue. I think the message is just telling you that the initial MAC address is invalid, so it will be set to something else.

I’d suggest you try to connect your board directly to your PC first. This avoids using your router and any rules that may be incorrect.

Unless I’m missing something else, this looks like your board has a static IP.

It sounds like you have an Ethernet to USB adapter, so to be clear the USB is plugged in to your computer and you have an Ethernet cable from the adapter to your board.
You need to make sure that you have configured the IP address for the new (USB) Ethernet device to be in the same range as your board. I think you said you did this and set it to: 192.168.1.105, but please check this, and make sure you did it for the USB device and not any other Ethernet device in your computer.

Try make sure ping works first in both directions. From PC to board and board to PC. If it works in one direction it should work in the other. I was surprised you mentioned earlier that it only seemed to work in one direction.

Once this is working, then check Jupyter is running, and the port it is running on. You should be able to browse to the :

Can you check those steps and report back?

Cathal

Ah ok I understand, I configured a static ip adress on the board in the /etc/network/interfaces.d/eth0 file. There the following is written:

auto eth0
iface eth0 inet dhcp

auto eth0:1
iface eth0:1 inet static
address 192.168.1.99
netmask 255.255.255.0

As far as I understood this makes the ip adress static and in the same range as the other devices in my network (192.168.1.xxx)?

I use indeed an Ethernet to USB adapter and the setup is exactly as you described. If I open my network devices tab if I plug it in I see a new Ethernet 2 device which says: non identified network, ASIX AX88179 USB3.0 to Gigabit Ethernet.
There I went to the Internetprotocol Version 4 Tab and gave it the same address as my board 192.168.1.99. This is probably wrong (and explains why I could ping there from my computer)? But I used another random address like 192.168.1.100 also.
My computer has the address 192.168.1.105 in the network which I checked via the website from the ISP where it said DESKTOP-name_of_my_computer 192.168.1.105

ping command still doesn’t work and on my board there are 3 leds:
2 of them are on permanently (Link, 1000Base-T Link) and the Activity LED blinks rarely.
Maybe important: In order for the Zynq image to run without network related errors I disabled the MDIO pins with Vivado.

sorry if I seem clueless, I’m a complete newbie when it comes to networking stuff

Maybe another information: When I hit the route command I get the following output:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

By the way: ping 127.0.0.1 works from the board

OK

This is enabling DHCP on eth0 (the Ethernet interface)

auto eth0
iface eth0 inet dhcp

This sets up an alias (eth0:1) and sets a static IP address.

auto eth0:1
iface eth0:1 inet static
address 192.168.1.99
netmask 255.255.255.0

If you set your board to have 192.168.1.99 and also you computer this won’t work. The need different addresses on the same subnet. If your computer has 192.168.1.99 and you ping this address, it will

It sounds like your main network is running on 192.168.1.* and your computer has this IP for the real Ethernet device: 192.168.1.105

If you connect the board directly to the computer with the USB to Ethernet, it can’t access the main network (without bridging the Ethernet and the USB to Ethernet devices - but ignore this for now).

The easiest way to set up a connection is to setup a different subnet for your board and the USB to Ethernet adapter for your computer.
Can you try set the IP of the board back to 192.168.2.99, and set the IP for your USB to Ethernet to a different IP but in the same range. Say 192.168.2.100.
https://pynq.readthedocs.io/en/v2.6.1/appendix.html#assign-your-computer-a-static-ip

Try ping from board to PC and post back with results.

Cathal

This is a loopback address, so again the board is just pinging itself.

Cathal

Thanks for the explanation
Like you said I now changed the IP back to 192.168.2.99 and set the IP for the USB to Ethernet to 192.168.2.100 with still the same result, I also read your link again and this is how I changed the
IP in the first place.

Maybe another helpful information:
in the /proc/interrupts file there isn’t any dma related interrupt happening with the ethernet
29: 0 0 0 0 GICv2 89 Level eth0, eth0

Maybe it’s an useless information, for me it sounds like there could be an error with the interrrupt related pin assignment in the ethernet interface? Just a wild guess

Could it be useful to update the dtsi file and build again or is the ethernet setup in general correct and this is just a networking issue (related with firewall etc.)?
Are there other ways testing what the problem is?

Best regards
Daniel

To further specify, from the board:
Pinging to the usb-ethernet adapter yields:

xilinx@pynq:~$ ping 192.168.2.100
PING 192.168.2.100 (192.168.2.100) 56(84) bytes of data.
From 192.168.2.99 icmp_seq=1 Destination Host Unreachable
From 192.168.2.99 icmp_seq=2 Destination Host Unreachable
From 192.168.2.99 icmp_seq=3 Destination Host Unreachable

And to the other subnetwork (192.168.1.xxx):
connect: Network is unreachable

So…
You have assigned static ip to board?
0. Can router detect your devboard? → No? Something on devboard is broken or cable issue.
1. Can you ping your board from PC? → is there connection PC→devboard?
2. Can you ping from board to PC? → No? 90% firewall issue

PYNQ and usb wifi/eth adapters should work out of box.

Hi bartokon,
sounds reasonable, the problem is I built a Pynq image for a custom board using the generic bionic aarch 64 image. My device is the Genesys ZU 3EG and I constructed the dtsi file on my own. So there comes a big source of possible errors. The Linux booting process however shows no errors and dmesg recognizes the Ethernet-USB adapter + ifconfig shows the conncection. Do you think it could be a built error related to my device tree? If I did something wrong there wouldn’t ifconfig or dsmeg or jupyter show me errors?

I think I’m stuck at point 0:
My board (being connected to my computer via ethernet-usb adapter) isn’t picked up by my router.
What is strange is:

  • Both leds of the ethernet-usb adapter light up ( Amazon Basics USB-3.0-auf-10/100/1000-Gigabit-Ethernet-Internetadapter, driver is ASIX AX88179 USB3.0 to Gigabit Ethernet)
  • the Link, 1000Base-T Link leds on the board light up permanently
  • the Activity LED on the board lights up when starting up several times and then blinks rarely

I can test out if the Ethernet works in general, since I have a default Petalinux image on another SD card.
For me there are 2 possibilities:

  1. I did something wrong when constructing the device tree (dtsi file) or some setup in vivado I didn’t think about
  2. There is a hardware error

The cable should work fine by the way since I tested it on my computer (WLAN off, this cable posing the connection to my router)

Is there more ways of testing what is the problem?
Best regards

I have one question.

Gensys have its Ethernet port connected to PS, and you tried to modify it via .dtsi and possibly broke it.(It doesn’t matter)

Now you are attaching an independent ethernet-usb controller to the dev board that gets automatically configured via dhcp, but the router can’t find it?

Step by step we need to eliminate error source by error source

of course, to your first question:

  • Genesys has its Ethernet port connected to PS, in my Vivado design, GEM0 is enabled without the MDIO pins (with them enabled I got errors and ifconfig didn’t show eth connection only lo)
  • here is the description of the Digilent board: Genesys ZU Reference Manual [Digilent Documentation] in the MIO 26-51: Bank 501 section pins 26-38 are assigned to the Ethernet connection, pins 76 and 77 are ETH_MDC and ETH_MDIO respectively
  • These Pins I disabled in Vivado through a check box which lead to all networking related errors to disappear
  • My dtsi file for the Ethernet was very generic containing only this part:
    &gem0 {
    phy-handle = <&phy0>;
    phy-mode = “rgmii-id”;
    phy0: phy@15 {
    reg = <0x0F>;
    };

To your second question:
From my understanding (and cathalmccabe) writing to the /etc/network/interfaces.d/eth0 file the Board
enables DHCP on eth0 and sets up a static network.
I don’t know if the ethernet-usb controller gets configured via dhcp, is there a way to find out?
My computer says the device works fine but now just looking under Events I get the message:

The device “USB\VID_0B95&PID_1790\000050B6FFC85C” requires further installations

also there is a box unchecked which says:
Allow other users to use this connection as internet conncection
I could write more information but you probably know better than me what is important :smiley:

I had wifi-usb adapter for Minized and configured it like this:
image
image

So maybe some thing like this?
sudo dhclient eth0

Thanks for your help, I will try it out later in the evening!
Best regards
Daniel

Hi bartokon,
I did some more testing and tried your suggested command: sudo dhclient eth0
This ran without errors but what I found interesting is that even then with ifconfig I just got the
generic:
eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 62:c1:e7:f4:49:86 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 29

when connected to the router. I then used the SD-card with a preinstalled Petalinux image to see if my
hardware is alright and if I can access Ethernet in general with this board. There connecting the board with the router worked straight away (a dhcp server was present probably)

ifconfig gave me:
root@Zuca:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:18:3E:03:48:01
inet addr:192.168.1.29 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::218:3eff:fe03:4801/64 Scope:Link
inet6 addr: 2a01:c23:c443:5000:218:3eff:fe03:4801/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1666 (1.6 KiB) TX bytes:1658 (1.6 KiB)
Interrupt:29

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

where you can see, an ip addr. is already present.
Also I could ping:
root@Zuca:~# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: seq=0 ttl=64 time=0.574 ms
64 bytes from 192.168.1.1: seq=1 ttl=64 time=0.297 ms
Also from my computer I could ping to the board.

the /etc/network/interfaces (the eth0 part) looked just like on my custom SD card:

Wired or wireless interfaces

auto eth0
iface eth0 inet dhcp

route gave the output:
default o2.box 0.0.0.0 UG 10 0 0 eth0
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0

and in the proc/interrupts I saw 221dma-eth0 related interrupts on CPU0:
/proc/interrupts
29: 221 0 0 0 GICv2 89 Level eth0, $

looking on my ethernet kernel messages I got this:
root@Zuca:/etc/network/if-post-down.d# dmesg | grep eth
[ 0.000000] psci: probing for conduit method from DT.
[ 4.984592] usbcore: registered new interface driver cdc_ether
[ 7.133928] macb ff0b0000.ethernet: Not enabling partial store and forward
[ 7.150273] TI DP83867 ff0b0000.ethernet-ffffffff:0f: attached PHY driver [TI DP83867] (mii_bus:phy_addr=ff0b0000.ethernet-ffffffff:0f, irq=68)
[ 7.163145] macb ff0b0000.ethernet eth0: Cadence GEM rev 0x50070106 at 0xff0b0000 irq 29 (00:18:3e:03:48:01)
[ 9.032645] macb ff0b0000.ethernet: gem-ptp-timer ptp clock registered.
[ 9.039352] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 10.536855] macb ff0b0000.ethernet eth0: link up (1000/Full)
[ 10.542528] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 595.229748] macb ff0b0000.ethernet eth0: link down
[ 606.061723] macb ff0b0000.ethernet eth0: link up (1000/Full)

After configuring a static IP address and connecting the board with an ethernet cable between my board and computer (connecting my computer via WIFI first because it has only 1 LAN connection) I coud ping the board from my computer but not from my board.
I got the same result when connecting my board via an ethernet-usb adapter to my computer and connecting my computer to the router via LAN.

Like you said this is probably due to Firewall issues but should verify that the board in general works and my settings (IP address of Ethernet-USB adapter) should be correct. From my understanding this means something in my building process must be wrong:

Here a few more information, I found out:

  • in the first few messages I get on the prompt I get the following:
    ZYNQ GEM: ff0b0000, mdio bus ff0b0000, phyaddr 15, interface rgmii-id
    Could not get PHY for eth0: addr 15
    No ethernet found.
    These were basically what I wrote in the dtsi file and I got this lines from the dtsi file in the Petalinux repository for the ZU-3EG Board: Genesys-ZU-OOB-os/project-spec/meta-user/recipes-bsp/device-tree/files at 3eg-master · Digilent/Genesys-ZU-OOB-os · GitHub
    Here however I removed a lot of the lines since when just copying all of those files in my own petalinux repository (including U-Boot and FSBL files), I got loads of errors while building
    The addr 15 however I saw also when looking into the data sheet (schematics)

  • In the original dtsi File there was also another GPIO interrupt pin listed, which I removed. Could this be the source of the error?

Is there some instruction anywhere of constructing a device tree for the Pynq image? Maybe using the Petalinux build process?