通过 VisionFive2 Software v2.6.0 的sdcard.img构建的,wifi亲测可用!直接尝鲜: 百度网盘 请输入提取码 提取码: 9p4i
登录用户:root
默认密码:openEuler12#$
另外tf卡要8G以上,否则会提示GPT table corrupted且无法修复。
附构建的大致方法:
步骤
在 中科院软件所的镜像网 上下载最新的openEuler riscv64 rootfs包,例如:
$ wget https://mirror.iscas.ac.cn/openeuler-sig-riscv/openEuler-RISC-V/preview/openEuler-22.09-V1-riscv64/openEuler-22.09-V1-riscv64-rootfs.tar.gz
桌面版
https://mirror.iscas.ac.cn/openeuler-sig-riscv/openEuler-RISC-V/preview/openEuler-22.09-V1-riscv64/openEuler-22.09-V1-riscv64-rootfs-xfce.tar.gz
在 VisionFive2的github代码库抓取新版本的sdcard.img,例如:
$ wget https://github.com/starfive-tech/VisionFive2/releases/download/VF2_v2.6.0/sdcard.img
通过fdisk -l
查看tf卡的挂载点,以下假设为sdc,将sdcard.img烧录到tf卡上,例如:
# dd bs=4M if=sdcard.img of=/dev/sdc
对tf卡上的系统分区进行再格式化:
这个我用了Gparted。
最后将openEuler文件系统镜像拷贝到tf卡的系统分区,假设系统分区是sdc4:
mount /dev/sdc4 /mnt
tar -xpf Downloads/openEuler-22.09-V1-riscv64-rootfs.tar.gz -C /mnt
sync
umount /mnt
然后将tf卡插入VF2就可享用了~
补充
wifi驱动
官方v2.6.0添加了ESWIN WI-FI的驱动,而openEuler的rootfs镜像里没有。可以把sdcard.img烧录后root分区下的lib/firmware
(可顺便复制下lib/modules
,自己编译驱动时应该有用) 拷贝一份到电脑,在解压复制openEuler后再将它们复制进去,例如:
cp -r firmware /mnt/lib/
cp -r modules /mnt/lib/
这样wifi模块就能用了,连接wifi命令:
先通过nmcli dev wifi list
找ssid,再nmcli --ask device wifi connect "$SSID"
就行了。
参考
[1] https://gitee.com/samuel_yuan/riscv-openeuler-visionfive/blob/master/chapter1-Build-openeuler-on-visionfive/readme.md
[2] 配置网络 - openEuler Docs
[3] fdisk - Using dd to create an image up to an specific sector - Unix & Linux Stack Exchange
5 Likes
chbinnc
2
用新的方法构建了镜像,现在2GB的tf卡也能装上了~
网盘地址不变,构造方法如下:
构造一个能装入openEuler镜像大小的新镜像,通过losetup载入,再将sdcard.img通过dd拷贝到loop里:
dd bs=1M count=1536 if=/dev/zero of=openEuler-22.09-vf2-unofficial.img
losetup -P /dev/loop1 openEuler-22.09-vf2-unofficial.img
dd bs=1M if=sdcard.img of=/dev/loop1
对新镜像的系统分区(最后一个分区)进行扩容,假设为4:
fdisk -l | grep loop1
growpart /dev/loop1 4 # extend partition 4
e2fsck -f /dev/loop1p4
resize2fs /dev/loop1p4 # extend filesystem
fsck.ext4 /dev/loop1p4
最后挂载系统分区,除firmware和modules外删除所有内容,并将openEuler文件系统包拷贝到系统分区:
mount /dev/loop1p4 /mnt
mv /mnt/lib/firmware /tmp/
mv /mnt/lib/modules /tmp/
rm -rf /mnt/*
tar -xpf Downloads/openEuler-22.09-riscv64-rootfs.tar.gz -C /mnt
sync
mv /tmp/firmware /mnt/lib/
mv /tmp/modules /mnt/lib/
umount /mnt
losetup -d /dev/loop1
然后将新镜像烧录到tf卡并插入VF2就可享用了~
另外openEuler的官方镜像地址是:https://repo.openeuler.org/openEuler-preview/RISC-V
还有多谢 GUIDE: How to mount the .img file and change the kernel 关于加载镜像的方法,扩容方法则 ctrl-C 自SDK快速参考手册
1 Like
镜像更新至 VisionFive2 Software v2.8.0,网盘地址不变。
【已解决】另外有个问题想请教大家:
在更新原有系统时,如果只用新版本的image.fit替换第三分区的starfiveu.fit,系统启动时会卡住,具体的log还没看,但我猜测是系统记录了原版本.fit文件的某种特征值,直接替换会导致加载失败。
这是不是和grub一样有类似grub-install和grub-mkconfig的命令来更新配置?
反正我看 debian 的分区。
大概率第一个分区是 SPL UBOOT ,第二分区是 UBOOT 的配置文件外加内核,第三分区就是普通的 rootfs 。
那么理论上,你只替换了第三分区,不能启动大概率是 kernel 的参数设置有问题。
这东西就是类似 x86 上 /boot 分区单独分区后启动出现问题一样的排错过程吧。
不过看分区是看不出来硬件是怎么解决第一分区和第二分区寻址的,这需要看源代码。如果是直接读取固定位置,那么也不排除你的第三分区数据影响了前两个分区的位置。
建议先用能启动的系统,把第三分区解压缩到某个目录里面,用 systemd-nspawn 的 -b 参数去 chroot 看一下系统启动有没有问题。
哦对了,既然第二分区是 UBOOT 配置文件和内核。其实你可以让第三分区在 SSD/U 盘等等设备上。修改内核命令行就行。
包括网络上的 NFS 共享也可以实现。我觉得你可以先用切换启动位置的方法来测试第三分区是否正常。
我通过官方release里的sdcard.img构建的,那个版本有四个分区,第一个2M大,第二个4M大,第三个放置了UBOOT的配置文件和内核,第四个才是rootfs
另外我比对了启动成功和卡住的日志,出现问题的部分是:
[ 19.764524] vdec: loading out-of-tree module taints kernel.
[ 19.768575] jpu: loading out-of-tree module taints kernel.
[ 19.778797] cnm_jpu 13090000.jpu: init device.
[ 19.786331] SUCCESS alloc_chrdev_region
[ 19.786537] vdec 130a0000.vpu_dec: device init.
[ 19.790639] Unable to handle kernel access to user memory without uaccess routines at virtual address 00000001000000cf
[ 19.794736] SUCCESS alloc_chrdev_region
[ 19.809323] Oops [#1]
[ 19.809330] Modules linked in: vdec(O+) venc(O+) jpu(O) starfive_mailbox
[ 19.809353] CPU: 3 PID: 235 Comm: systemd-udevd Tainted: G O 5.15.0 #1
[ 19.809360] Hardware name: StarFive VisionFive V2 (DT)
[e[0;32m OK e[[ 19.809363] epc : really_probe.part.0+0x1ac/0x234
0m] Started e[0;[ 19.809382] ra : really_probe.part.0+0x1a6/0x234
1;39mDaily Clean[ 19.809392] epc : ffffffff8051fff6 ra : ffffffff8051fff0 sp : ffffffd02982ba60
up of Temporary [ 19.809402] gp : ffffffff81504b40 tp : ffffffe0c1e60000 t0 : ffffffe0d579dd00
Directoriese[0m.[ 19.809412] t1 : 0000000000000400 t2 : ffffffff814d6e50 s0 : ffffffd02982ba90
[ 19.809421] s1 : ffffffe0bfed4c10 a0 : 0000000000000000 a1 : 0000000000000000
[ 19.809430] a2 : ffffffe0d579da98 a3 : 0000000000000001 a4 : 0000000000082001
[ 19.809440] a5 : 00000000ffffffff a6 : 00000000000001c0 a7 : 0000000000000038
[ 19.809449] s2 : 0000000000000000 s3 : ffffffff0158c1e0 s4 : 0000000000000033
[ 19.809458] s5 : ffffffff0158c2c0 s6 : 0000000000000002 s7 : 0000000000000020
[ 19.809467] s8 : 0000000000000cc0 s9 : 000000000000fff1 s10: 0000000000000100
[ 19.809476] s11: 0000000000000013 t3 : ffffffffffffffff t4 : 0000000000000000
[ 19.809485] t5 : ffffffff8148c228 t6 : ffffffe0d579dcca
[ 19.809492] status: 0000000200000120 badaddr: 00000001000000cf cause: 000000000000000d
[ 19.809503] [<ffffffff8051fff6>] really_probe.part.0+0x1ac/0x234
[ 19.809511] [<ffffffff805200ee>] __driver_probe_device+0x70/0xde
[ 19.809519] [<ffffffff80520188>] driver_probe_device+0x2c/0xb0
[ 19.809526] [<ffffffff805206fa>] __driver_attach+0x60/0x102
[ 19.809533] [<ffffffff8051de9c>] bus_for_each_dev+0x5a/0x98
[ 19.809540] [<ffffffff8051f7ac>] driver_attach+0x1a/0x22
[ 19.809548] [<ffffffff8051f25a>] bus_add_driver+0xe6/0x198
[ 19.809554] [<ffffffff80520f36>] driver_register+0x50/0xe4
[ 19.809559] [<ffffffff80521dee>] __platform_driver_register+0x1c/0x24
[ 19.809567] [<ffffffff01591050>] vpu_init+0x50/0x1000 [venc]
[ 19.809590] [<ffffffff800020ea>] do_one_initcall+0x3e/0x168
[ 19.809597] [<ffffffff80089290>] do_init_module+0x46/0x206
[ 19.809604] [<ffffffff8008af32>] load_module+0x1a3a/0x1fa2
[ 19.809610] [<ffffffff8008b636>] __do_sys_finit_module+0x8a/0xb6
[ 19.809615] [<ffffffff8008b686>] sys_finit_module+0x10/0x18
[ 19.809621] [<ffffffff800030ea>] ret_from_syscall+0x0/0x2
[ 19.809628] ---[ end trace 7644a0ebf29ac4cc ]---
[ 19.811201] Unable to handle kernel access to user memory without uaccess routines at virtual address 00000001000000cf
[ 20.039983] Oops [#2]
[ 20.039992] Modules linked in: vdec(O+) venc(O+) jpu(O) starfive_mailbox
[ 20.048976] CPU: 2 PID: 241 Comm: systemd-udevd Tainted: G D O 5.15.0 #1
[ 20.056806] Hardware name: StarFive VisionFive V2 (DT)
[ 20.056898] mailbox_test soc:mailbox_client@0: invalid resource
[ 20.061948] epc : really_probe.part.0+0x1ac/0x234
[ 20.067880] mailbox_test soc:mailbox_client@0: invalid resource
[ 20.072564] ra : really_probe.part.0+0x1a6/0x234
[ 20.078592] mailbox_test soc:mailbox_client@0: Successfully registered
[ 20.083176] epc : ffffffff8051fff6 ra : ffffffff8051fff0 sp : ffffffd02985ba40
[ 20.083187] [e[0;32m OK e gp :0m] Reached tar ffet e[0;1;39mSysffffffem Time Sete[0m8
1504b40 tp : ffffffe0c1e63f00 t0 : ffffffe0d523e800
[ 20.109516] t1 : 0000000000000400 t2 : ffffffff814d6e50 s0 : ffffffd02985ba70
[ 20.116745] s1 : ffffffe0bfed4010 a0 : 0000000000000000 a1 : 0000000000000000
[ 20.123972] a2 : 0000000000000010 a3 : 0000000000000001 a4 : 0000000000082001
[ 20.131201] a5 : 00000000ffffffff a6 : 00000000000001c0 a7 : 0000000000000038
[ 20.138432] s2 : 0000000000000000 s3 : ffffffff015771f8 s4 : 0000000000000033
[ 20.145662] s5 : ffffffff015772c0 s6 : 0000000000000002 s7 : 0000000000000021
[ 20.152891] s8 : 0000000000000cc0 s9 : 000000000000fff1 s10: 0000000000000100
[ 20.160127] s11: 0000000000000013 t3 : ffffffffffffffff t4 : 0000000000000000
[ 20.167356] t5 : ffffffff8148c228 t6 : ffffffe0d523e7cd
[e[0;32m OK e[[ 20.172669] status: 0000000200000120 badaddr: 00000001000000cf cause: 000000000000000d
0m] Reached targ[ 20.181961] [<ffffffff8051fff6>] really_probe.part.0+0x1ac/0x234
et e[0;1;39mTime[ 20.189342] [<ffffffff805200ee>] __driver_probe_device+0x70/0xde
r Unitse[0m.
[ 20.196721] [<ffffffff80520188>] driver_probe_device+0x2c/0xb0
[ 20.203755] [<ffffffff805206fa>] __driver_attach+0x60/0x102
[ 20.209335] [<ffffffff8051de9c>] bus_for_each_dev+0x5a/0x98
[ 20.214917] [<ffffffff8051f7ac>] driver_attach+0x1a/0x22
[ 20.220238] [<ffffffff8051f25a>] bus_add_driver+0xe6/0x198
[ 20.225732] [<ffffffff80520f36>] driver_register+0x50/0xe4
[e[0;32m OK e[[ 20.231222] [<ffffffff80521dee>] __platform_driver_register+0x1c/0x24
0m] Listening on[ 20.239045] [<ffffffff0159709c>] vpu_init+0x9c/0x1000 [vdec]
e[0;1;39mD-Bus [ 20.246077] [<ffffffff800020ea>] do_one_initcall+0x3e/0x168
System Message B[ 20.253023] [<ffffffff80089290>] do_init_module+0x46/0x206
us Sockete[0m.
[ 20.259882] [<ffffffff8008af32>] load_module+0x1a3a/0x1fa2
[ 20.266741] [<ffffffff8008b636>] __do_sys_finit_module+0x8a/0xb6
[ 20.272749] [<ffffffff8008b686>] sys_finit_module+0x10/0x18
[ 20.277746] systemd[1]: sockets.target changed dead -> active
[ 20.278326] [<ffffffff800030ea>] ret_from_syscall+0x0/0x2
[ 20.289496] ---[ end trace 7644a0ebf29ac4cd ]---
[e[0;32m OK e[0m] Reached target e[0;1;39mSocket Unitse[0m.
[e[0;32m OK e[0m] Reached target e[0;1;39mBasic Systeme[0m.
[ 20.366181] systemd-journald[201]: Successfully sent stream file descriptor to service manager.
Starting e[0;1;39mD-Bus System Message Buse[0m...
Starting e[0;1;39mUpdate RTC With System Clocke[0m...
[ 20.425730] systemd-journald[201]: Successfully sent stream file descriptor to service manager.
[ 20.537073] wlan_ecr6600u_usb-ECR6600U_V1.1.0B04P05-build:2023-01-08 10:06:20 CST
[ 20.544573] [ecrnx] eswin_usb_init entry !!
[ 20.548847] [ecrnx] eswin_usb_probe entry, func: 0, g_usb: (____ptrval____) !!
[ 22.261667] systemd-journald[201]: Data hash table of /run/log/journal/f382801a7c854d7f8369fdb23519ee8c/system.journal has a fill level at 75.0 (33233 of 44309 items, 25165824 file size, 757 bytes per hash table item), suggesting rotation.
[ 22.290130] systemd-journald[201]: /run/log/journal/f382801a7c854d7f8369fdb23519ee8c/system.journal: Journal header limits reached or header out-of-date, rotating.
[ 22.304747] systemd-journald[201]: Rotating...
[ 22.309304] systemd-journald[201]: Journal effective settings seal=no keyed_hash=yes compress=yes compress_threshold_bytes=512B
[ 22.320950] systemd-journald[201]: Reserving 333 entries in field hash table.
[ 22.331965] systemd-journald[201]: Reserving 44309 entries in data hash table.
[ 22.340739] systemd-journald[201]: Vacuuming...
[ 22.345439] systemd-journald[201]: Vacuuming done, freed 0B of archived journals from /run/log/journal/f382801a7c854d7f8369fdb23519ee8c.
[ 22.446825] random: crng init done
[ 22.450239] random: 6 urandom warning(s) missed due to ratelimiting
[ 40.897238] mipi_0p9: disabling
[ 41.556769] rcu: INFO: rcu_sched detected stalls on CPUs/tasks:
[ 41.562695] rcu: 3-...0: (0 ticks this GP) idle=003/1/0x4000000000000000 softirq=2762/2762 fqs=1051
[ 41.571920] (detected by 1, t=2103 jiffies, g=501, q=29001)
[ 41.577582] Task dump for CPU 3:
[ 41.580808] task:systemd-udevd state:R running task stack: 0 pid: 257 ppid: 225 flags:0x00000008
[ 41.590729] Call Trace:
[ 41.593172] [<ffffffff809e4a6a>] __schedule+0x21c/0x518
内核驱动问题?
用了 initrd 了没?试试不用 initrd 什么提示信息。
某个驱动越权读取内存?
[ 20.039992] Modules linked in: vdec(O+) venc(O+) jpu(O) starfive_mailbox
[ 20.048976] CPU: 2 PID: 241 Comm: systemd-udevd Tainted: G D O 5.15.0 #1
[ 20.056806] Hardware name: StarFive VisionFive V2 (DT)
[ 20.056898] mailbox_test soc:mailbox_client@0: invalid resource
[ 20.061948] epc : really_probe.part.0+0x1ac/0x234
[ 20.067880] mailbox_test soc:mailbox_client@0: invalid resource
[ 20.072564] ra : really_probe.part.0+0x1a6/0x234
[ 20.078592] mailbox_test soc:mailbox_client@0: Successfully registered
上面已经给出 trace 信息了,但是貌似被多线程运行弄的格式乱了。后面这 2 个应该没关系。
starfive_mailbox 这个驱动按说不应该存在问题才对啊。这是 CPU 相关的核心驱动了。
chbinnc
11
@jiangtao9999
解决了,确实只是驱动问题,还需重新拷贝新版本rootfs里的/lib/firmware。多谢了