如何在ubuntu18上通过qemu虚拟化Linux内核4.19的环境,我是看宋宝华的Linux设备驱动开发书籍也想跟着书籍做一下,但是书上的链接失效了,并且它的版本太老了,你有什么建议或者有无可以参考的博客链接
时间: 2025-06-09 07:48:37 浏览: 27
<think>好的,我需要帮助用户在Ubuntu 18.04上使用QEMU虚拟化Linux内核4.19环境,用于学习宋宝华的Linux设备驱动开发。用户提到书中的链接失效,版本较老,需要替代方案和最新的参考资源。
首先,用户的环境是Ubuntu 18.04。虽然这个版本比较旧,但QEMU和相关工具应该仍然可用。不过可能需要安装较新的QEMU版本或从源码编译,以确保兼容性。需要确认Ubuntu 18.04的软件仓库中的QEMU版本是否支持内核4.19的虚拟化。
接下来,用户需要虚拟化Linux内核4.19。这意味着需要获取该版本的内核源代码,并进行配置编译,生成bzImage和模块。同时,可能需要准备一个根文件系统,比如使用BusyBox或现成的发行版镜像。
用户提到书籍中的链接失效,所以需要提供替代的步骤和资源。可能需要分步骤指导如何搭建环境,包括安装QEMU、编译内核、创建根文件系统、运行虚拟机等。此外,建议用户使用较新的资源,比如GitHub上的开源项目或博客教程,这些可能更新更及时。
考虑到用户可能不熟悉某些步骤,需要详细说明每个步骤,并给出命令示例。同时,要注意潜在的问题,比如依赖项安装、内核配置选项的选择、文件系统的权限问题等。可能需要提醒用户遇到错误时如何排查,比如查看QEMU的输出日志,检查内核编译选项是否正确。
另外,用户可能希望有一个简化的流程,避免复杂的配置。可以考虑推荐使用已经配置好的脚本或工具,比如使用buildroot来生成根文件系统,或者使用现成的QEMU虚拟机镜像,节省时间。
最后,需要验证整个流程是否可行。可能需要自己快速测试关键步骤,确保命令的正确性。同时,提供参考的博客链接或GitHub仓库,确保这些资源当前有效,并且适用于Ubuntu 18.04和内核4.19的组合。
总结步骤:安装QEMU和相关工具,获取内核源码并编译,创建根文件系统,配置QEMU启动参数,运行测试。可能还需要调试内核和驱动程序的技巧,比如使用GDB与QEMU联调。</think>以下是基于Ubuntu 18.04搭建QEMU+Linux 4.19内核实验环境的完整指南,包含替代资源和最新可行方案:
---
### 一、环境准备(Ubuntu 18.04)
#### 1. 安装依赖包
```bash
sudo apt update
sudo apt install -y qemu-system-x86 build-essential libncurses5-dev bison flex libssl-dev libelf-dev
```
#### 2. 验证QEMU版本
```bash
qemu-system-x86_64 --version # 建议版本 ≥ 2.11(默认仓库版本为2.11符合要求)
```
---
### 二、获取Linux 4.19内核源码
#### 方案1:从官方仓库克隆(推荐)
```bash
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
cd linux
git checkout v4.19
```
#### 方案2:直接下载tar包
```bash
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.tar.xz
tar -xvf linux-4.19.tar.xz
```
---
### 三、编译内核
#### 1. 配置内核选项
```bash
make defconfig # 生成默认配置
make menuconfig # 进入图形界面调整设置
```
*关键配置项*:
```text
确保启用以下选项(按空格键选中):
- General setup → Initial RAM filesystem support
- Device Drivers → Character devices → Virtual terminal
- Device Drivers → Network device support → Virtio network driver
```
#### 2. 开始编译
```bash
make -j$(nproc) # 使用全部CPU核心加速编译
```
编译完成后检查产物:
```text
arch/x86/boot/bzImage # 生成的内核镜像
```
---
### 四、制作根文件系统(替代原书方案)
#### 方案1:使用BusyBox快速构建
```bash
# 下载并编译BusyBox
wget https://busybox.net/downloads/busybox-1.32.1.tar.bz2
tar -xf busybox-1.32.1.tar.bz2
cd busybox-1.32.1
make defconfig
make menuconfig # 选择 Settings → Build static binary
make -j$(nproc) && make install
# 创建根文件系统
mkdir rootfs
cd rootfs
cp -r ../busybox-1.32.1/_install/* .
mkdir -p proc sys dev etc/init.d
# 添加启动脚本
cat > etc/init.d/rcS <<EOF
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
/sbin/mdev -s
EOF
chmod +x etc/init.d/rcS
# 生成镜像文件
find . | cpio -o --format=newc > ../rootfs.img
```
#### 方案2:使用现成文件系统(推荐新手)
下载预编译的最小根文件系统:
```bash
wget https://github.com/ivandavidov/minimal/raw/master/_images/minimal_linux_live_64-bit.img
mv minimal_linux_live_64-bit.img rootfs.img
```
---
### 五、启动QEMU虚拟机
```bash
qemu-system-x86_64 \
-kernel linux-4.19/arch/x86/boot/bzImage \
-initrd rootfs.img \
-append "console=ttyS0 root=/dev/ram rdinit=/sbin/init" \
-nographic \
-enable-kvm \
-m 512M
```
*参数说明*:
- `-kernel`:指定编译好的内核镜像
- `-initrd`:指定根文件系统镜像
- `-append`:传递内核启动参数
- `-nographic`:禁用图形界面(退出按`Ctrl+A X`)
---
### 六、调试驱动开发环境
#### 1. 添加调试符号
在内核编译前执行:
```bash
make menuconfig
```
开启配置项:
```text
Kernel hacking → Compile-time checks and compiler options →
[*] Compile the kernel with debug info
```
#### 2. 使用GDB调试
启动QEMU时添加`-s -S`参数:
```bash
qemu-system-x86_64 -s -S ...其他参数...
```
另开终端连接调试器:
```bash
gdb linux-4.19/vmlinux
(gdb) target remote :1234
(gdb) b start_kernel # 设置断点
(gdb) c # 继续执行
```
---
### 七、替代资源推荐(2023年有效)
1. **GitHub参考项目**:
- [linux-kernel-labs](https://github.com/linux-kernel-labs)
- [qemu-linux-kernel](https://github.com/g0hl1n/qemu-linux-kernel)
2. **详细教程**:
- [Writing Linux Kernel Drivers](https://linux-kernel-lab.sourceforge.net/)
- [QEMU Kernel Debugging](https://nickdesaulniers.github.io/blog/2018/10/24/booting-a-custom-linux-kernel-in-qemu-and-debugging-it-with-gdb/)
3. **视频教程**:
- [Linux Device Driver Development with QEMU](https://www.youtube.com/watch?v=3MnrKjpGt7k)
---
### 常见问题解决
1. **KVM加速失败**:
```bash
sudo modprobe kvm-intel # Intel CPU
sudo modprobe kvm-amd # AMD CPU
sudo adduser $USER kvm # 添加用户组权限
```
2. **文件系统无法挂载**:
检查`-append`参数中的`root=`路径是否正确,确认`initrd`镜像生成无误
3. **驱动加载失败**:
确保编译内核时已启用`CONFIG_MODULES=y`,使用`insmod`加载模块前执行`depmod -a`
建议结合`dmesg`命令实时查看内核日志,遇到具体问题可提供错误日志进一步分析! 🚀
阅读全文
相关推荐


















