【Kenel】基于 QEMU 的 Linux 内核编译和安装

文章目录

    • 安装虚拟机系统
    • 共享目录
    • 编译内核
    • 卸载内核
    • 参考资料

本文主要记录个人做存储系统研究时,在 QEMU 环境下编译和安装 Linux 内核的过程

安装虚拟机系统

之前在 利用 RocksDB + ZenFS 测试 ZNS 的环境搭建和使用 给出过借助 VNC 进行图形化安装的步骤,这里再给出仅通过终端进行安装的步骤

# 下载 Ubuntu 镜像
wget https://releases.ubuntu.com/24.04.1/ubuntu-24.04.1-live-server-amd64.iso# 制作磁盘镜像,大小随意
qemu-img create -f qcow2 u24s.qcow2 80G# ubuntu 镜像挂在 cdrom 上启动
# -enable-kvm 用于开启 KVM 虚拟化
# -boot once=d 用于只从 cdrom 启动一次
# -nographic 用于关闭图形界面
qemu-system-x86_64 -m 8G -smp 4 -enable-kvm -nographic -hda u24s.qcow2 \-cdrom ubuntu-24.04.1-live-server-amd64.iso -boot once=d

按 e 进入编辑模式

然后在 grub menu 按 e 进入编辑模式

新增 console=ttyS0

然后在 vmlinuz 那一行新增 console=ttyS0,之后 ctrl+x 启动即可

安装完毕后,后续启动命令可以简化

qemu-system-x86_64 -m 8G -smp 4 -enable-kvm -nographic -hda u24s.qcow2

但是此时的启动过程中的 grub menu 不会显示,还需要修改下 grub 配置

sudo vim /etc/default/grub# 修改下面三个配置项
#GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=3
GRUB_TERMINAL=consolesudo update-grub
sudo poweroff

如果想通过 ssh 登陆虚拟机,启动参数可以加一个端口转发

qemu-system-x86_64 -m 8G -smp 4 -enable-kvm -nographic -hda u24s.qcow2 \-net nic,model=virtio -net user,hostfwd=tcp::6666-:22

之后就可以在物理机器上通过 ssh 登陆虚拟机了

ssh -p 6666 [user]@localhost

共享目录

为了加速内核编译,可以在物理机器上编译内核,然后将编译好的内核文件借助共享目录传输到虚拟机中

# 在物理机器上创建共享目录
mkdir -p xxx/share# 启动虚拟机时挂载共享目录
qemu-system-x86_64 -m 8G -smp 4 -enable-kvm -nographic -hda u24s.qcow2 \-fsdev local,path=xxx/share,id=share_dir,security_model=none \-device virtio-9p-pci,fsdev=share_dir,mount_tag=hostshare \-net nic,model=virtio -net user,hostfwd=tcp::6666-:22

如果报错,很有可能是 qemu 不支持 9p,需要从源码编译 qemu,在 configure 时加上 --enable-virtfs 选项即可

之后在虚拟机中挂载共享目录

# 虚拟机中挂载共享目录
sudo mkdir -p /mnt/share
sudo mount -t 9p -o trans=virtio hostshare /mnt/share/ -oversion=9p2000.L

如果报错,很有可能是虚拟机的内核不支持 9p,需要编译内核,是打开以下内核配置选项:

CONFIG_NET_9P=y
CONFIG_NET_9P_VIRTIO=y
CONFIG_NET_9P_DEBUG=y (Optional)
CONFIG_9P_FS=y
CONFIG_9P_FS_POSIX_ACL=y
CONFIG_PCI=y
CONFIG_VIRTIO_PCI=yCONFIG_PCI=y
CONFIG_VIRTIO_PCI=y
CONFIG_PCI_HOST_GENERIC=y (only needed for the QEMU Arm 'virt' board)

编译内核

在物理机上准备环境

# 编译工具,词法语法分析库
sudo apt install build-essential bison flex
# 如果编译时缺少 openssl 的相关头文件,需要安装相关库
sudo apt install libssl-dev
# 利用 make menuconfig 图形界面配置编译选项需要安装 ncurses 环境:
sudo apt install libncurses5-dev# 下载 kernel 源码,解压
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.xxx.tar.xz
tar xvf linux-5.4.xxx.tar.xz
mv linux-5.4.xxx xxx/share/

在虚拟机内获取内核配置

sudo mount -t 9p -o trans=virtio hostshare /mnt/share/ -oversion=9p2000.Lcd /mnt/share/linux-5.4.xxx
sudo make oldconfig

