Linux Kernel Debug环境搭建-VirtualBox篇

概述

调试Linux Kernel就必须要有一台运行Linux的机器,有两种选择,一种是在本地机器上直接运行Linux操作系统,还有一种是在虚拟机中运行Linux操作系统,这里建议使用虚拟机的方式,因为对于调试来说,虚拟机具有以下优点(这里只列举了一部分):

  • 可以充分利用现有的机器,不用再额外准备一台机器了。

  • 虚拟机与主机相互隔离,即使在虚拟机中发生系统崩溃或者数据损坏等严重问题,也不会影响主机,主机上的数据也能得到很好的保护。

  • 在进行Linux内核调试等操作时,可能会导致系统崩溃,使用虚拟机可以避免对实际硬件造成损害。而且,即使虚拟机崩溃,只需重新启动虚拟机即可,无需重启物理主机,节省了时间和精力。

虚拟机软件

虚拟机软件也有两种,分别是VirtualBox和VMware,这要是以前,我可能只会推荐使用VirtualBox,因为VMware以前是收费的,而现在不同了,VMware也免费使用了,所以,Linux Kernel Debug环境搭建分为两篇,分别为VirtualBox篇和VMware篇,这一篇详细介绍VirtualBox搭建Linux Kernel Debug环境,即安装Linux虚拟机^_^

这里我们选择安装Ubuntu 24.04.2 LTS作为我们的调试环境,虽然网上有很多关于VirtualBox安装Ubuntu的教程了,但是这里为了专栏的完整性,也为了阅读的方便性(省的读者再去搜索了),还是会介绍VirtualBox安装Ubuntu 24.04.2 LTS的详细步骤的。

安装VirtualBox

下载VirtualBox 7.1.8

win:https://download.virtualbox.org/virtualbox/7.1.8/VirtualBox-7.1.8-168469-Win.exe

mac-Intel: https://download.virtualbox.org/virtualbox/7.1.8/VirtualBox-7.1.8-168469-OSX.dmg

mac-Apple Silicon: https://download.virtualbox.org/virtualbox/7.1.8/VirtualBox-7.1.8-168469-macOSArm64.dmg

Linux版本到这里下载Linux_Downloads – Oracle VirtualBox,选择对应版本即可。

安装VirtualBox 7.1.8

由于我是在windows11上安装的,下面以windows为例,双击安装包即可安装,安装完成后如下:

安装VirtualBox Extension Pack

VirtualBox Extension Pack是VirtualBox虚拟机的一个扩展包,它为 VirtualBox 提供了一些额外的功能和增强特性。这里先下载VirtualBox 7.1.8 Extension Pack

然后打开VirtualBox软件,点击扩展菜单:

然后点击安装:

选择下载的VirtualBox 7.1.8 Extension Pack:

然后点击安装:

在许可界面,滚动到最下面,然后点击我同意:

即可安装完成:

安装Ubuntu 24.04.2 LTS

接下来,是安装Ubuntu 24.04.2 LTS

下载Ubuntu 24.04.2 LTS

国内镜像源下载速度快,所以我从中科大镜像站下载Ubuntu 24.04.2 LTS:

Verifying - USTC Mirrorshttps://mirrors.ustc.edu.cn/ubuntu-releases/24.04.2/ubuntu-24.04.2-desktop-amd64.iso

创建并设置Ubuntu虚拟机

打开VirtualBox虚拟机,点击控制-新建:

虚拟光盘选择刚才下载的ubuntu24.04的映像文件,勾选跳过自动安装,一会我们要手动修改一些设置,其他的名称和文件夹等,根据你自己的情况设置即可,然后点击下一步:

设置内存大小,cpu数量,根据你自己机器的情况设置,建议设置为主机的一半,勾选启用EFI,点击下一步:

设置虚拟硬盘,直接分配100GB,然后点击下一步:

之后点击完成:

这时候不要启动,点击设置:

在Basic-常规-高级中,将粘贴板和拖放都设为双向,方便后续和主机传输文件:

然后在Basic-显示-屏幕中将显存大小直接拖到最大,能让虚拟机更流畅:

然后在Basic-共享文件夹中点击右侧的添加按钮:

选择共享的文件夹,选择自动挂载,然后点击确定,这也是方便后续和主机传输文件的:

设置完之后,点击确定:

现在可以点击启动按钮了:

安装Ubuntu 24.04.2 LTS

启动虚拟机之后,选择Try or Install Ubuntu,回车即可:

等待一会,即可进入安装界面:

选择你使用的语言,我这里选择English,然后一路点击Next,直到Update available界面,点击skip:

然后选择Install Ubuntu,点击next:

创建账号:

最后,点击Install按钮即可开始安装,耐心等待这一步完成:

正在安装:

安装完成,点击Restart now:

根据提示,将虚拟光盘断开连接,然后回车,即可重启进入ubuntu24.04系统:

