首页 > 其他分享 >0174-QEMU 从 kernel 启动

0174-QEMU 从 kernel 启动

时间:2024-07-13 09:10:21浏览次数:14  
标签:kernel 启动 elf 0174 multiboot 格式 QEMU

环境

  • Time 2022-11-12
  • WSL-Ubuntu 22.04
  • QEMU 6.2.0
  • NASM 2.15.05

前言

说明

参考:https://os.phil-opp.com/multiboot-kernel/
参考:https://megtechcorner.medium.com/a-tutorial-on-os-and-compiler-3-5d14f7448415

目标

使用编写好的内核可执行文件,直接从 QEMU 启动。

kernel 参数

-kernel bzImage
              Use bzImage as kernel image. The kernel can be either a Linux kernel or in multiboot format.

可以看到,可以直接从 multiboot 格式直接启动。
目前还不支持 multiboot2 格式的文件:https://gitlab.com/qemu-project/qemu/-/issues/389

multiboot 格式

multiboot 格式和之前的 multiboot2 格式不太一样,需要重新编写程序。
规范参数文档:
https://www.gnu.org/software/grub/manual/multiboot/multiboot.html#Specification

其中的 3.1.1 和 3.1.2 节,对需要的字段和值进行了说明。

汇编代码

section .multiboot_header
header_start:
    dd 0x1BADB002  ; 魔法数字,固定值
    dd 0
    dd -0x1BADB002 ; 定义的这三个数字相加需要等于0
header_end:

global start
section .text
bits 32
start:
    ; 向屏幕输出 `OK`。
    mov dword [0xb8000], 0x2f4b2f4f
    hlt

编译和链接

root@jiangbo12490:~/git/game# nasm -f elf32 boot.asm
root@jiangbo12490:~/git/game# ld -T linker.ld -m elf_i386 boot.o  -o kernel.elf

启动 QEMU

qemu-system-x86_64 -kernel kernel.elf -display curses

可以看到和之前的制作的 ISO 文件启动效果一样。

总结

创建了一个内核可执行程序 kernel.elf,直接从 QEMU 中启动。

附录

Remove restriction that prevents bootimg elf64 images

如果启动的时候,出现这个问题,表示 QEMU 还不支持从 elf64 启动。
可以参考这篇文件的编译和链接部分,将文件转化为 elf32 格式。

标签:kernel,启动,elf,0174,multiboot,格式,QEMU
From: https://www.cnblogs.com/jiangbo4444/p/18299666

相关文章

  • 搭建NEMU与QEMU的DiffTest环境(Socket方式)
    搭建NEMU与QEMU的DiffTest环境(Socket方式)1简述2编译NEMU2.1配置2.2修改NEMU/scripts/build.mk2.3修改isa_difftest_checkregs函数2.4修改isa_pmp_check_permission函数2.5编译3编译qemu-socket-difftest3.1修改NEMU/scripts/isa.mk3.2修改NEMU/scripts/build.......
  • perf时 出现[kernel.kallsyms] 符号怎么办
    在perf工具生成的火焰图中看到[kernel.kallsyms],通常意味着火焰图中包含内核符号,但这些符号没有被正确解析。这可能是由于以下几个原因导致的:内核符号表不可用或不完整:perf工具需要内核的符号表来解析这些符号。如果内核符号表不可用或不完整,可能会出现[kernel.kallsyms]......
  • Using a text embedding model locally with semantic kernel
    题意:在本地使用带有语义核(SemanticKernel)的文本嵌入模型问题背景:I'vebeenreadingStephenToub's blogpost aboutbuildingasimpleconsole-based.NETchatapplicationfromthegroundupwithsemantic-kernel.I'mfollowingtheexamplesbutinsteadofOpe......
  • 如何让其他模型也能在SemanticKernel中调用本地函数
    在SemanticKernel的入门例子中://ImportpackagesusingMicrosoft.SemanticKernel;usingMicrosoft.SemanticKernel.ChatCompletion;usingMicrosoft.SemanticKernel.Connectors.OpenAI;//CreateakernelwithAzureOpenAIchatcompletionvarbuilder=Kernel.CreateB......
  • kaggle运行报错RuntimeError: cutlassF: no kernel found to launch!
    项目场景:项目场景:使用原始Llama3推理,到这里都是能行的!pipinstall-qmodelscopeimporttorchfrommodelscopeimportsnapshot_download,AutoModel,AutoTokenizerimportosmodel_dir=snapshot_download('LLM-Research/Meta-Llama-3-8B-Instruct',cache_dir='/r......
  • 动手学Avalonia:基于SemanticKernel与硅基流动构建AI聊天与翻译工具
    Avalonia是什么?Avalonia是一个跨平台的UI框架,专为.NET开发打造,提供灵活的样式系统,支持Windows、macOS、Linux、iOS、Android及WebAssembly等多种平台。它已成熟并适合生产环境,被SchneiderElectric、Unity、JetBrains和GitHub等公司采用。许多人认为Avalonia是WPF的继任者,它为XA......
  • vmdk to vhdx 虚拟磁盘格式转换qemu-img
    qemu-img是创建、转换、修改磁盘映像的工具,我们可以用它非常方便的转换虚拟磁盘格式,比如在vmdk、vhdx、qcow2、vdi之间相互转换,它在流行的Linux、macOS、Windows平台上都发布有对应的版本。本文介绍的是Windows版本,它支持下图中所示的格式。转换格式需要使用它的convert命令,为......
  • Apple - Core Image Kernel Language Reference
    本文翻译整理自:CoreImageKernelLanguageReference(更新日期:2015-01-12https://developer.apple.com/library/archive/documentation/GraphicsImaging/Reference/CIKernelLangRef/Introduction/Introduction.html#//apple_ref/doc/uid/TP40004397-CH1-SW1文章目录一......
  • 一加12搞机(kernelsu+lsposed)
    刷机温馨提示:如果你不知道root的意义在哪,建议不要解锁和root,到时候救砖或者回锁都挺麻烦。刷全量包最新版的系统没有更新推送,所以去一加社区[0]找了个全量包来刷,。安装方式可以看帖子里的内容,说的比较详细,这里截图一部分:解锁bootloader在系统与更新-》开发者选项里勾选OEM......
  • QEMU专栏 - 使用 QEMU 调试 FreeRTOS示例
    写在最前这几天一直在研究QEMU中多核ARM加载不同镜像的问题,一直不得其解,这部分后续可以分几个不分拆解下,看看为什么会出现这种问题.今天先来看看如何使用QEMU来调试FreeRTOS的示例代码.编译并运行FreeRTOS示例代码(基础版本)首先是下载代码,这种只需要看最新代......