Learn RISCV, one of the cheapest development boards that can run Debian & Liunx systems
补充: 2023.12.31 自己编译内存全开 duo256M_linux_Kernel_Memory_240M.zip
感谢 @taterli Milkv Duo 的 Debian 移植笔记 Milkv-duo duo-debian-full.7z (519M) Download
感谢 @逆影之风 编译duo256M_linux内核systemd duo256M_linux_Kernel_systemd.zip
感谢 @Judehahh Milkv-duo 运行 Arch Linux 系统
Thanks @Spiritdude ArchLinux_Disk_Image
幸运提早收到 Milk-V duo 256M的测试版,咨询了 @taterli 大神;他告诉我只要更换内核Kernel,不用更改 rootfs
很大可能就能启动,经过测试确实如此。
所以 Milkv-duo 256M 运行 Debian & Arch Linux 系统 就很简单了: 下载 Debian & Arch Linux 镜像和Duo 256M内核
Milkv-duo duo-debian-full.7z (519M) Download
duo256M_linux_Kernel_systemd.zip
ArchLinux_Disk_Image
选择你喜欢的 Linux 系统刷到tf卡,windows下直接打开 tf 卡 boot分区替换 内核文件,就能从 duo 64m 的 linux镜像更新到 duo 256m
duo 256m 内核压缩包里有 Debian & Arch Linux 的 串口启动日志
ArchLinux_boot.log
Duo_256M_Debian_boot.log
下面来分享 昨天晚上的踩坑记录
我使用的是 PL230H芯片的 USB 转 TTL线,Windows 11,软件 Xshell,如图接到开发板引脚。
如果你只有 Duo 64M的旧型号,也可以跟我一起做实验的,因为linux系统固件 rootfs是通用的,只是内核不同。
1. 制作 Arch Linux 根文件系统
wget https://archriscv.felixc.at/images/archriscv-latest.tar.zst
wget https://github.com/milkv-duo/duo-buildroot-sdk/releases/download/Duo-V1.0.7/milkv-duo256m-v1.0.7-2023-1223.img.zip
unzip milkv-duo256m-v1.0.7-2023-1223.img.zip
-
访问 duo-buildroot-sdk 下载官方镜像
Duo 64M
: milkv-duo-v1.0.7-2023-1223.img.zip
Duo 256M
: milkv-duo256m-v1.0.7-2023-1223.img.zip
-
将 img 镜像与 loop 设备绑定 挂载 rootfs 分区: 由于镜像是多分区img,所以要 losetup 命令绑定设备后才能挂载,如图式和以下命令就能挂载了, 注意
mount /dev/loop0p2 rootfs/
命令 使用 loop0p2 表示 镜像中的第二个分区
losetup -f # 查看 可分配设备号
losetup -P loop0 milkv-duo256m-v1.0.7-2023-1223.img
mkdir rootfs
mount /dev/loop0p2 rootfs/
cd rootfs/
cd rootfs/
rm -rf ./*
tar -xvf ../archriscv-latest.tar.zst -C .
umount /dev/loop0p2
losetup -d /dev/loop0
-
到这里 制作 Arch Linux 根文件系统 就完成了,只要把 修改过的 img 刷到tf卡就可以试验了。由于我直接挂载到
/root/duo256m/rootfs
,不知道是否会影响到实际系统,应该建立 /mnt/rootfs 用来挂载会安全点。
2. 串行控制台启动实验
OpenSBI v0.9
Platform Name : Cvitek. CV181X ASIC. C906.
Boot HART ISA : rv64imafdcvsux
U-Boot 2021.10 (Dec 23 2023 - 12:57:10 +0800) cvitek_cv181x
DRAM: 254 MiB
MMC: cv-sd@4310000: 0
Loading Environment from nowhere... OK
In: serial Out: serial Err: serial
Warning: ethernet@4070000 (eth0) using random MAC address - 0a:38:56:fe:e5:77
Boot from SD ...
switch to partitions #0, OK
mmc0 is current device
2996348 bytes read in 136 ms (21 MiB/s)
[ 1.455518] EXT4-fs (mmcblk0p2): recovery complete
[ 1.466136] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[ 1.474593] VFS: Mounted root (ext4 filesystem) on device 179:2.
[ 1.484446] devtmpfs: mounted
[ 1.487655] Freeing unused kernel memory: 144K
[ 1.492287] Kernel memory protection not selected by kernel config.
[ 1.498802] Run /sbin/init as init process
[ 1.503063] with arguments:
[ 1.506156] /sbin/init
[ 1.508981] with environment:
[ 1.512251] HOME=/
[ 1.514693] TERM=linux
[ 1.517525] early_time_log: run_init_process: 6768892us
[ 2.287850] systemd[1]: System time before build time, advancing clock.
[ 2.322839] systemd[1]: Failed to find module 'autofs4'
[ 2.363219] systemd[1]: Failed to mount tmpfs (type tmpfs) on /sys/fs/cgroup (MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_STRICTATIME "mode=0755,size=4m,nr_inodes=1k"): No such file or directory
[ 2.382091] systemd[1]: Failed to mount cgroup (type cgroup) on /sys/fs/cgroup/systemd (MS_NOSUID|MS_NODEV|MS_NOEXEC "none,name=systemd"): No such file or directory
[!!!!!!] Failed to mount API filesystems.
[ 2.420342] systemd[1]: Freezing execution.
-
What!! 你把tf卡刷好,接好USB-TTL线配置好 Xshell 接上USB电源,正兴奋点亮 Duo 256M 开发板,看到 OpenSBI Cvitek. CV181X ASIC. C906 Boot from SD ,然后就
systemd
错误 Failed to find module,Failed to mount cgroup
3. 修改kernel配置,重新编译 duo256M_linux内核systemd 添加相关所需要的功能(主要是为了满足 systemd
的各种依赖)
-
访问 GitHub - milkv-duo/duo-buildroot-sdk: Milk-V Duo Official buildroot SDK 下载 duo-buildroot-sdk
git clone https://github.com/milkv-duo/duo-buildroot-sdk.git --depth=1
cd duo-buildroot-sdk/
./build.sh lunch
cd ~/duo-buildroot-sdk/linux_5.10
make menuconfig
-
使用图形配置脚本打开这些选项,我昨天看了下都打开的,但是可能我保存设置不对,导致编译的结果不对,具体查看 @逆影之风 使用menuconfig配置milkv duo linux kernel
CONFIG_CGROUPS=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
-
duo256M_linux_Kernel_systemd.zip 有 cvitek_cv1812cp_milkv_duo256m_sd_defconfig ,可以查看设置了哪些选项
-
然后再次编译内核,把新内核 img镜像中 boot.sd 和 fip.bin 文件替换 tf 卡中同名文件,验证是否编译成功
-
我是使用 @逆影之风 镜像中提取的新内核,更新 Debian & Arch Linux 的镜像都成功启动。
-
新内核目前没有全启用内存,好像没有启用 swap