为 Linux 设备驱动程序设置开发环境

setting up a development environment for Linux device driver

我正在尝试阅读 Jonathan Corbet、Greg Kroah-Hartman、Alessandro Rubini 的 LDD 书并实现示例模块。因此,首先,我尝试建立一个开发系统。安装 Ubuntu 16.04 Xenial。现在,我刚刚创建了一个目录并使用 Makefile 编写了 hello_world 模块。构建并运行它,验证了 dmesg 日志。

这就是所有的开发设置吗?我在网上搜索并找到他们要求下载和编译内核的文章,使用 VM 来引导内核。是什么原因?或者我错过了什么?

有没有更好的文章阐明这一点?

谢谢 哈戈

这取决于你的目标。对于你的情况,你已经为你的计算机制作了一个内核驱动程序(它是 运行 Linux 内核)。 但是如果你想为另一个目标开发内核驱动程序,如 Rasberry Pi、ARM 板、X86-X64 板……你必须学会​​编译、编辑内核配置、引导内核映像……因为每个目标都有不同的内核版本。 您可以参考此培训了解更多详情:https://bootlin.com/training/embedded-linux/

您可以尝试另一种方法:

  1. 如果你有原生windows,安装虚拟机软件如 虚拟盒子。获得你最喜欢的 Linux 发行版(没有偏见,只是 一个例子 - Ubuntu) 并通过 Virtual box 安装它。

  2. 从kernel.org获取最新的内核(或您选择的)。

  3. 选择您要为其构建此内核的平台。例如 arm64 或 x86.

  4. 如果你没有真正的板子(例如 RPi for arm variant),你可以使用 qemu-arm64 或 qemu-x86 来 运行 你的编译内核。当用户没有开发板时,这也是一个不错的选择。

  5. 对于新手内核开发人员来说,使用 qemu 的另一个很好的用例是,即使他们编写了一些崩溃的模块,然后 qemu 实例崩溃了,所以没有伤害。

我认为对于开始学习内核编程并且还想尝试编写一些模块并且此时不打算购买硬件的人来说,使用 qemu 是一个不错的选择。