《Linux 设备驱动开发详解基于最新的 Linux 4.0 内核》附录 A VirtualBox Ubuntu 开发环境搭建参考宋宝华 著机械工业出版社2015年版A.1 开发环境概述A.1.1 为什么使用虚拟机对于 Linux 驱动开发初学者在 Windows 主机上使用虚拟机运行 Linux 是最便捷的入门方式开发环境选择对比 方案一直接安装 Linux双系统 优点性能最好与真实环境一致 缺点需要重启切换系统配置复杂 方案二VirtualBox Ubuntu推荐入门 优点 ✓ 无需重启Windows 和 Linux 同时运行 ✓ 快照功能可以随时回滚 ✓ 共享文件夹方便文件交换 ✓ 免费开源 缺点 ✗ 性能略低于原生系统 ✗ 不适合需要直接访问硬件的场景 方案三WSL2Windows Subsystem for Linux 优点与 Windows 深度集成性能好 缺点某些内核功能受限不适合内核开发 本附录选择VirtualBox Ubuntu 20.04 LTSA.1.2 所需软件和资源所需软件 1. VirtualBox 6.1虚拟机软件 下载地址https://www.virtualbox.org/wiki/Downloads 选择Windows hosts 版本 2. VirtualBox Extension Pack扩展包可选 提供 USB 3.0、RDP 等功能 与 VirtualBox 版本必须匹配 3. Ubuntu 20.04 LTS ISO 镜像 下载地址https://ubuntu.com/download/desktop 文件名ubuntu-20.04.x-desktop-amd64.iso 大小约 2.8GB 推荐配置 主机内存≥ 8GB虚拟机分配 4GB 主机磁盘≥ 50GB 可用空间虚拟机分配 40GB 主机 CPU支持虚拟化Intel VT-x 或 AMD-VA.2 安装 VirtualBoxA.2.1 下载 VirtualBox打开浏览器访问https://www.virtualbox.org/wiki/Downloads在VirtualBox platform packages下点击Windows hosts下载下载页面示意 ┌─────────────────────────────────────────────────────────────┐ │ VirtualBox 6.1.x platform packages │ │ │ │ • Windows hosts ← 点击此处下载 │ │ • OS X hosts │ │ • Linux distributions │ │ • Solaris hosts │ └─────────────────────────────────────────────────────────────┘A.2.2 安装 VirtualBox双击下载的VirtualBox-6.1.x-Win.exe安装文件按照安装向导操作安装步骤 步骤1欢迎界面 点击 [Next ] 步骤2选择安装组件 保持默认选择点击 [Next ] ┌─────────────────────────────────────────────────────────┐ │ ☑ VirtualBox Application │ │ ☑ VirtualBox USB Support │ │ ☑ VirtualBox Networking │ │ ☑ VirtualBox Python Support │ └─────────────────────────────────────────────────────────┘ 步骤3选择安装路径 默认C:\Program Files\Oracle\VirtualBox\ 点击 [Next ] 步骤4警告提示网络接口 提示安装过程中网络会短暂断开 点击 [Yes] 继续 步骤5准备安装 点击 [Install] 步骤6安装完成 ☑ Start Oracle VM VirtualBox after installation 点击 [Finish]A.2.3 启用 CPU 虚拟化如果 VirtualBox 提示 CPU 不支持虚拟化需要在 BIOS 中开启开启 CPU 虚拟化以 Intel 为例 1. 重启电脑按 Del/F2/F10 进入 BIOS 2. 找到 Advanced → CPU Configuration 3. 将 Intel Virtualization Technology 设置为 Enabled 4. 保存并退出F10 AMD CPU 找到 Advanced → CPU Configuration 将 SVM Mode 设置为 EnabledA.3 创建 Ubuntu 虚拟机A.3.1 新建虚拟机打开 VirtualBox点击新建New填写虚拟机基本信息新建虚拟机 - 步骤1名称和操作系统 ┌─────────────────────────────────────────────────────────────┐ │ 名称NameUbuntu-20.04-Driver-Dev │ │ 机器文件夹D:\VirtualBox VMs\建议放在空间大的磁盘 │ │ 类型TypeLinux │ │ 版本VersionUbuntu (64-bit) │ └─────────────────────────────────────────────────────────────┘ 点击 [下一步]设置内存大小新建虚拟机 - 步骤2内存大小 ┌─────────────────────────────────────────────────────────────┐ │ 内存大小Memory size │ │ ████████████████░░░░░░░░ 4096 MB │ │ │ │ 推荐4096 MB4GB │ │ 最低2048 MB2GB │ │ 主机内存 8GB 时分配 4GB 给虚拟机 │ └─────────────────────────────────────────────────────────────┘ 点击 [下一步]创建虚拟硬盘新建虚拟机 - 步骤3虚拟硬盘 ┌─────────────────────────────────────────────────────────────┐ │ ○ 不添加虚拟硬盘 │ │ ● 现在创建虚拟硬盘推荐 │ │ ○ 使用已有的虚拟硬盘文件 │ └─────────────────────────────────────────────────────────────┘ 点击 [创建] 虚拟硬盘文件类型 ● VDIVirtualBox 磁盘映像← 推荐 ○ VHD虚拟硬盘 ○ VMDK虚拟机磁盘 点击 [下一步] 存储在物理硬盘上 ○ 动态分配按需增长节省空间← 推荐 ● 固定大小性能更好 点击 [下一步] 文件位置和大小 位置D:\VirtualBox VMs\Ubuntu-20.04-Driver-Dev\Ubuntu-20.04-Driver-Dev.vdi 大小40.00 GB驱动开发建议 40GB 以上 点击 [创建]A.3.2 配置虚拟机创建完成后在 VirtualBox 主界面选中虚拟机点击设置Settings① 系统设置设置 → 系统System 处理器Processor选项卡 处理器数量2根据主机 CPU 核心数调整 ☑ 启用 PAE/NX ☑ 启用嵌套 VT-x/AMD-V如果可用 主板Motherboard选项卡 启动顺序 ☑ 软驱取消勾选 ☑ 光驱保持勾选用于安装系统 ☑ 硬盘保持勾选 ☑ 启用 EFI可选② 显示设置设置 → 显示Display 屏幕Screen选项卡 显存大小128 MB最大值 ☑ 启用 3D 加速可选 显示器数量1③ 存储设置加载 ISO设置 → 存储Storage 存储设备 控制器IDE └── 没有盘片点击光盘图标 → 选择虚拟光盘文件 → 浏览到 ubuntu-20.04.x-desktop-amd64.iso → 点击 [打开] 设置后显示 控制器IDE └── ubuntu-20.04.x-desktop-amd64.iso光驱④ 网络设置设置 → 网络Network 网卡1Adapter 1 ☑ 启用网络连接 连接方式网络地址转换NAT← 默认可以访问互联网 可选网卡2 ☑ 启用网络连接 连接方式仅主机Host-Only← 用于主机与虚拟机通信⑤ 共享文件夹设置设置 → 共享文件夹Shared Folders 点击右侧 [] 按钮添加共享文件夹 文件夹路径D:\LinuxDriver主机上的目录 文件夹名称LinuxDriver ☑ 自动挂载 挂载点/mnt/LinuxDriver ☑ 固定分配 注意需要安装 VirtualBox Guest Additions 后才能使用共享文件夹A.4 安装 Ubuntu 20.04A.4.1 启动安装在 VirtualBox 主界面选中虚拟机点击启动Start虚拟机从 ISO 启动出现 Ubuntu 安装界面Ubuntu 安装界面 ┌─────────────────────────────────────────────────────────────┐ │ │ │ ● Try Ubuntu试用不安装 │ │ ● Install Ubuntu安装 Ubuntu← 选择此项 │ │ │ └─────────────────────────────────────────────────────────────┘A.4.2 安装步骤安装步骤详解 步骤1选择语言 左侧列表选择 中文简体 点击 [安装 Ubuntu] 步骤2键盘布局 选择 Chinese → Chinese 点击 [继续] 步骤3更新和其他软件 ● 正常安装推荐 ☑ 安装 Ubuntu 时下载更新可选需要网络 ☑ 为图形或无线硬件以及其他媒体格式安装第三方软件推荐 点击 [继续] 步骤4安装类型 ● 清除整个磁盘并安装 Ubuntu虚拟机中安全 点击 [现在安装] 弹出确认对话框点击 [继续] 步骤5您在哪里 选择时区Shanghai上海 点击 [继续] 步骤6您是谁 您的姓名driver-dev或您的名字 您的计算机名ubuntu-driver 选择一个用户名driver或您的用户名 选择一个密码设置密码建议简单易记如 123456 确认您的密码重复密码 ● 登录时需要密码 点击 [继续] 步骤7等待安装完成 安装过程约需 1020 分钟 安装完成后点击 [现在重启] 提示移除安装介质时按 Enter 键A.4.3 首次启动配置Ubuntu 首次启动配置 1. 登录界面 输入安装时设置的密码按 Enter 2. 欢迎向导 点击 [跳过] 或按提示完成 3. 更新提示 建议先跳过安装完开发工具后再更新 4. 调整分辨率可选 右键桌面 → 显示设置 分辨率1920×1080 或 1280×800A.5 安装 VirtualBox Guest AdditionsGuest Additions 是 VirtualBox 提供的增强功能包安装后可以自动调整虚拟机分辨率使用共享文件夹双向复制粘贴无缝鼠标切换A.5.1 安装步骤# 步骤1在 VirtualBox 菜单中插入 Guest Additions CD# 虚拟机窗口菜单 → 设备Devices→ 安装增强功能Insert Guest Additions CD image# 步骤2在 Ubuntu 终端中安装依赖sudoapt-getupdatesudoapt-getinstall-ybuild-essential dkms linux-headers-$(uname-r)# 步骤3挂载并运行安装脚本sudomkdir-p/mnt/cdromsudomount/dev/cdrom /mnt/cdromcd/mnt/cdromsudo./VBoxLinuxAdditions.run# 步骤4重启虚拟机sudorebootA.5.2 验证安装# 验证 Guest Additions 是否安装成功lsmod|grepvbox# vboxsf 81920 1# vboxguest 327680 2 vboxsf# vboxvideo 20480 0# 验证共享文件夹ls/mnt/LinuxDriver/# 显示主机共享目录中的文件# 如果共享文件夹无法访问将用户添加到 vboxsf 组sudousermod-aGvboxsf$USER# 重新登录后生效A.6 配置 Ubuntu 开发环境A.6.1 更换国内软件源加速下载# 备份原始源文件sudocp/etc/apt/sources.list /etc/apt/sources.list.bak# 替换为阿里云源sudotee/etc/apt/sources.listEOF deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse EOF# 更新软件包列表sudoapt-getupdateA.6.2 安装基础开发工具# 安装编译工具链和常用工具sudoapt-getinstall-y\build-essential\# gcc、make、binutils 等git\# 版本控制vim\# 文本编辑器tree\# 目录树显示wget\# 文件下载curl\# HTTP 工具net-tools\# ifconfig 等网络工具openssh-server\# SSH 服务器用于远程连接python3\# Python 3python3-pip# pip 包管理器# 验证 gcc 版本gcc--version# gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0# 验证 make 版本make--version# GNU Make 4.2.1A.6.3 安装内核开发工具# 安装内核头文件用于编译内核模块sudoapt-getinstall-ylinux-headers-$(uname-r)# 验证内核头文件ls/lib/modules/$(uname-r)/build/# Kconfig Makefile arch block crypto drivers ...# 安装内核编译依赖sudoapt-getinstall-y\libncurses-dev\# make menuconfig 图形界面libssl-dev\# 内核签名libelf-dev\# ELF 格式支持flex\# 词法分析器bison\# 语法分析器bc\# 计算工具dwarves\# pahole 工具BTF 支持zstd# 压缩工具# 安装 ARM 交叉编译工具链sudoapt-getinstall-y\gcc-arm-linux-gnueabihf\# ARM 硬浮点工具链gcc-aarch64-linux-gnu# ARM64 工具链# 验证交叉编译工具链arm-linux-gnueabihf-gcc--version# arm-linux-gnueabihf-gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0# 安装设备树编译器sudoapt-getinstall-ydevice-tree-compiler# 验证 dtcdtc--version# Version: DTC 1.5.0A.6.4 安装调试工具# 安装调试和分析工具sudoapt-getinstall-y\gdb\# GNU 调试器gdb-multiarch\# 多架构 GDB用于交叉调试strace\# 系统调用跟踪ltrace\# 库函数调用跟踪valgrind\# 内存检测工具linux-tools-$(uname-r)\# perf 工具linux-tools-generic\# perf 通用版本trace-cmd\# ftrace 前端工具kernelshark\# ftrace 可视化工具mtd-utils\# MTD 工具Flash 操作i2c-tools\# I2C 工具evtest\# 输入设备测试usbutils\# USB 工具lsusbpciutils# PCI 工具lspci# 验证 perfperf--version# perf version 5.4.0# 验证 gdbgdb--version# GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2A.6.5 安装 QEMU 虚拟机# 安装 QEMU用于模拟 ARM 开发板sudoapt-getinstall-y\qemu-system-arm\# ARM 系统模拟qemu-system-aarch64\# ARM64 系统模拟qemu-user-static# 用户态 ARM 程序模拟# 验证 QEMUqemu-system-arm--version# QEMU emulator version 4.2.1 (Debian 1:4.2-3ubuntu6.24)A.6.6 配置 SSH 服务# 启动 SSH 服务sudosystemctl startsshsudosystemctlenablessh# 查看 SSH 状态sudosystemctl statusssh# ● ssh.service - OpenBSD Secure Shell server# Loaded: loaded (/lib/systemd/system/ssh.service; enabled)# Active: active (running)# 查看虚拟机 IP 地址ipaddr show# 2: enp0s3: BROADCAST,MULTICAST,UP,LOWER_UP# inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3# 在主机上通过 SSH 连接虚拟机需要配置端口转发# VirtualBox 设置 → 网络 → 高级 → 端口转发# 规则主机端口 2222 → 虚拟机端口 22# 然后在主机上ssh -p 2222 driver127.0.0.1A.7 获取 Linux 内核源码A.7.1 从 kernel.org 下载# 创建工作目录mkdir-p~/linux-driver-devcd~/linux-driver-dev# 方法一下载 Linux 4.0 源码包本书使用的版本wgethttps://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.0.tar.xztar-xflinux-4.0.tar.xzcdlinux-4.0# 方法二下载最新稳定版wgethttps://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.tar.xztar-xflinux-6.6.tar.xz# 方法三通过 Git 克隆推荐可以获取最新代码gitclone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.gitcdlinuxgitcheckout v4.0# 切换到 v4.0 版本# 查看内核版本head-5Makefile# VERSION 4# PATCHLEVEL 0# SUBLEVEL 0A.7.2 编译 x86 内核本机测试cd~/linux-driver-dev/linux-4.0# 使用默认配置makedefconfig# 或图形化配置makemenuconfig# 编译内核使用所有 CPU 核心make-j$(nproc)# 编译完成后的产物ls-lharch/x86/boot/bzImage# -rw-r--r-- 1 driver driver 7.8M Jun 21 10:00 arch/x86/boot/bzImagels-lhvmlinux# -rwxr-xr-x 1 driver driver 456M Jun 21 10:00 vmlinuxA.7.3 编译 ARM 内核交叉编译cd~/linux-driver-dev/linux-4.0# 设置交叉编译环境变量exportARCHarmexportCROSS_COMPILEarm-linux-gnueabihf-# 使用 Vexpress 开发板默认配置makevexpress_defconfig# 图形化配置可选makemenuconfig# 编译内核make-j$(nproc)zImage# 编译设备树makedtbs# 编译模块make-j$(nproc)modules# 查看编译结果ls-lharch/arm/boot/zImage# -rwxr-xr-x 1 driver driver 3.8M Jun 21 10:00 arch/arm/boot/zImagelsarch/arm/boot/dts/vexpress-v2p-ca9.dtb# arch/arm/boot/dts/vexpress-v2p-ca9.dtbA.8 编写并测试第一个内核模块A.8.1 创建模块源码# 创建模块目录mkdir-p~/linux-driver-dev/hello_modulecd~/linux-driver-dev/hello_module# 创建源文件cathello.cEOF #include linux/init.h #include linux/module.h #include linux/kernel.h static int __init hello_init(void) { printk(KERN_INFO Hello, Linux Driver World!\n); printk(KERN_INFO 内核版本%s\n, UTS_RELEASE); return 0; } static void __exit hello_exit(void) { printk(KERN_INFO Goodbye, Linux Driver World!\n); } module_init(hello_init); module_exit(hello_exit); MODULE_LICENSE(GPL v2); MODULE_AUTHOR(Linux Driver Developer); MODULE_DESCRIPTION(Hello World 内核模块); MODULE_VERSION(1.0); EOF# 创建 MakefilecatMakefileEOF KERNEL_DIR ? /lib/modules/$(shell uname -r)/build PWD : $(shell pwd) obj-m : hello.o all: $(MAKE) -C $(KERNEL_DIR) M$(PWD) modules clean: $(MAKE) -C $(KERNEL_DIR) M$(PWD) clean .PHONY: all clean EOFA.8.2 编译和测试模块# 编译模块make# make -C /lib/modules/5.4.0-xxx/build M/home/driver/linux-driver-dev/hello_module modules# Building modules, stage 2.# MODPOST 1 modules# CC [M] /home/driver/linux-driver-dev/hello_module/hello.ko# 查看生成的文件ls-la# -rw-r--r-- 1 driver driver xxx hello.c# -rw-r--r-- 1 driver driver xxx hello.ko ← 内核模块# -rw-r--r-- 1 driver driver xxx hello.mod.c# -rw-r--r-- 1 driver driver xxx hello.mod.o# -rw-r--r-- 1 driver driver xxx hello.o# -rw-r--r-- 1 driver driver xxx Makefile# -rw-r--r-- 1 driver driver xxx Module.symvers# -rw-r--r-- 1 driver driver xxx modules.order# 查看模块信息modinfo hello.ko# filename: /home/driver/linux-driver-dev/hello_module/hello.ko# version: 1.0# description: Hello World 内核模块# author: Linux Driver Developer# license: GPL v2# srcversion: XXXXXXXXXXXXXXXXXXXXXXX# depends:# retpoline: Y# name: hello# vermagic: 5.4.0-xxx SMP mod_unload# 加载模块sudoinsmod hello.ko# 查看内核日志dmesg|tail-5# [ 100.123] Hello, Linux Driver World!# [ 100.124] 内核版本5.4.0-xxx# 查看已加载模块lsmod|grephello# hello 16384 0# 卸载模块sudormmod hello# 再次查看日志dmesg|tail-3# [ 200.456] Goodbye, Linux Driver World!A.9 配置 VS Code 开发环境可选A.9.1 安装 VS Code# 下载并安装 VS Codewget-qO- https://packages.microsoft.com/keys/microsoft.asc|gpg--dearmorpackages.microsoft.gpgsudoinstall-oroot-groot-m644packages.microsoft.gpg /etc/apt/trusted.gpg.d/sudosh-cecho deb [archamd64,arm64,armhf signed-by/etc/apt/trusted.gpg.d/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main /etc/apt/sources.list.d/vscode.listsudoapt-getupdatesudoapt-getinstall-ycode# 启动 VS CodecodeA.9.2 安装推荐插件VS Code 推荐插件在扩展市场搜索安装 1. C/CMicrosoft 提供 C/C 语法高亮、智能补全、调试支持 2. C/C Extension PackMicrosoft C/C 扩展包包含多个有用工具 3. Kernel Snippets Linux 内核代码片段 4. GitLens Git 增强功能 5. Remote - SSHMicrosoft 通过 SSH 远程开发连接开发板 6. Hex EditorMicrosoft 十六进制文件查看器查看固件等二进制文件A.9.3 配置内核代码智能补全// 在项目根目录创建 .vscode/c_cpp_properties.json{configurations:[{name:Linux Kernel,includePath:[${workspaceFolder}/**,/lib/modules/${uname -r}/build/include,/lib/modules/${uname -r}/build/arch/x86/include,/usr/include],defines:[__KERNEL__,MODULE,KBUILD_MODNAME\my_driver\],compilerPath:/usr/bin/gcc,cStandard:gnu11,cppStandard:gnu14,intelliSenseMode:linux-gcc-x64}],version:4}A.10 常见问题与解决方法A.10.1 虚拟机性能优化性能优化建议 1. 增加处理器核心数 设置 → 系统 → 处理器 → 增加到 24 核 2. 启用嵌套虚拟化 设置 → 系统 → 处理器 → ☑ 启用嵌套 VT-x/AMD-V 3. 使用固态硬盘存储虚拟机文件 将虚拟机文件放在 SSD 上显著提升 I/O 性能 4. 增加显存 设置 → 显示 → 显存大小 → 128 MB 5. 禁用不需要的功能 设置 → 音频 → 取消 ☑ 启用音频如果不需要 设置 → USB → 取消 ☑ 启用 USB 控制器如果不需要A.10.2 常见错误解决# 错误1make menuconfig 报错 ncurses library not foundsudoapt-getinstall-ylibncurses-dev# 错误2编译内核模块时报错 No rule to make target# 确认内核头文件已安装sudoapt-getinstall-ylinux-headers-$(uname-r)# 错误3insmod 报错 Invalid module format# 模块编译时使用的内核版本与当前运行内核不匹配# 重新编译模块makecleanmake# 错误4insmod 报错 Operation not permitted# 需要 root 权限sudoinsmod hello.ko# 错误5虚拟机无法访问互联网# 检查网络设置设置 → 网络 → 连接方式NAT# 在虚拟机中测试ping 8.8.8.8# 错误6共享文件夹无法访问# 确认已安装 Guest Additions# 将用户添加到 vboxsf 组sudousermod-aGvboxsf$USER# 重新登录后生效# 错误7交叉编译工具链找不到# 检查是否安装whicharm-linux-gnueabihf-gcc# 如果没有输出重新安装sudoapt-getinstall-ygcc-arm-linux-gnueabihf# 错误8QEMU 启动内核失败# 检查内核镜像和设备树文件路径是否正确# 检查 QEMU 版本是否支持目标平台qemu-system-arm-Mhelp|grepvexpressA.10.3 快照管理VirtualBox 快照功能强烈推荐 创建快照 虚拟机菜单 → 机器Machine→ 拍摄快照Take Snapshot 名称Ubuntu-20.04-基础环境 描述安装完成配置好开发工具 建议在以下时机创建快照 ✓ Ubuntu 安装完成后 ✓ 安装完所有开发工具后 ✓ 开始重要实验前 ✓ 内核编译成功后 恢复快照 虚拟机菜单 → 机器 → 恢复快照 选择要恢复的快照点击 [恢复] 注意恢复快照会丢失快照后的所有更改A.11 开发环境验证清单# 完整验证脚本echo Linux 驱动开发环境验证 echoecho1. 系统信息uname-alsb_release-a2/dev/null|grepDescriptionechoecho2. 编译工具gcc--version|head-1make--version|head-1arm-linux-gnueabihf-gcc--version|head-1echoecho3. 内核头文件ls/lib/modules/$(uname-r)/build/Makefileecho✓ 内核头文件已安装||echo✗ 内核头文件未安装echoecho4. 调试工具whichgdbecho✓ gdb 已安装||echo✗ gdb 未安装whichstraceecho✓ strace 已安装||echo✗ strace 未安装whichperfecho✓ perf 已安装||echo✗ perf 未安装echoecho5. QEMUqemu-system-arm--version|head-1echoecho6. 设备树编译器dtc--versionechoecho7. Gitgit--versionechoecho 验证完成 预期输出 Linux 驱动开发环境验证 1. 系统信息 Linux ubuntu-driver 5.4.0-xxx-generic #xxx-Ubuntu SMP ... Description: Ubuntu 20.04.x LTS 2. 编译工具 gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 GNU Make 4.2.1 arm-linux-gnueabihf-gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 3. 内核头文件 ✓ 内核头文件已安装 4. 调试工具 ✓ gdb 已安装 ✓ strace 已安装 ✓ perf 已安装 5. QEMU QEMU emulator version 4.2.1 (Debian 1:4.2-3ubuntu6.24) 6. 设备树编译器 Version: DTC 1.5.0 7. Git git version 2.25.1 验证完成 附录 A 小结步骤内容关键命令/操作A.2安装 VirtualBox下载安装包按向导安装A.3创建虚拟机4GB 内存40GB 磁盘加载 Ubuntu ISOA.4安装 Ubuntu 20.04按安装向导操作设置用户名和密码A.5安装 Guest Additionssudo ./VBoxLinuxAdditions.runA.6配置开发环境sudo apt-get install build-essential gcc-arm-linux-gnueabihf ...A.7获取内核源码wget linux-4.0.tar.xz或git cloneA.8测试第一个模块make sudo insmod hello.ko dmesgA.9配置 VS Code安装 C/C 插件配置 includePathA.10常见问题解决参考错误解决方案开发环境搭建完成后的下一步环境搭建完成后建议按以下顺序学习 1. 阅读第1章理解 Linux 设备驱动的基本概念 2. 完成第4章编写并运行 Hello World 内核模块 3. 完成第6章实现 globalmem 字符设备驱动 4. 搭建 QEMU ARM 环境模拟嵌入式开发板 5. 逐章学习各类设备驱动 祝学习顺利参考文献宋宝华《Linux设备驱动开发详解基于最新的Linux 4.0内核》机械工业出版社2015年