一、准备开发环境

Ubuntu-22.04 (Linux PC or Windows WSL)

如果是在PC机上安装Ubuntu,请参考:

使用Rufus制作UBUNTU 22.04.5的U盘启动盘

如何通过U盘启动盘在PC上安装ubuntu-22.04.5

在ubuntu-22.04.5上安装和卸载Quartus Prime Pro Edition 25.3 (我后来安装的是25.1.1,安装步骤都相同)

如果是在当前Windows系统上安装WSL,请参考:

如何在Windows系统上安装WSL(Windows Subsystem for Linux)

二、设置Ubuntu环境

1. 在 Ubuntu 上安装所需软件包:

sudo apt-get update
sudo apt install make bison flex python3-dev libssl-dev swig
sudo apt install u-boot-tools
sudo apt install qemu-user-static
sudo apt install git
sudo apt install build-essential

2. 创建顶层文件夹:

mkdir de25-nano.sdmmc
cd de25-nano.sdmmc
export TOP_FOLDER=`pwd`

3. 按照以下方式下载并设置工具链:

cd $TOP_FOLDER
wget https://developer.arm.com/-/media/Files/downloads/gnu/11.2-2022.02/binrel/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu.tar.xz
tar xf gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu.tar.xz
rm -f gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu.tar.xz
export PATH=`pwd`/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu/bin:$PATH
export ARCH=arm64
export CROSS_COMPILE=aarch64-none-linux-gnu-

 

三、构建Arm Trusted Firmware

cd $TOP_FOLDER
rm -rf arm-trusted-firmware
git clone -b de25_nano_revA_v1.0 https://github.com/terasic/arm-trusted-firmware arm-trusted-firmware
cd arm-trusted-firmware
make -j $(nproc) PLAT=agilex5 bl31
cd ..

 

如上操作就会产生 $TOP_FOLDER/arm-trusted-firmware/build/agilex5/release/bl31.bin文件,这个文件在后面要用来参与 u-boot.itb文件的生成 。

四、构建U-boot

cd $TOP_FOLDER
rm -rf u-boot-socfpga
git clone -b de25_nano_revA_v1.0 https://github.com/terasic/u-boot-socfpga u-boot-socfpga
cd u-boot-socfpga
make mrproper
make socfpga_agilex5_de25_nano_defconfig
# link to ATF
ln -s ../arm-trusted-firmware/build/agilex5/release/bl31.bin
make -j $(nproc)

如上操作之后将会生成如下两个文件:

  • $TOP_FOLDER/u-boot-socfpga/u-boot.itb
  • $TOP_FOLDER/u-boot-socfpga/spl/u-boot-spl-dtb.hex

五、创建 Boot 脚本

cd $TOP_FOLDER
rm -rf uboot-script && mkdir uboot-script && cd uboot-script
wget https://releases.rocketboards.org/2023.12/qspi/agilex5/agilex5_uboot.txt
wget https://releases.rocketboards.org/2021.11/uboot-script/agilex/uboot_script.its
mv agilex5_uboot.txt uboot.txt
vi uboot.txt    # content see bloew
mkimage -f uboot_script.its boot.scr.uimg
cd ..

 注意:如果用户想要访问HPS的FPGA LED,请在uboot.txt中添加“bridge enable”。

建议直接把uboot.txt内容替换成如下内容:

echo "Trying to boot Linux from device ${target}";

if test ${target} = "mmc0"; then
        bridge enable;
        echo "Found kernel in mmc0";    
        mmc rescan;
        fatload mmc 0:1 ${kernel_addr_r} Image;
        fatload mmc 0:1 ${fdt_addr_r} socfpga_agilex5_de25_nano.dtb;
        setenv bootargs "console=ttyS0,115200 root=${mmcroot} rw rootwait";
        booti ${kernel_addr_r} - ${fdt_addr_r};
        exit;
fi

如上操作将会产生$TOP_FOLDER/uboot-script/boot.scr.uimg文件。

六、构建Linux Kernel

cd $TOP_FOLDER
rm -rf linux-socfpga
git clone -b de25-nano-revA-lxde_v1.1 https://github.com/terasic/linux-socfpga linux-socfpga
cd linux-socfpga
cp de25-nano-lxde.config .config
make -j $(nproc) Image modules dtbs

如上操作将会产生如下两个文件:

  • $TOP_FOLDER/linux-socfpga/arch/arm64/boot/Image
  • $TOP_FOLDER/linux-socfpga/arch/arm64/boot/dts/intel/socfpga_agilex5_de25_nano.dtb

七、构建 Ubuntu 22.04.3

1. 准备rootfs 文件夹

cd $TOP_FOLDER
mkdir -p rootfs
cd rootfs

2. 切换到root权限

sudo -s

3. 下载 Ubuntu 22.04.3根文件系统

