淡炒番茄
为啥旧固件要用虚拟地址
因为以前 MIPS 时代做同样事情的代码就是虚拟地址
而新固件要直接用物理地址?
因为 UEFI、ACPI 标准规定了要用物理地址,所有现存的 UEFI 固件实现(x86、ARM64、RISC-V)也是物理地址。
更确切地说,固件是系统启动后运行的第一段代码,虚拟地址的映射方式千变万化,但物理地址只有一种表示方式。为了给操作系统最大自由度和便利,固件当然不要去规定所有操作系统都要使用“我的这一种”虚拟地址映射,交给操作系统的环境就只能使用物理地址。
两者有何优劣?
应该很明显了 ;-)
白老师文章里的前置条件“老固件新世界”是默认咱们大家都在玩新世界的东西(因为在社区中大家玩的都是新世界,未来新世界是大趋势)
只要是LoongArch机器,不管是“旧固件老世界”亦或者“老固件新世界”,你刷上新固件都可以玩“新固件新世界”
只要大家备份好flash和本地elf防止成砖,紧跟新世界最新状态
淡炒番茄 为啥前置条件是旧固件新世界?不可以是旧固件旧世界吗?
正常重装即可。
直接从旧世界固件、旧世界发行版(用户态)升到新世界固件,必然无法启动,因为没有适配新世界固件的旧世界发行版(用户态)。
白老师威武
不过新世界的固件目前确实还有用BOOTLOONGARCH.EFI的,也许过段时间会消失。
loongnix 20.2 发布说明中,有提到: http://docs.loongnix.cn/loongnix/lnd-20/loongarch64/Release_notes/02.%E7%89%88%E6%9C%AC%E7%89%B9%E6%80%A7.html
内核新增功能 增加UIO支持 增加efi gop支持 增加efistub支持
其中的 "efistub支持“,是否可以理解为也在向固件直接引导内核迈进?
杜比 我精力有限,对旧世界的细节不知道,不关注,不研究。这部分可以由论坛里的龙芯员工代为解释。。。
我升级到新世界gentoo了,碰到的唯一问题是 grub 默认安装到了 /EFI/gentoo/xxxxx 手动copy一下ok
phorcys 这个不是问题,你去看下 efibootmgr -v 输出,会发现新增启动项的路径是一致的。。
efibootmgr -v
xen0n 如果efibootmgr没问题应该是ok的
不过我刷了新世界固件以后,从arch里chroot进gentoo,这时候efibootmgr 似乎有问题
所以我还是copy成默认的,进新世界gentoo以后,efibootmgr可以注册了,就没这问题了
phorcys 从arch里chroot进gentoo,这时候efibootmgr 似乎有问题
可能是 efivarfs 没 bind-mount 的原因,除此之外应该不会坑,反正与主要操作步骤没关系就是了,成功了就好
xen0n 我有 mount -o bind /sys sys 的,所以efibootmgr起不来我还有点奇怪的
所以复制了一份到 /EFI/BOOT/BOOTLOONGARCH64.EFI,
引导时候也没碰到问题。
从旧固件到新固件,只要有个 临时中转的系统,升级应该比较无痛
phorcys 我有 mount -o bind /sys sys 的,所以efibootmgr起不来我还有点奇怪的
那就是这个原因了,efivarfs 是 sysfs 里面又挂了一层,所以要 mount --rbind /sys sys 递归 bind-mount...
mount --rbind /sys sys
ok but the qemu loongarch uefi in https://github.com/yangxiaojuan-loongson/qemu-binary/ is still in the old world
exxxxkc 我用https://mirrors.wsyu.edu.cn/loongarch/archlinux/images/QEMU_EFI_7.2.fd 这个固件可以启动新世界内核。
本站文章除其作者特殊声明外,一律采用CC BY-NC-SA 4.0许可协议进行授权。进行转载或二次创作时务必以相同协议进行共享,严禁用于商业用途。