qemu-loongarch-runenv
qemu-loongarch-runenv copied to clipboard
qemu-system-loongarch64 v7.1 不能正确启动kernel
只能进入到UEFI 提示如下
map: No mapping found.
Press ESC in 1 seconds to skip startup.nsh or any other key to continue.
新的版本参考docker目录下docker脚本,可以自己编译一份。qemu 7.1需要搭配新的bios和新的内核。
新的版本参考docker目录下docker脚本,可以自己编译一份。qemu 7.1需要搭配新的bios和新的内核。
docker目录?
qemu-loongarch-runenv仓库的docker目录
qemu-loongarch-runenv仓库的docker目录
原来是devel分支 :smile:
你好,我在参考docker目录下的几个编译文件编译出了最新的qemu、内核和bios但是系统卡住了。
环境
- host: ubuntu22.04
- loongarch64-unknown-linux-gnu-gcc (GCC) 13.0.0 20220906
- 编译的Linux内核版本是 6.0.14
- QEMU emulator version 7.2.50
使用file
命令对几个文件的输出如下:
/home/wang/Documents/vms/loongnix/myown/../qemu-binary/ramdisk: data
/home/wang/Documents/vms/loongnix/myown/linux-6.0.14/arch/loongarch/boot/vmlinux: ELF 64-bit LSB executable, LoongArch, version 1 (SYSV), statically linked, BuildID[sha1]=18e50e3fd54494c537df8c9b1dc33e41c065f36f, stripped
/home/wang/Documents/vms/loongnix/myown/../tianocore/Build/LoongArchQemu/RELEASE_GCC5/FV/QEMU_EFI.fd: data
运行脚本
#!bin/bash
here=`pwd`
EFI=$here/../tianocore/Build/LoongArchQemu/RELEASE_GCC5/FV/QEMU_EFI.fd
VMLINUZ=$here/linux-6.0.14/arch/loongarch/boot/vmlinux
RAMDISK=$here/../qemu-binary/ramdisk
qemu-system-loongarch64 -machine virt -m 1024 -cpu la464-loongarch-cpu \
-smp 1 \
-bios $EFI \
-kernel $VMLINUZ \
-initrd $RAMDISK \
-append "root=/dev/ram rdinit=/sbin/init console=ttyS0,115200" \
--nographic
问题
启动之后输出只有以下信息
上游6.0的内核对loongarch的支持可能还不完整。建议用6.1以上。可按docker目录的缺省配置(6.1.4)试
方法一
完全使用默认配置依次执行setup.sh
和run.sh
,报错如下:
ASSERT [VirtNorFlashDxe] /qemu-loongarch-runenv/tianocore/edk2-platforms/Platform/Loongson/LoongArchQemuPkg/Library/NorFlashQemuLib/NorFlashQemuLib.c(56): !(((INTN)(RETURN_STATUS)(FindNodeStatus)) < 0)
方法二
我在docker内部直接clone该项目然后执行,./run_loongarch.sh
在解决了库依赖之后可以正常运行并进入内核。但是当我把默认的vlinux换成了使用默认配置脚本编译的内核linux-6.1.4/vmlinux
之后,就出现了如下情况,一直卡在entry kernel
看起来是这段时间uefi上游代码可能引入了什么不兼容的修改,要保证稳定,参考配置应该每个组件固定一个状态,比如某个日期的checkout或者某个版本。回头我看看。你可以尝试checkout 在我最后一次commit docker目录时的uefi相关代码
请问是哪一次commit呀?另外如果是uefi上游代码的问题的话,为啥我仅使用自己编译的vmlinux也是不可以正常启动呀?而使用你的vmlinux就可以正常启动。
发现一个问题,你直接运行内核的时候用vmlinux是错误的,目前龙芯内核采样了efi,应该和我给的run.sh一样用vmlinuz.efi。 这段时间龙芯的内核启动根据上游的需求在变化:以前是直接启动elf格式的vmlinux,根据龙芯固件规范通过acpi或者其他方式传递信息给内核,但最新内核要求采样uefi规范定义的形式,由uefi bios启动efi格式的内核,efi格式内核把内核包装为一个efi bios可以执行的程序。因此老的run_loongarch.sh无法适用于新的内核,uefi bios和efi启动比较重型,其实不利于小的实验性内核,我正在考虑引入u-boot之类比较简单的boot loader,或者不用bootloader
qemu 7.2.0 缺一个支持cfi flash的补丁导致方法1的问题, 在7.2.0上加上这个补丁或者采样qemu最新社区版本可以解决(不过efi boot还有initrd传递等问题,目前devel分支还不完善,等我有空再做完整):
commit 288431a1fb9334d5d57ad7d5854d8475b23e7c42 Author: Xiaojuan Yang [email protected] Date: Mon Nov 7 10:09:47 2022 +0800
hw/loongarch/virt: Add cfi01 pflash device
Add cfi01 pflash device for LoongArch virt machine
Signed-off-by: Xiaojuan Yang <[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Message-Id: <[email protected]>
Signed-off-by: Song Gao <[email protected]>
如果可以的话希望添加一个引导启动loongnix操作系统的教程。
如果可以的话希望添加一个引导启动loongnix操作系统的教程。 更新了脚本,可以跑一个用yocto编译出来的定制linux小系统,这个root文件系统是放到硬盘而不是ramdisk上,可以根据需要扩充。目前的loongnix只有ABI 1.0的版本,这个模拟环境采用了ABI 2.0的工具链和内核,直接运行loongnix的应用可能会出现一些不兼容的现象。ABI 2.0的loongarch linux发行版目前只有arch,此外还有一些定制系统,例如CLFS(https://github.com/sunhaiyong1978/CLFS-for-LoongArch, https://github.com/loongson/build-tools/releases/download/2022.09.06/loongarch64-clfs-system-6.3.tar.bz2)。还可以自己用yocto定制发行版(参考https://github.com/foxsen/{poky,meta-loongson}). 如何把一个文件系统的内容制作成qemu能用的镜像文件,可以参考qemu的文档。刚更新的例子用的是raw格式,只要把硬盘ext4分区上的内容dd成一个文件就可以,更省空间的方法是用qemu cow格式,可以用qemu-img创建。