wget -c https://cdimage.ubuntu.com/ubuntu-base/releases/22.04.3/release/ubuntu-base-22.04.3-base-arm64.tar.gz
tar xvf ubuntu-base-22.04.3-base-arm64.tar.gz
rm ubuntu-base-22.04.3-base-arm64.tar.gz

4. 复制qemu-user-static

cp /usr/bin/qemu-aarch64-static usr/bin/

5. 修改 etc/apt/sources.list 文件,取消除 deb-src 开头之外所有仓库的注释

sed -i 's%^# deb %deb %' etc/apt/sources.list

6. 将您系统(主机)的 /etc/resolv.conf 复制到 etc/resolv.conf

(如有需要请设置代理)

cp /etc/resolv.conf etc/resolv.conf

7. 下载一个简单的bash脚本用于设备的挂载和卸载

cd ..
wget https://raw.githubusercontent.com/psachin/bash_scripts/master/ch-mount.sh

 

8. 将proc、sys、dev、dev/pts挂载到新文件系统

chmod a+x ch-mount.sh
./ch-mount.sh -m rootfs/
export LANG=C.UTF-8
unset LC_NUMERIC
unset LC_TIME
unset LC_MEASUREMENT
unset LC_TELEPHONE
unset LC_IDENTIFICATION
unset LC_PAPER
unset LC_MONETARY
unset LC_NAME
unset LC_ADDRESS

9. 更新软件仓库

apt update

10. 安装核心工具所需的基本软件包

apt install apt-utils dialog --yes
apt install language-pack-en-base sudo ssh net-tools ethtool iputils-ping rsyslog bash-completion vim-tiny kmod --yes
apt install isc-dhcp-client network-manager --yes
apt clean
cat <<EOF >/etc/NetworkManager/conf.d/allow-ethernet.conf
[keyfile]
unmanaged-devices=*,except:type:wifi,except:type:gsm,except:type:cdma,except:type:ethernet
EOF

 

11. 安装工具

apt install usbutils --yes
apt install gpiod --yes
apt install memtester --yes
apt install fdisk --yes
apt clean

 

12.安装 VNC XFCE 桌面所需的软件包

apt install xfce4 xfce4-goodies --yes
apt install tightvncserver --yes
apt clean

13. 安装文本编辑和网络测试所需的软件包

apt install vim --yes
apt install iperf3 --yes
apt clean

14. 安装WiFi USB网卡所需的软件包(需要1GB空间)

apt install --reinstall linux-firmware --yes
apt clean

 

15. 安装蓝牙 USB 适配器所需的 bluez 软件包

apt install bluez --yes
apt clean

 

16. 解决 RFCOMM 问题

vi /lib/systemd/system/bluetooth.service # modify ExecStart=/usr/lib/bluetooth/bluetoothd --compat

 

17. 添加用户帐户并将其包含在合适的组中

useradd terasic -m -s /bin/bash
echo terasic:123 | chpasswd
addgroup terasic adm && addgroup terasic sudo
addgroup terasic audio && addgroup terasic video

 

18. 向 /etc/hosts 添加主机条目

echo "127.0.0.1    localhost" >> /etc/hosts

 

19. 退出 chroot 并卸载 proc、sys、dev、dev/pts

exit
./ch-mount.sh -u rootfs/

 

20. 返回用户权限

exit

 

八、构建 SD Card Image

cd $TOP_FOLDER
sudo rm -rf sd_card && mkdir sd_card && cd sd_card
wget https://releases.rocketboards.org/release/2020.11/gsrd/tools/make_sdimage_p3.py
# remove mkfs.fat parameter which has some issues on Ubuntu 22.04
sed -i 's/\"\-F 32\",//g' make_sdimage_p3.py
chmod +x make_sdimage_p3.py
mkdir fatfs &&  cd fatfs
cp $TOP_FOLDER/u-boot-socfpga/u-boot.itb .
cp $TOP_FOLDER/linux-socfpga/arch/arm64/boot/Image .
cp $TOP_FOLDER/linux-socfpga/arch/arm64/boot/dts/intel/socfpga_agilex5_de25_nano.dtb .
cp $TOP_FOLDER/uboot-script/boot.scr.uimg .
cd ..

mkdir rootfs && cd rootfs # renew: sudo rm -rf rootfs && mkdir rootfs && cd rootfs
sudo cp -a  $TOP_FOLDER/rootfs/* .
cd $TOP_FOLDER/linux-socfpga
sudo make -j $(nproc) modules_install INSTALL_MOD_PATH=$TOP_FOLDER/sd_card/rootfs

cd $TOP_FOLDER/sd_card
sudo python3 make_sdimage_p3.py -f \
-P fatfs/*,num=1,format=fat32,size=500M \
-P rootfs/*,num=2,format=ext3,size=5000M \
-s 5500M \
-n DE25_Nano_sdcard_lxde.img
cd ..

 

九、构建QSPI Image

参考:

DE25-Nano 的Linux Image 制作之 Build QSPI Image