Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
cheungxi opened this issue Nov 3, 2022 · 13 comments
Open

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

cheungxi opened this issue Nov 3, 2022 · 13 comments

Comments

@cheungxi
Copy link
Contributor

cheungxi commented Nov 3, 2022

只能进入到UEFI
提示如下

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

foxsen commented Nov 3, 2022

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

@cheungxi
Copy link
Contributor Author

cheungxi commented Nov 3, 2022

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

docker目录?

@foxsen
Copy link
Owner

foxsen commented Nov 3, 2022

qemu-loongarch-runenv仓库的docker目录

@cheungxi
Copy link
Contributor Author

cheungxi commented Nov 3, 2022

qemu-loongarch-runenv仓库的docker目录

原来是devel分支 😄

@wangzhankun
Copy link

wangzhankun commented Feb 5, 2023

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

@foxsen
Copy link
Owner

foxsen commented Feb 6, 2023

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

@wangzhankun
Copy link

方法一

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

@foxsen
Copy link
Owner

foxsen commented Feb 6, 2023

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

@wangzhankun
Copy link

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

@foxsen
Copy link
Owner

foxsen commented Feb 6, 2023

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

foxsen commented Feb 7, 2023

qemu 7.2.0 缺一个支持cfi flash的补丁导致方法1的问题, 在7.2.0上加上这个补丁或者采样qemu最新社区版本可以解决(不过efi boot还有initrd传递等问题,目前devel分支还不完善,等我有空再做完整):

commit 288431a1fb9334d5d57ad7d5854d8475b23e7c42
Author: Xiaojuan Yang yangxiaojuan@loongson.cn
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 <yangxiaojuan@loongson.cn>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-Id: <20221130100647.398565-1-yangxiaojuan@loongson.cn>
Signed-off-by: Song Gao <gaosong@loongson.cn>

@wangzhankun
Copy link

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

@foxsen
Copy link
Owner

foxsen commented Feb 8, 2023

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants