qemu-loongarch-runenv icon indicating copy to clipboard operation
qemu-loongarch-runenv copied to clipboard

qemu-system-loongarch64 v7.1 不能正确启动kernel

Open cheungxi opened this issue 1 year ago • 13 comments

只能进入到UEFI 提示如下

map: No mapping found.
Press ESC in 1 seconds to skip startup.nsh or any other key to continue.

cheungxi avatar Nov 03 '22 09:11 cheungxi

新的版本参考docker目录下docker脚本,可以自己编译一份。qemu 7.1需要搭配新的bios和新的内核。

foxsen avatar Nov 03 '22 09:11 foxsen

新的版本参考docker目录下docker脚本,可以自己编译一份。qemu 7.1需要搭配新的bios和新的内核。

docker目录?

cheungxi avatar Nov 03 '22 09:11 cheungxi

qemu-loongarch-runenv仓库的docker目录

foxsen avatar Nov 03 '22 12:11 foxsen

qemu-loongarch-runenv仓库的docker目录

原来是devel分支 :smile:

cheungxi avatar Nov 03 '22 13:11 cheungxi

你好,我在参考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

问题

启动之后输出只有以下信息 image

wangzhankun avatar Feb 05 '23 02:02 wangzhankun

上游6.0的内核对loongarch的支持可能还不完整。建议用6.1以上。可按docker目录的缺省配置(6.1.4)试

foxsen avatar Feb 06 '23 09:02 foxsen

方法一

完全使用默认配置依次执行setup.shrun.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 image

wangzhankun avatar Feb 06 '23 09:02 wangzhankun

看起来是这段时间uefi上游代码可能引入了什么不兼容的修改,要保证稳定,参考配置应该每个组件固定一个状态,比如某个日期的checkout或者某个版本。回头我看看。你可以尝试checkout 在我最后一次commit docker目录时的uefi相关代码

foxsen avatar Feb 06 '23 10:02 foxsen

请问是哪一次commit呀?另外如果是uefi上游代码的问题的话,为啥我仅使用自己编译的vmlinux也是不可以正常启动呀?而使用你的vmlinux就可以正常启动。 image

wangzhankun avatar Feb 06 '23 11:02 wangzhankun

发现一个问题,你直接运行内核的时候用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

foxsen avatar Feb 06 '23 22:02 foxsen

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]>

foxsen avatar Feb 07 '23 02:02 foxsen

如果可以的话希望添加一个引导启动loongnix操作系统的教程。

wangzhankun avatar Feb 07 '23 02:02 wangzhankun

如果可以的话希望添加一个引导启动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创建。

foxsen avatar Feb 08 '23 08:02 foxsen