选择安装时创建的账户,输入对应的密码,即可登入系统,在欢迎界面,一路next或者skip:

全部完成的界面如下:

安装增强功能

首先打开终端(ctrl + alt + t),执行如下命令:

sudo apt update

然后点击virtualbox的设备-安装增强功能:

此时,虚拟机OS中挂载了一个虚拟光盘,点击打开该虚拟光盘:

然后点击Run software(或者使用命令行运行其中的安装脚本):

输入密码:

根据提示安装对应的包:

然后再运行,安装成功,回车即可,最好重启一下虚拟机OS:

安装完之后,虚拟机系统可以全屏了,也可以使用粘贴板了,之前配置的双向拖放也可以使用了。由于我用的是4K显示器,全屏后显示的图标很小,所以需要到系统Settings-Displays中把缩放设置为200%:

总结

至此,Linux Kernel Debug的第一步,环境搭建-VirtualBox篇就结束了,怎么样,是不是很简单,有些事情就是这样,尽管听起来很麻烦,但是真正操作起来,却很简单,我们在安装虚拟机的实际操作中,完全是一步一步完成的,比如安装增强功能时,我们提前并不知道会缺少一些包,只有当我们执行安装步骤时,根据分析的报错原因,才会发现,原来是缺少了一些依赖包,log还会提示你如何解决该问题,我在实际工作中发现,确实会有一些同事,一遇到问题,连log都不看,就去问别人,这种态度绝对不可取,我们在后面的实践中,会一直贯彻这种方法,只有自己实际操作了,并且认真分析了,才会大有收获!

需要注意的是,安装ubuntu,这仅仅是一个开始~