在物理机上编译内核

# 解决 make Error 问题
sudo scripts/config --set-str SYSTEM_TRUSTED_KEYS ""
sudo scripts/config --set-str SYSTEM_REVOCATION_KEYS ""# 编译内核和模块, -j24 表示使用 24 个线程编译, 可以根据自己的 CPU 核心数和内存大小调整
sudo make -j24

在虚拟机内安装内核

# 去除调试信息,解决 initrd.img 过大的问题
sudo make INSTALL_MOD_STRIP=1 modules_install
sudo make install
sudo poweroff

卸载内核

开发过程中可能会有 bug,需要在虚拟机卸载有问题的内核

# 删除 /lib/modules/ 目录下以内核的版本号为名称的目录
sudo rm -rf /lib/modules/5.4.xxx+/# (可选)删除 /usr/src/linux/ 目录下不需要的内核源码
# sudo rm -rf /usr/src/linux-headers-5.4.xxx# 删除 /boot 目录下启动的内核和内核映像文件
sudo rm /boot/*5.4.xxx*# 更改 grub 的配置文件,删除不需要的内核启动列表 
sudo update-grub2

参考资料

  • 【QEMU】Invocation
  • 【QEMU】Invocation
  • 【ask ubuntu】No rule to make target ‘debian/canonical-certs.pem’
  • 【CSDN】qemu 中使用 9p virtio, 支持 host 和 guest 中共享目录
  • 【CSDN】解决 Linux 编译内核模块 (initrd.img) 过大的问题

本文作者: ywang_wnlo
本文链接: https://ywang-wnlo.github.io/posts/5fce01ae/
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/453955.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何轻松使用pip安装Git仓库中的私有Python模块(使用pip和Git仓库发布和安装私有Python模块)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 Git模块 📒📝 Git仓库要求🔖 项目目录结构🔖 文件说明📝 编写setup.py📝 配置MANIFEST.in📝 推送代码到Git仓库📝 使用pip安装模块🔖 使用用户名和密码🔖 使用Personal Access Token (PAT)🔖 示例📝 更…

Linux系统——ssh远程连接

Linux系统——ssh远程连接 一、ssh协议介绍1、远程连接协议2、ssh服务基本操作3、ssh常用操作 二、ssh加密1、加密算法类型2、对称加密算法3、非对称加密算法 三、免密ssh的配置1、ssh认证方式2、配置免密ssh3、ssh-copy-id做了什么? 四、ssh服务配置 一、ssh协议介…

基于Java微信小程序的的儿童阅读系统的详细设计和实现(源码+lw+部署文档+讲解等)

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不…

【解决proto文件生成的java 在intellij idea引用会报错】

现象 下载新项目 代码有引用proto生成的java类 会一直报红 我的idea版本2024.2.3,比较新,自动装载了插件,旧版本需要自己装 解决方式 Maven生成资源 这一步是为了先从proto生成java文件 安装这个插件 右键项目->Maven->Generated…

国产电脑能装win系统吗_国产电脑安装windows要求及方法

国产电脑能装win系统吗?‌国产电脑可以安装Windows系统,但需要满足特定条件。‌‌目前只有CPU基于X86架构国产电脑才可以安装windows。下面小编就和大家一起来分析下国产电脑安装windows要求及方法。 国产电脑能装win系统吗? 答:‌国产电脑可…

天锐绿盾 vs Ping32:企业级加密软件大比拼

在信息安全日益重要的今天,企业级加密软件成为了企业保护敏感数据的得力助手。在众多加密软件中,天锐绿盾与Ping32凭借各自的优势,赢得了市场的广泛认可。那么,这两款软件究竟有何异同?哪款更适合您的企业呢&#xff1…

【Linux】进程优先级进程切换

文章目录 进程优先级查看进程优先级进程优先级的修改 进程切换进程切换的概念 总结 进程优先级 进程优先级是操作系统中用于决定进程调度顺序的重要属性。它表示一个进程在系统资源分配和 CPU 调度中的相对重要性。优先级越高的进程通常会获得更多的 CPU 时间和资源&#xff0…

【网页设计】CSS 盒子模型

目标 能够准确阐述盒子模型的 4 个组成部分能够利用边框复合写法给元素添加边框能够计算盒子的实际大小能够利用盒子模型布局模块案例能够给盒子设置圆角边框能够给盒子添加阴影能够给文字添加阴影 1. 盒子模型 页面布局要学习三大核心, 盒子模型, 浮动 和 定位. 学习好盒子模…

Spring6梳理15——Bean的作用域

目录 15.1 引入 15.1.1 Orders类 15.1.2 bean-scope.xml 15.1.3 OrdersTest类 15.1.4 运行截图 15.1 引入 在Spring中可以通过配置bean标签的scope属性来指定bean的作用域范围,各取值含义参加下表: 取值含义创建对象的时机singleton&#x…

拥抱趋势,洞察智慧!创客匠人「创始人IP创新增长班」圆满收官!

拥抱未来趋势,打造创始人IP,建立长期品牌价值。10月15日-17日,由创客匠人主办、创客匠人创始人&CEO老蒋担任主讲人的「创始人IP创新增长班」线下大课在成都生物城凯悦嘉轩酒店圆满收官。 本次大课,强大的势能吸引了来自全国各…

你知道吗?这个岗位只招2人,但HR那边却收到了1w份简历

引言 在当前经济环境下,求职者面临的挑战越来越大。互联网行业尤其如此,许多人挤破头都想进入大厂,但竞争异常激烈。如今的就业市场确实变得异常艰难。然而,随着AI大模型技术的兴起,对于那些掌握了相关技能的专业人才…

作业车间调度优化算法

作业车间调度优化算法 题目来源代码实现输出结果 题目来源 题目来源于葛英飞《智能制造技术基础》书中175页的题目,基余分配率的作业车间调度优化算法。书中这部分有程序流程图,但是没有代码,课后闲暇之余通过Python对其进行了简单的实现&am…

西南交通大学计算机软件专业上岸难度分析

C哥专业提供——计软考研院校选择分析专业课备考指南规划 西南交通大学计算机科学与技术2024届考研难度整体呈现"稳中有升"的态势。学硕实际录取33人,复试分数线362分,复试录取率71.74%;专硕(计算机技术)实际…

“2+1拼团:电商新风尚,驱动增长革新“

在当前经济环境下,商品供应过剩与同质化问题日益凸显,传统电商模式正面临严峻考验,难以有效应对消费者不断升级的需求。为此,一种新颖的21拼团购物模式应运而生,借助其别具一格的运营理念和吸引人的激励机制&#xff0…

企业文件怎么管控?这几个软件你一定要知道!

企业文件管控是确保数据安全、提高工作效率和满足合规要求的关键措施。它有助于保护敏感信息,防止数据泄露,同时提高文件的查找效率,减少重复工作,促进团队协作,支持决策制定,并维护企业的知识产权 。通过实…

[枚举坤坤]二进制枚举基础

我们都知道数据是以二进制形式存储在计算机中的。当我们使用十进制数进行编程时(如a10)实际上计算机要先进行一步转码,将其化为二进制的形式进行计算。如果在编程的过程中我们可以直接越过转码这一步去操纵二进制形式进行运算,程序…

政安晨【零基础玩转各类开源AI项目】基于本地Ubuntu (Linux ) 系统应用Gradio-Lite:无服务器 Gradio 完全在浏览器中运行

目录 简介 什么是@gradio/lite? 入门 1.导入 JS 和 CSS 2. 创建标签 3. 在标签内编写你的 Gradio 应用程序 更多示例:添加其他文件和要求 多个文件 其他要求 SharedWorker 模式 代码和演示playground 1.无服务器部署 2.低延迟 3. 隐私和安全 限制 尝试一下!…

深度学习面试笔试之循环神经网络(RNN)、门控循环单元(GRU)、长短期记忆(LSTM)

深度学习面试笔试之循环神经网络RNN、门控循环单元GRU、长短期记忆LSTM 循环神经网络(RNN)1. 什么是RNN1.1 RNN的应用1.2 为什么有了CNN,还要RNN?1.3 RNN的网络结构1.4 双向RNN1.5 BPTT算法 2. 其它类型的RNN3. CNN与RNN的区别4. 为什么RNN 训练的时候Loss波动很大…

CLion和Qt 联合开发环境配置教程(Windows和Linux版)

需要安装的工具CLion 和Qt CLion下载链接 :https://www.jetbrains.com.cn/clion/ 这个软件属于直接默认安装就行,很简单,不多做介绍了 Qt:https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/online_installers/ window 直接点exe Linux 先c…

Python | Leetcode Python题解之第491题非递减子序列

题目: 题解: class Solution:def findSubsequences(self, nums: List[int]) -> List[List[int]]:def dfs(i, tmp):if i len(nums):if len(tmp) > 2:res.append(tmp[:]) # 拷贝,tmp[:]而非tmpreturn# 选 nums[i]if not tmp or nu…