
Setting Up PYNQ on Legacy Zybo (xc7z010clg400-1): Complete Boot and WiFi Guide
This guide walks through installing PYNQ on the original Zybo (xc7z010clg400-1) and enabling WiFi via a USB dongle. The official PYNQ releases do not directly support this legacy board revision, so additional steps are required.
By the end of this post, you will have:
- A bootable PYNQ system on Zybo
- Ethernet-based internet access
- A compiled and working USB WiFi driver
Hardware and Software Used
| Component | Version / Model | Notes |
|---|---|---|
| Board | Digilent Zybo (xc7z010clg400-1) | Original revision |
| SoC | Zynq-7000 (XC7Z010) | Dual-core ARM Cortex-A9 |
| PYNQ Image | 3.0.1 (community build) | Board-specific fix |
| WiFi Dongle | D-Link USB | RTL8188GU chipset |
| Kernel Driver Source | lwfinger/rtw88 | Compiled natively |
| Host OS | Ubuntu 22.04 LTS | For flashing + DHCP sharing |
| SD Card | 16GB+ | Class 10 recommended |
Why Official PYNQ Images Fail
Official PYNQ images target:
- Zybo Z7-10
- Zybo Z7-20
These use updated BSP configurations incompatible with the older xc7z010clg400-1 board.
Typical symptoms if you try an official image:
- Board does not boot
- HDMI shows no output
- Stuck before kernel load
If this happens, the issue is not your SD card. It is a device tree / BSP mismatch.
Flashing a Compatible PYNQ Image
A community-maintained image exists for this legacy board:
Repository: https://github.com/nick-petrovsky/PYNQ-ZYBO
Download the patched image:
Zybo-3.0.1-fix-boot-bin-fix-havege.img.xz
Flash the Image
On Linux:
unxz Zybo-3.0.1-fix-boot-bin-fix-havege.img.xz
sudo dd if=Zybo-3.0.1-fix-boot-bin-fix-havege.img of=/dev/sdX bs=4M status=progress
sync
Replace /dev/sdX carefully.
If flashing fails:
- Reformat SD as FAT32 first
- Try a different SD card
- Avoid USB hubs during flashing
Insert SD card, set boot mode to SD, power on.
You should see Linux boot over HDMI or serial.
Getting Temporary Internet (Ethernet Sharing)
The default image does not include full WiFi driver support. To compile drivers, you need internet access first.
Option: Share Internet From Laptop
Step 1: Connect Ethernet directly to laptop
Step 2: Enable Internet Sharing (Ubuntu example)
Go to: Settings → Network → Wired → IPv4
Set:
- Method: Shared to other computers
This turns your laptop into a DHCP server.
Step 3: Verify on Zybo
On Zybo terminal:
ifconfig
You should see an IP like:
192.168.42.x
Test connectivity:
ping google.com
If this fails:
- Restart NetworkManager on laptop
- Replug Ethernet cable
- Check if firewall blocks DHCP
Compiling WiFi Driver Natively
The PYNQ image lacks support for RTL8188GU-based dongles.
Your D-Link adapter uses this chipset. Confirm with:
lsusb
Look for:
Realtek Semiconductor Corp. RTL8188GU
Clone Driver Source
We use:
https://github.com/lwfinger/rtw88
On Zybo:
sudo apt update
sudo apt install build-essential git dkms
git clone https://github.com/lwfinger/rtw88.git
cd rtw88
make
sudo make install
If compilation fails:
- Ensure kernel headers are installed
- Run:
uname -r
Then install matching headers.
Load the Module
sudo modprobe rtw88_8188gu
Verify:
dmesg | grep rtw
If the module does not load:
- Check kernel version mismatch
- Reboot and retry
- Ensure Secure Boot is not interfering (rare in this case)
Connecting to WiFi
Scan networks:
iw dev wlan0 scan | less
Connect:
sudo nmcli device wifi connect "SSID_NAME" password "PASSWORD"
Verify:
ifconfig wlan0
ping google.com
You should now have wireless connectivity.
What You Now Have
- Working PYNQ 3.0.1 on legacy Zybo
- Native ARM-compiled WiFi driver
- Wireless network access
- Fully usable Jupyter environment
Access PYNQ notebook from browser:
http://<board-ip>:9090
Common Failure Points
| Issue | Likely Cause | Fix |
|---|---|---|
| No boot | Wrong PYNQ image | Use legacy-compatible build |
| Ethernet no IP | DHCP not enabled | Enable “Shared to other computers” |
| WiFi not detected | Driver missing | Compile rtw88 |
| Module loads but no wlan0 | Kernel mismatch | Reinstall headers |
| Slow performance | Weak PSU | Use stable 5V supply |
Why Native Compilation Matters
Cross-compiling drivers for Zynq is possible but complex. Compiling directly on ARM:
- Avoids architecture mismatch
- Ensures correct kernel symbol linking
- Reduces debugging overhead
On constrained boards, native builds are often more predictable.
Final Notes
This setup is specific to:
- Zybo xc7z010clg400-1
- Community PYNQ 3.0.1 image
- RTL8188GU WiFi chipset
If you are using:
- Zybo Z7 → Use official PYNQ builds
- Different WiFi dongle → Check chipset before compiling