<think>好的,我现在需要帮助用户搭建X86嵌入式Linux系统的编译环境,并配置工具链和开发环境。首先,用户之前的问题已经涉及到了生成onefileLinux.efi的流程,所以这次需要更详细的环境搭建指导。根据用户提供的引用,特别是引用[1]和引用[2],用户可能对交叉编译工具链和虚拟机环境有基本了解,但需要具体的步骤。 首先,我需要确定用户的环境准备。根据引用[2],用户可能是在Windows下使用Linux虚拟机,所以可能需要指导安装虚拟机软件,比如VirtualBox或VMware,并安装Ubuntu。这部分需要详细说明,但用户已经提到X86架构,所以可能不需要交叉编译工具链,但需要确认。不过X86嵌入式系统可能还是需要本地编译工具链,或者构建针对特定嵌入式设备的工具链,比如使用Buildroot或Yocto。 接下来,用户需要安装必要的工具链。根据引用[3]和引用[4],交叉编译工具链的命名方式有所不同,但用户的问题是关于X86的,所以可能需要本地工具链,比如x86_64-linux-gnu-gcc,或者构建针对X86嵌入式系统的工具链。可能需要使用Buildroot来生成工具链,如用户之前的回答中提到过。 然后,配置开发环境,包括内核源码的准备,根文件系统的构建,以及可能的图形界面支持如QT,根据引用[5]。用户可能需要安装QT的交叉编译环境,但因为是X86架构,可能直接使用本地编译,但需要确认是否嵌入式设备有特殊需求。 此外,用户需要生成内核镜像和根文件系统,并打包成EFI文件,如之前的回答中提到的步骤。可能需要指导如何配置内核,编译,以及如何整合设备树和ACPI表。同时,用户可能需要了解如何测试生成的EFI文件,比如使用QEMU进行验证。 需要注意用户的引用中提到在Windows下使用Linux虚拟机进行开发,所以需要指导如何设置共享文件夹,方便代码在Windows和Linux之间传输。此外,可能还需要指导如何安装必要的依赖库和工具,比如make, gcc, dtc等。 最后,用户可能需要常见问题的解决方案,比如依赖项缺失、内核配置错误、文件系统权限问题等。需要总结常见问题并提供解决方法,以及如何调试和验证环境是否配置正确。 总的来说,步骤可能包括:环境准备(虚拟机安装、Ubuntu系统安装)、安装工具链和依赖、配置内核、构建根文件系统、整合EFI文件、测试和调试。需要结构清晰,分步骤说明,并引用用户提供的参考资料,如Buildroot和QT的安装方法。</think>以下是搭建X86嵌入式Linux系统编译环境的完整流程,结合开发环境配置、工具链选择与系统集成要点: --- ### **一、环境搭建(Windows/Linux双平台协同)** #### **1.1 虚拟机配置(Windows用户)** - **推荐方案**: ```bash 1. 安装VMware Workstation或VirtualBox 2. 创建Ubuntu 22.04 LTS虚拟机(建议分配4核CPU/8GB RAM/50GB硬盘) 3. 启用共享文件夹:设置Windows与Linux文件交换路径[^2] ``` #### **1.2 原生Linux环境(可选)** - **物理机直接安装**: ```bash sudo apt update && sudo apt upgrade -y ``` --- ### **二、工具链配置** #### **2.1 本地工具链安装** - **X86专用工具链**(非交叉编译): ```bash sudo apt install build-essential libncurses-dev flex bison libssl-dev bc # 验证:x86_64-linux-gnu-gcc --version [^3] ``` #### **2.2 Buildroot定制工具链(推荐)** 1. **下载与配置**: ```bash wget https://buildroot.org/downloads/buildroot-2023.02.6.tar.gz tar xvf buildroot-2023.02.6.tar.gz cd buildroot-2023.02.6 make menuconfig # 选择x86_64架构[^1] ``` ```text Target options → Architecture → x86_64 Toolchain → Build cross-compiler for x86_64 ``` 2. **编译工具链**: ```bash make -j$(nproc) # 生成output/host/bin/x86_64-linux-gnu-* ``` --- ### **三、内核开发环境** #### **3.1 获取内核源码** ```bash git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git cd linux && git checkout v5.15 -b x86-embedded ``` #### **3.2 内核配置模板** ```bash make ARCH=x86_64 x86_64_defconfig # 基础配置 make ARCH=x86_64 menuconfig # 嵌入式优化项: ``` ```text # 关键配置修改 CONFIG_MODULES=n # 禁用动态模块 CONFIG_EFI=y # UEFI支持 CONFIG_DEBUG_INFO=n # 减小内核体积 CONFIG_TINY_RCU=y # 适用于低资源环境 ``` #### **3.3 内核编译** ```bash make ARCH=x86_64 -j$(nproc) bzImage # 产物路径:arch/x86/boot/bzImage ``` --- ### **四、根文件系统构建** #### **4.1 BusyBox最小系统** ```bash wget https://busybox.net/downloads/busybox-1.36.0.tar.bz2 tar xvf busybox-1.36.0.tar.bz2 cd busybox-1.36.0 make defconfig make menuconfig # 启用静态编译:Settings → Build static binary make -j$(nproc) && make install ``` #### **4.2 制作Initramfs** ```bash mkdir initramfs && cd initramfs cp -r ../busybox-1.36.0/_install/* . mkdir -p proc sys dev etc echo '#!/bin/sh' > init echo 'mount -t proc none /proc' >> init echo 'exec /bin/sh' >> init chmod +x init find . | cpio -H newc -o | gzip > ../initramfs.cpio.gz ``` --- ### **五、集成开发环境(IDE)** #### **5.1 VSCode远程开发** ```bash # 在Linux环境中安装扩展: code --install-extension ms-vscode-remote.vscode-remote-extensionpack # 通过SSH连接到虚拟机开发[^2] ``` #### **5.2 QT开发环境(可选)** ```bash wget https://download.qt.io/archive/qt/5.12/5.12.12/qt-opensource-linux-x64-5.12.12.run chmod +x qt-opensource-linux-x64-5.12.12.run ./qt-opensource-linux-x64-5.12.12.run # 安装时选择x86工具链[^5] ``` --- ### **六、验证与部署** #### **6.1 QEMU测试环境** ```bash sudo apt install qemu-system-x86 ovmf qemu-system-x86_64 \ -kernel linux/arch/x86/boot/bzImage \ -initrd initramfs.cpio.gz \ -append "console=ttyS0" \ -nographic ``` #### **6.2 生成EFI可执行文件** ```bash objcopy --add-section .osrel=/etc/os-release \ --add-section .cmdline="console=ttyS0" \ --add-section .linux=arch/x86/boot/bzImage \ --add-section .initrd=initramfs.cpio.gz \ /usr/lib/gnuefi/linuxx64.efi.stub \ bootx64.efi ``` --- ### **七、常见问题排查** 1. **依赖项缺失**: ```bash sudo apt install libelf-dev dwarves zlib1g-dev ``` 2. **内核启动卡死**: 在QEMU启动参数添加`-serial stdio`查看早期日志 3. **文件系统权限错误**: 确保BusyBox编译时选择`CONFIG_STATIC=y` --- ### **相关问题** 1. 如何为X86嵌入式系统添加网络驱动支持? 2. Buildroot中如何自定义软件包? 3. 如何通过JTAG调试X86嵌入式Linux内核? 4. 嵌入式系统中如何实现OTA固件升级? --- **引用说明** [^1]: 嵌入式Linux环境需整合Bootloader、内核、根文件系统和工具链四大组件,Buildroot可自动化此过程。 : 跨平台开发推荐使用虚拟机共享文件夹或VSCode远程开发模式提升效率。 [^3]: X86架构开发可直接使用本地工具链,无需交叉编译。 [^5]: QT环境安装时需注意选择与目标架构匹配的组件,避免兼容性问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux底层小工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值