其实说是Sipeed的20K也支持,但是由于官方没好好写,好吧,那就只能从成熟的开始,整体过程还算比较简单,首先前面那一篇安装开源工具的得先做了.
安装需要的前置内容,之后重新打开Bash确保环境都配置上.
apt install build-essential device-tree-compiler wget git python3-setuptools python3-full verilator libevent-dev libjson-c-dev unzip gcc-riscv64-unknown-elf gcc-riscv64-linux-gnu ninja-build -y
curl https://sh.rustup.rs -sSf | sh
# 部分工具依赖最新Rust
git clone https://github.com/litex-hub/linux-on-litex-vexriscv
cd linux-on-litex-vexriscv
因为新的系统对于Python的pip环境进行了限制保护,所以我这里解除一下,如果你系统还有其他,我建议你使用venv或者虚拟机再开一个系统.
编辑 /etc/pip.conf添加以下内容.
[global]
break-system-packages = true
继续安装Litex,中途缺什么补什么.
wget https://raw.githubusercontent.com/enjoy-digital/litex/master/litex_setup.py
chmod +x litex_setup.py
./litex_setup.py --init --install
如果需要用到调试,则还需要这个.
apt install libtool automake pkg-config libusb-1.0-0-dev
git clone https://github.com/ntfreak/openocd.git
cd openocd
./bootstrap
./configure --enable-ftdi
make
make install
从这里下载系统文件,放到images文件夹内并解压.
https://github.com/litex-hub/linux-on-litex-vexriscv/issues/164
root@debian:~/linux-on-litex-vexriscv# cd images/
root@debian:~/linux-on-litex-vexriscv/images# wget https://github.com/litex-hub/linux-on-litex-vexriscv/files/8331338/linux_2022_03_23.zip
[ 省略 ]
linux_2022_03_23.zip 100%[==========================================================================>] 5.11M 3.70MB/s in 1.4s
root@debian:~/linux-on-litex-vexriscv/images# unzip linux_2022_03_23.zip
Archive: linux_2022_03_23.zip
replace boot.json? [y]es, [n]o, [A]ll, [N]one, [r]ename: A
inflating: boot.json
inflating: Image
inflating: opensbi.bin
inflating: rootfs.cpio
inflating: rv32.dtb
root@debian:~/linux-on-litex-vexriscv/images#
返回上一级,运行sim.py就可以运行模拟器,首先确定模拟器正常运行再继续下一步,可能需要安装meson,模拟器运行比较慢,需要耐心等待.因为他等于是先模拟一个FPGA运行环境,再上面跑.

为了使得我们板子能烧录,需要ecpdap.
cargo install ecpdap
之后我们开始实际刷到板子上.(如果JTAG接口目前未位于FPGA JTAG上,需要用icesprog修改,这里懒得说,自己运行一下工具的help都知道.)
./make.py --board=icesugar_pro --cpu-count=1 --build
./make.py --board=icesugar_pro --cpu-count=1 --load
litex_term --images=images/boot.json /dev/ttyACM0
因为Linux整个内核和文件系统都是通过串口发过去的,所以速度嘛就比较慢了.
构建

写入bit

启动Linux,输入后运行reboot,会触发下载逻辑,这个下载持续时间很长,大概需要30分钟,毕竟速度也就4-6KB/s,你会持续看到串口上有数据交换(LED闪烁).

这里一个疑问,他怎么定义串口在哪呢,看Litex-Boards就知道了.
https://github.com/litex-hub/litex-boards/blob/master/litex_boards/platforms/muselab_icesugar_pro.py
所以说,Litex是个非常大的系统性工程
如何用TF卡启动,分割一个容量小于2G的分区,格式化为FAT,然后丢images目录内所有东西进去,开机会自动从TF卡拷贝系统到SDRAM,当然,默认bit也没固化,需要的话还需要用icesprog写入.
./icesprog w /root/linux-on-litex-vexriscv/build/icesugar_pro/gateware/icesugar_pro.bit
32位系统不过瘾?要不64位?先构建FPGA上的核心,然后烧录这个bit,然后参考linux-on-litex-rocket继续,不过,逻辑数量不够还是别玩了,我这里按照small最小配置,资源完全不够用.

./litex-boards/litex_boards/targets/muselab_icesugar_pro.py --build \
--cpu-type rocket --cpu-variant small --with-sdcard
git clone https://github.com/litex-hub/linux-on-litex-rocket
cd linux-on-litex-rocket
curl https://busybox.net/downloads/busybox-1.33.2.tar.bz2 | tar xfj -
cp conf/busybox-1.33.2-rv64gc.config busybox-1.33.2/.config
(cd busybox-1.33.2; make CROSS_COMPILE=riscv64-unknown-linux-gnu-)
mkdir initramfs
pushd initramfs
mkdir -p bin sbin lib etc dev home proc sys tmp mnt nfs root \
usr/bin usr/sbin usr/lib
cp ../busybox-1.33.2/busybox bin/
ln -s bin/busybox ./init
cat > etc/inittab <<- "EOT"
::sysinit:/bin/busybox mount -t proc proc /proc
::sysinit:/bin/busybox mount -t devtmpfs devtmpfs /dev
::sysinit:/bin/busybox mount -t tmpfs tmpfs /tmp
::sysinit:/bin/busybox mount -t sysfs sysfs /sys
::sysinit:/bin/busybox --install -s
/dev/console::sysinit:-/bin/ash
EOT
fakeroot <<- "EOT"
find . | cpio -H newc -o > ../initramfs.cpio
EOT
popd
git clone https://github.com/litex-hub/linux.git
cp initramfs.cpio linux/
pushd linux
git checkout litex-rebase
make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- \
litex_rocket_defconfig litex_rocket_initramfs.config
make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu-
popd