首页 > 系统相关 >linux内核编译+QEMU编译+根文件系统制作

linux内核编译+QEMU编译+根文件系统制作

时间:2024-12-30 13:20:27浏览次数:5  
标签:qemu make sudo dev 编译 linux QEMU

一、安装相关依赖项(Linux内核和QEMU都包括)
sudo apt  install  libssl-dev  flex  bison  python3-dev  pip  ncurses-devel
libglib2.0-dev  libfdt-dev  ninja-build  zlib1g-dev  libpixman-1-dev   libelf-dev

sudo pip install sphinx
编译qemu。官网:https://www.qemu.org/
源码下载: wget https://download.qemu.org/qemu-9.2.0.tar.xz
解压和编译
tar xvf qemu-9.2.0.tar.xz
cd  qemu-9.2.0
./configure  --enable-kvm --enable-debug   #开启KVM和调试功能
make   或者    make -j4   #采用并行编译,加快编译速度,j后面的数字比CPU核数小1,防止报错
make install              #安装
二、安装相关依赖项,见上
编译linux内核,官网:https://www.kernel.org/
源码下载 
wget  https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.175.tar.xz
解压 tar xvf  linux-5.15.175.tar.xz
cd  linux-5.15.175
make menuconfig或者make defconfig 默认
make 或者 make -j4   #并行编译

如果编译报错,记得 vim .config,修改三个配置
注释掉两个配置项
#CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
#CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"
修改一个配置项为
CONFIG_SYSTEM_REVOCATION_KEYS=""

  编译完成后会生成vmlinux裸文件,这个文件在QEMU中不能直接运行

执行下面的命令
make bzImage      #生成bzImage镜像。更多其他命令使用可以执行 make help ,打开帮助手册阅读 
生成bzImage文件 路径为:./linux-5.15.175/arch/x86/boot/bzImage,这个文件在QEMU中可以运行
内核编译完成后,需要制作根文件系统,搭配内核运行。
根文件系统制作如下:

#参考网上的做法,使用debootstrap命令下载Ubuntu预先设置好的根目录。
使用dd命令,生成1个1G的空白根镜像文件
sudo  dd if=/dev/zero of=./rootfs.img  bs=1M  count=1024
使用mkfs格式化根镜像为ext3文件系统
sudo  mkfs.ext3 rootfs.img
生成一个fs文件夹,用于后面挂载根镜像文件
sudo  mkdir fs
sudo  mount ./rootfs.img  ./fs
下载ubuntu做好的文件目录,并拷贝到根镜像文件内
sudo debootstrap --arch=amd64 focal ./fs https://mirrors.tuna.tsinghua.edu.cn/ubuntu   #使用清华的源
切换根目录
sudo chroot  ./fs/
增加登录密码
passwd
退出根文件系统
exit
根文件系统已配置好,接下来卸载根文件系统
umount ./fs
启动内核和根文件(文件路径要写对)
qemu–system-x86_64  -kernel ./bzImage -hda rootfs.img -append "root=/dev/sda"

 

 

标签:qemu,make,sudo,dev,编译,linux,QEMU
From: https://www.cnblogs.com/codeprojects/p/18640783

相关文章

  • Qt5.14.2 编译QtCipherSqlitePlugin ,_mm_aesimc_si128 (__m128i __X)报错解决
    1.在相同的cpu,相同版本的Qt5.14.2不同电脑下,编译由devbean/QtCipherSqlitePlugin作者处下载的源码。未修改任何东西的情况下,同事电脑一键即可编译成功!而本人则是尝试了很多次都无法编译成功!总是报错内联失败,目标特定选项不匹配等问题! 2.尝试多次后,在sqlitecipher.pro文件添......
  • linux挂载samba客户端
    一、安装必要的软件包首先,需要确保系统上安装了Samba客户端软件包和cifs-utils工具。可以使用以下命令进行安装:sudoyuminstallsamba-clientcifs-utils-y二、创建挂载点目录挂载点是一个本地目录,用于挂载远程的Samba共享。可以使用mkdir命令创建一个挂载点目录,例如:sudo......
  • OpenHarmony源码编译后烧录镜像教程,RK3566鸿蒙开发板演示
    本文介绍瑞芯微主板/开发板编译OpenHarmony源码后烧录镜像的教程,触觉智能PurplePiOH鸿蒙开发板演示。搭载了瑞芯微RK3566四核处理器,树莓派卡片电脑设计,支持开源鸿蒙OpenHarmony3.2-5.0系统,适合鸿蒙开发入门学习。编译源码后镜像路径编译完OpenHarmony源码后,会在以下路径,生成散......
  • Ubuntu 24.04 编译出现 error: ‘uint8_t’ is not a member of ‘std’; did you mea
    1.情况说明安装ubuntu24.04编译某C++开源项目时遇到上述编译报错,uint8_t不是命名空间std下的成员即std::uint8_t未定义2.原因具体原因我也不是很清楚,不过在网上搜到的一篇日本网友的文章:Ubuntu24.04にしたら、C++コンパイルでエラー(‘uint8_t’wasnotdeclaredinthi......
  • linux切换nologin用户运行服务时环境变量的设置
    遇到问题:需要切换nologin用户运行服务,同时使得go程序崩溃时可以生成core。使用sudo-H-u$USER/bin/bash-c"nohup./server>/dev/null2>&1&"。发现设置的环境变量不生效。问题原因:shell没有继承当前用户的环境变量,sudo-E-H-u$USER/bin/bash-c,加入-E会尝试继承当......
  • linux 操作系统下last命令介绍和使用案例
    linux操作系统下last命令介绍和使用案例last命令是Linux系统中用于显示用户最近登录信息的工具。它通过读取/var/log/wtmp文件,提供有关用户登录和注销的详细记录,包括系统启动和关闭的信息。命令简介基本功能查看用户登录历史:显示当前和过去的用户登录记录。显示系统......
  • linux-软硬链接
    我们今天再来聊一下这个"软硬链接"的问题.目录1.软硬链接长什么样?2.软连接和硬链接的特征和应用2.1软连接特征及其应用?①软连接是什么?②软连接的应用1:快捷方式③软连接的应用2:方便维护库文件2.2硬连接特征及其应用?①硬链接是什么?②引用计数?③硬链......
  • Linux shell 变量添加回车换行
    前言全局说明Linuxshell变量添加回车换行一、说明1.1环境:Ubuntu18.04.6LTS(Linuxqt-vm5.4.0-150-generic#167~18.04.1-UbuntuSMPWedMay2400:51:42UTC2023x86_64x86_64x86_64GNU/Linux)二、错误的,变量添加回车换行在bash中,如果要把变量赋值为换行......
  • 【Linux进程】初悉进程
    学习编程就得循环渐进,扎实基础,勿在浮沙筑高台   循环渐进Forward-CSDN博客进程调度简介1.2进程查看命令1.3进程的几个要素二、进程的生命周期2.1进程状态文字描述2.2进程状态的切换2.3task_struct数据结构2.4进程优先级⑴优先级的代码表示⑵Linux内核下的进程分......
  • 鸟叔的LINUX第四章自学
    关于学习Linux之前,我们应该学会两个重要的概念:所有的程序或系统设备都是文件。不管程序本身还是附属文件,所写程序只有一个目的,且有效地完成目标。本人实用的是乌班图操作系统。1.1基础命令操作显示日期与时间的命令:data显示日历的命令:cal简单好用的计算器:bcdata:washu@was......