• 【干货】教你在十分钟内编译一个Linux内核,并在虚拟机里运行!


    前言

    这篇文章将会简单的介绍如何在Linux系统上面,编译一个5.19的内核,然后在QEMU虚拟机中运行。

    下载Linux内核源码

    首先,我们需要下载Linux的代码:

    https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.19.10.tar.xz

    然后,把它解压到一个地方,比如在桌面新建一个叫做linux-5.19-build的文件夹,然后把代码解压进去。

    这个时候,我们的目录结构应该是这样子:

    安装所需的软件包

    在控制台输入以下命令,安装所需的软件包。

    sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison qemu qemu-system qemu-kvm

    如果你的电脑运行的不是Ubuntu/Debian系列的Linux发行版,请使用对应的包管理器安装以上软件。

    配置Linux的编译选项

    Linux有很多的编译选项,我们选择默认的即可。

    首先,我们在linux源代码的文件夹内,右键打开终端。请确保终端显示的“当前工作目录”为”linux-5.19-build/linux-5.19.10″.

    接着,我们创建Linux的默认编译配置,在控制台输入:

    make defconfig

    当显示”configuration written to .config”字样之后,说明配置创建成功。我们可以进入下一步。

    注解:如果你想对linux内核进行裁减或者交叉编译,请使用”make menuconfig”选项,可以自定义你的编译配置。当然,对于新手来说,默认配置就可以了。

    开始编译Linux

    终于,我们可以开始编译Linux内核了,我们只需要在控制台输入以下命令即可。

    make -j $(nproc) bzImage

    根据电脑的性能不同,编译时间从1分钟到二十分钟甚至更久。

    ps: 我在E5-2640v4双路服务器上(总共40个逻辑处理器)编译,花费1分36秒的时间。在配备AMD R7-4800H(总共16个逻辑处理器)的笔记本电脑上花费2分25秒的时间。

    当显示“Kernel: arch/x86/boot/bzImage is ready“的时候,意味着编译完成了。

    怎么运行?工作还没有完成!

    Linux内核只是一个内核,我们要运行它的话,还需要一个磁盘文件系统来放置一些所需的文件和程序。因此我们还需要一个工具:busybox

    配置BusyBox

    按照百科的定义:

    BusyBox

    BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet等。

    那我们如何下载它?

    我们可以这样,在linux-5.19-build文件夹下,输入以下命令,即可下载busybox的代码,并解压它。

    1. wget https://busybox.net/downloads/busybox-1.35.0.tar.bz2
    2. tar xvf busybox-1.35.0.tar.bz2

    解压之后,目录结构如图所示:

     

    然后我们在busybox文件夹下打开控制台,输入以下命令,配置它的编译选项:

    make menuconfig

    然后就会弹出这样一个界面:

     

    我们可以通过上下左右键来操作它。选中Settings,然后回车进入。

    一直按方向键,往下找到Build Options

    然后选中“Build static binary“,按下键盘的y键,即可选中它。选中之后前面的方框的*号会亮起。如图所示:

     

    接着,我们按键盘的右键,将底部光标移动到Exit处,按回车,回到主界面。

     

    接着在主界面同样也是exit.

    就会弹出界面询问我们是否保存,我们选择Yes即可。

     

    创建磁盘镜像

    接着,我们回到“桌面/linux-5.19-build”文件夹,在控制台输入以下命令,创建磁盘镜像:

    1. dd if=/dev/zero of=rootfs.img bs=1M count=20
    2. mkfs.ext4 rootfs.img

    然后,我们接着运行以下命令,编译BusyBox它装进磁盘镜像。

    1. mkdir fs
    2. sudo mount -t ext4 -o loop rootfs.img ./fs
    3. cd busybox-1.35.0
    4. sudo make install -j $(nproc) CONFIG_PREFIX=../fs
    5. # 为文件系统创建一些必须的文件夹
    6. cd ../fs
    7. sudo mkdir proc dev etc home mnt
    8. sudo cp -r ../busybox-1.35.0/examples/bootfloppy/etc/* etc/
    9. cd ..
    10. # 更改权限,以免无法运行
    11. sudo chmod -R 777 fs/
    12. # 卸载磁盘镜像
    13. sudo umount fs

    启动Linux内核

    至此,我们的准备工作已经全部完成!我们可以在QEMU虚拟机中启动Linux内核了。

    在“桌面/linux-5.19-build”文件夹下的控制台输入命令:

    qemu-system-x86_64 -kernel ./linux-5.19.10/arch/x86_64/boot/bzImage  -hda rootfs.img  -append "root=/dev/sda"

    于是,内核就成功启动了。如图所示,我们能够看到当前目录下有一些文件夹。

     

    我们也能够使用一些常用的Linux命令来操作了。

    转载请注明来源:教你在十分钟内编译一个Linux内核,并在虚拟机里运行 | | 龙进的博客

    欢迎关注我的公众号“灯珑”,让我们一起了解更多的事物~

  • 相关阅读:
    金仓数据库 KingbaseES插件参考手册(3. amcheck)
    素皮材质的手机壳,如何才能做到经久耐用?
    CAS SSO单点登录服务端环境搭建
    Git——Git介绍及安装步骤
    DRM Memory Management
    一次 线上 Java进程突然挂掉排查 过程思路
    Git基本使用
    Spring Boot如何实现配置文件的自动加载和刷新?
    SQL刷题查漏补缺7
    l8-d12 IP协议与ethernet协议
  • 原文地址:https://blog.csdn.net/qq_34026204/article/details/127936017