提供适用于Ultra96的Debian GNU/Linux(v2018.2版)启动镜像
请注意(2019年7月26日更新)
这篇文章是在2018年发布的,包含了一些过时的内容。请参考我于2019年7月26日发布的以下文章。
- 「UltraZed/Ultra96/Ultra96-V2 向け Debian GNU/Linux (v2019.1版) ブートイメージの提供」 @Qiita
首先
Ultra96是一款96boards兼容的开发板,搭载了Xilinx公司的Zynq Ultrascale+ MPSoC。为了Ultra96的安装,我们已经在以下网址上准备好了引导加载器(如U-Boot)、Linux内核和Debian根文件系统,本文将说明安装方法。
- https://github.com/ikwzm/ZynqMP-FPGA-Linux
如果你觉得烦恼的话,请随意选择跳过引导程序和Linux内核的构建步骤。
简述
-
- Hardware
UltraZed-EG-IOCC : Xilinx Zynq UltraScale+ MPSoC Starter Kit by Avnet.
Ultra96 : Xilinx Zynq UltraScale+ MPSoC development board based on the Linaro 96Boards specification.
Boot Loader
FSBL(First Stage Boot Loader for ZynqMP)
PMU Firmware(Platform Management Unit Firmware)
BL31(ARM Trusted Firmware Boot Loader stage 3-1)
U-Boot xilinx-v2018.2 (customized)
Linux Kernel Version v4.14.0
linux-xlnx tag=xilinx-v2018.2
Enable Device Tree Overlay with Configuration File System
Enable FPGA Manager
Enable FPGA Bridge
Enable FPGA Reagion
Debian9(stretch) Root File System
Installed build-essential
Installed device-tree-compiler
Installed ruby ruby-msgpack ruby-serialport
Installed python python3 msgpack-rpc-python
Installed u-boot-tools
FPGA Device Drivers and Services
fclkcfg (FPGA Clock Configuration Device Driver)
udmabuf (User space mappable DMA Buffer)
安装
下载
请从Github上下载以下内容。目前最新版本为v2018.2.1。请注意,一些图像文件非常大,因此使用了Git LFS(大文件存储)。您的环境中必须安装了git-lfs。
shell$ git clone -b v2018.2.1 git://github.com/ikwzm/ZynqMP-FPGA-Linux
shell$ cd ZynqMP-FPGA-Linux
shell$ git lfs pull
文件说明
-
- target/Ultra96
boot/
boot.bin : Stage 1 Boot Loader
uEnv.txt : U-Boot environment variables for linux boot
image-4.14.0-xlnx-v2018.2-zynqmp-fpga : Linux Kernel Image (use Git LFS)
devicetree-4.14.0-xlnx-v2018.2-zynqmp-fpga-ultra96.dtb : Linux Device Tree Blob
devicetree-4.14.0-xlnx-v2018.2-zynqmp-fpga-ultra96.dts : Linux Device Tree Source
debian9-rootfs-vanilla.tgz : Debian9 Root File System (use Git LFS)
linux-image-4.14.0-xlnx-v2018.2-zynqmp-fpga_4.14.0-xlnx-v2018.2-zynqmp-fpga-1_arm64.deb : Linux Image Package (use Git LFS)
linux-headers-4.14.0-xlnx-v2018.2-zynqmp-fpga_4.14.0-xlnx-v2018.2-zynqmp-fpga-1_arm64.deb : Linux Headers Package (use Git LFS)
fclkcfg-4.14.0-xlnx-v2018.2-zynqmp-fpga_1.1.0-1_arm64.deb : fclkcfg Device Driver and Services Package
udmabuf-4.14.0-xlnx-v2018.2-zynqmp-fpga_1.3.2-1_arm64.deb : udmabuf Device Driver and Services Package
SD卡的格式化
-
- 在 SD 卡的分区 1 上创建一个 VFAT 文件系统。
- 在 SD 卡的分区 2 上创建一个 ext4 文件系统。
请参考以下 URL 以了解在 Linux 下格式化 SD 卡的方法。
- https://github.com/ikwzm/ZynqMP-FPGA-Linux/blob/master/doc/install/format-disk-zynq.md
对SD卡的写入
0. SD卡的挂载
shell# mount /dev/sdc1 /mnt/usb1
shell# mount /dev/sdc2 /mnt/usb2
1. 引导分区的复制
将 target/Ultra96/boot/ 目录下的文件复制到 SD-Card 的分区1(例如,/dev/sdc1)。
shell# cp target/Ultra96/boot/* /mnt/usb1
2. 生成 RootFS 分区
将debian9-rootfs-vanilla.tgz的内容解压到SD卡的第二个分区(在下面的例子中为/dev/sdc2)。最好将设备驱动程序的Debian软件包预先复制到已解压的根文件系统的home/fpga目录中。之后也可以通过网络进行复制。
shell# tar xfz debian9-rootfs-vanilla.tgz -C /mnt/usb2
shell# mkdir /mnt/usb2/home/fpga/debian
shell# cp linux-image-4.14.0-xlnx-v2018.2-zynqmp-fpga_4.14.0-xlnx-v2018.2-zynqmp-fpga-1_arm64.deb /mnt/usb2/home/fpga/debian
shell# cp linux-headers-4.14.0-xlnx-v2018.2-zynqmp-fpga_4.14.0-xlnx-v2018.2-zynqmp-fpga-1_arm64.deb /mnt/usb2/home/fpga/debian
shell# cp fclkcfg-4.14.0-xlnx-v2018.2-zynqmp-fpga_0.0.1-1_arm64.deb /mnt/usb2/home/fpga/debian
shell# cp udmabuf-4.14.0-xlnx-v2018.2-zynqmp-fpga_0.0.1-1_arm64.deb /mnt/usb2/home/fpga/debian
将 fstab 设置为使引导分区可见。
将 Boot Partition 从 Linux 系统中始终可见会很方便。在这种情况下,最好事先在 fstab 中设置挂载引导分区。请注意,fstab 已经设置了 configfs 的挂载选项。
shell# mkdir /mnt/usb2/mnt/boot
shell# cat <<EOT >> /mnt/usb2/etc/fstab
/dev/mmcblk0p1 /mnt/boot auto defaults 0 0
EOT
余談:如果将这段描述事先写在debian9-rootfs-vanilla.tgz中,可能会让人们觉得为什么要特意在之后进行设置。原因是debian9-rootfs-vanilla.tgz是Ultra96和UltraZed共用的。Ultra96的SD卡启动分区是/dev/mmcblk0p1,而UltraZed的SD卡启动分区是/dev/mmcblk1p1。此外,UltraZed还存在/dev/mmcblk0p1,如果事先写在debian9-rootfs-vanilla.tgz中,UltraZed会错误地访问到另一个设备。因此,虽然麻烦,但我们选择在之后进行设置。
4. 网络的设置
Ultra96可以通过WiFi连接到网络。在主机端提前创建并写入配置文件可能会更好。当然,也可以在后来启动Ultra96后在其上进行配置。
在这里,将SSID设置为ssssssss,将密码设置为ppppppppp,并将加密的访问密钥设置为xxxx。
首先,您需要在 wpa_passphrase 中输入 SSID 和密码,并创建一个加密的访问密钥。
shell# wpa_passphrase ssssssss ppppppppp
network={
ssid="ssssssss"
#psk="ppppppppp"
psk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}
4.1 直接在 `/etc/network/interfaces.d/wlan0` 中做记录。
将SSID和加密后的访问密钥直接写入网络设置文件(/etc/network/interfaces.d/wlan0)中。
auto wlan0
iface wlan0 inet dhcp
wpa-ssid ssssssss
wpa-psk xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
4.2 /etc/wpa_supplicant/wpa_supplicant.conf 所写的内容
在网络配置文件(/etc/network/interfaces.d/wlan0)中,将如下内容描述,以便在启动时通过读取wpa_supplicant.conf文件来设置Wifi。
auto wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
将SSID和加密后的访问密钥写入WiFi配置文件(/etc/wpa_supplicant/wpa_supplicant.conf)。
ctrl_interface=/run/wpa_supplicant
update_config=1
network={
ssid="ssssssss"
psk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}
顺便提一下,对于隐藏的SSID,需要强制进行扫描。此时,在 /etc/wpa_supplicant/wpa_supplicant.conf 文件中添加 scan_ssid=1。
ctrl_interface=/run/wpa_supplicant
update_config=1
network={
ssid="ssssssss"
scan_ssid=1
key_mgmt=WPA-PSK
psk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}
如果想要连接没有密码的SSID,可以设置key_mgmt=NONE(大写)来进行连接。
ctrl_interface=/run/wpa_supplicant
update_config=1
network={
ssid="ssssssss"
scan_ssid=1
key_mgmt=NONE
}
5. 解除 SD 卡
shell# umount /mnt/usb1
shell# umount /mnt/usb2
安装设备驱动程序包。
用Ultra96启动并以root身份登录
root的密码是”admin”。
debian-fpga login: root
Password:
root@debian-fpga:~#
安装Linux镜像包。
Linux镜像包(linux-image-4.14.0-xlnx-v2018.2-zynqmp-fpga_4.14.0-xlnx-v2018.2-zynqmp-fpga-1_arm64.deb)已预先安装在debian9-rootfs-vanilla.tgz中。在这里无需再次安装。如果需要重新安装,请使用dpkg来安装linux-image-4.14.0-xlnx-v2018.2-zynqmp-fpga_4.14.0-xlnx-v2018.2-zynqmp-fpga-1_arm64.deb。
root@debian-fpga:~# cd /home/fpga/debian
root@debian-fpga:~# sudo dpkg -i linux-image-4.14.0-xlnx-v2018.2-zynqmp-fpga_4.14.0-xlnx-v2018.2-zynqmp-fpga-1_arm64.deb
(Reading database ... 24872 files and directories currently installed.)
Preparing to unpack linux-image-4.14.0-xlnx-v2018.2-zynqmp-fpga_4.14.0-xlnx-v2018.2-zynqmp-fpga-1_arm64.deb ...
Unpacking linux-image-4.14.0-xlnx-v2018.2-zynqmp-fpga (4.14.0-xlnx-v2018.2-zynqmp-fpga-1) over (4.14.0-xlnx-v2018.2-zynqmp-fpga-1) ...
Setting up linux-image-4.14.0-xlnx-v2018.2-zynqmp-fpga (4.14.0-xlnx-v2018.2-zynqmp-fpga-1) ...
安装Linux头文件包。
使用dpkg命令安装linux-headers-4.14.0-xlnx-v2018.2-zynqmp-fpga_4.14.0-xlnx-v2018.2-zynqmp-fpga-1_arm64.deb文件。
root@debian-fpga:~# cd /home/fpga/debian
root@debian-fpga:~# sudo dpkg -i linux-headers-4.14.0-xlnx-v2018.2-zynqmp-fpga_4.14.0-xlnx-v2018.2-zynqmp-fpga-1_arm64.deb
Selecting previously unselected package linux-headers-4.14.0-xlnx-v2018.2-zynqmp-fpga.
(Reading database ... 24821 files and directories currently installed.)
Preparing to unpack linux-headers-4.14.0-xlnx-v2018.2-zynqmp-fpga_4.14.0-xlnx-v2018.2-zynqmp-fpga-1_arm64.deb ...
Unpacking linux-headers-4.14.0-xlnx-v2018.2-zynqmp-fpga (4.14.0-xlnx-v2018.2-zynqmp-fpga-1) ...
Setting up linux-headers-4.14.0-xlnx-v2018.2-zynqmp-fpga (4.14.0-xlnx-v2018.2-zynqmp-fpga-1) ...
make: Entering directory '/usr/src/linux-headers-4.14.0-xlnx-v2018.2-zynqmp-fpga'
HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/bin2c
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
scripts/kconfig/conf --silentoldconfig Kconfig
HOSTCC scripts/dtc/dtc.o
HOSTCC scripts/dtc/flattree.o
HOSTCC scripts/dtc/fstree.o
HOSTCC scripts/dtc/data.o
HOSTCC scripts/dtc/livetree.o
HOSTCC scripts/dtc/treesource.o
HOSTCC scripts/dtc/srcpos.o
HOSTCC scripts/dtc/checks.o
HOSTCC scripts/dtc/util.o
HOSTCC scripts/dtc/dtc-lexer.lex.o
HOSTCC scripts/dtc/dtc-parser.tab.o
HOSTLD scripts/dtc/dtc
CC scripts/mod/empty.o
HOSTCC scripts/mod/mk_elfconfig
MKELF scripts/mod/elfconfig.h
HOSTCC scripts/mod/modpost.o
CC scripts/mod/devicetable-offsets.s
CHK scripts/mod/devicetable-offsets.h
HOSTCC scripts/mod/file2alias.o
HOSTCC scripts/mod/sumversion.o
HOSTLD scripts/mod/modpost
HOSTCC scripts/kallsyms
HOSTCC scripts/conmakehash
HOSTCC scripts/sortextable
make: Leaving directory '/usr/src/linux-headers-4.14.0-xlnx-v2018.2-zynqmp-fpga'
安装 fclkcfg 设备驱动程序和服务。
使用dpkg来安装fclkcfg-4.14.0-xlnx-v2018.2-zynqmp-fpga_1.1.0-1_arm64.deb。
root@debian-fpga:~# cd /home/fpga/debian
root@debian-fpga:~# dpkg -i fclkcfg-4.14.0-xlnx-v2018.2-zynqmp-fpga_1.1.0-1_arm64.deb
Selecting previously unselected package fclkcfg-4.14.0-xlnx-v2018.2-zynqmp-fpga.
(Reading database ... 44216 files and directories currently installed.)
Preparing to unpack fclkcfg-4.14.0-xlnx-v2018.2-zynqmp-fpga_1.1.0-1_arm64.deb ...
Unpacking fclkcfg-4.14.0-xlnx-v2018.2-zynqmp-fpga (1.1.0-1) ...
Setting up fclkcfg-4.14.0-xlnx-v2018.2-zynqmp-fpga (1.1.0-1) ...
安装 udmabuf 设备驱动程序和服务。
使用dpkg安装udmabuf-4.14.0-xlnx-v2018.2-zynqmp-fpga_1.3.2-1_arm64.deb。
root@debian-fpga:~# cd /home/fpga/debian
root@debian-fpga:~# dpkg -i udmabuf-4.14.0-xlnx-v2018.2-zynqmp-fpga_1.3.2-1_arm64.deb
Selecting previously unselected package udmabuf-4.14.0-xlnx-v2018.2-zynqmp-fpga.
(Reading database ... 44222 files and directories currently installed.)
Preparing to unpack udmabuf-4.14.0-xlnx-v2018.2-zynqmp-fpga_1.3.2-1_arm64.deb ...
Unpacking udmabuf-4.14.0-xlnx-v2018.2-zynqmp-fpga (1.3.2-1) ...
Setting up udmabuf-4.14.0-xlnx-v2018.2-zynqmp-fpga (1.3.2-1) ...
请问您需要哪方面的参考?
- https://github.com/ikwzm/ZynqMP-FPGA-Linux