当前位置: 首页 > news >正文

《Linux 设备驱动开发详解:基于最新的 Linux 4.0 内核》 附录 A VirtualBox + Ubuntu 开发环境搭建

《Linux 设备驱动开发详解:基于最新的 Linux 4.0 内核》

附录 A VirtualBox + Ubuntu 开发环境搭建

参考:宋宝华 著,机械工业出版社,2015年版


A.1 开发环境概述

A.1.1 为什么使用虚拟机

对于 Linux 驱动开发初学者,在 Windows 主机上使用虚拟机运行 Linux 是最便捷的入门方式:

开发环境选择对比: 方案一:直接安装 Linux(双系统) 优点:性能最好,与真实环境一致 缺点:需要重启切换系统,配置复杂 方案二:VirtualBox + Ubuntu(推荐入门) 优点: ✓ 无需重启,Windows 和 Linux 同时运行 ✓ 快照功能,可以随时回滚 ✓ 共享文件夹,方便文件交换 ✓ 免费开源 缺点: ✗ 性能略低于原生系统 ✗ 不适合需要直接访问硬件的场景 方案三:WSL2(Windows Subsystem for Linux) 优点:与 Windows 深度集成,性能好 缺点:某些内核功能受限,不适合内核开发 本附录选择:VirtualBox + Ubuntu 20.04 LTS

A.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-V)

A.2 安装 VirtualBox

A.2.1 下载 VirtualBox

  1. 打开浏览器,访问https://www.virtualbox.org/wiki/Downloads

  2. VirtualBox platform packages下,点击Windows hosts下载

下载页面示意: ┌─────────────────────────────────────────────────────────────┐ │ VirtualBox 6.1.x platform packages │ │ │ │ • Windows hosts ← 点击此处下载 │ │ • OS X hosts │ │ • Linux distributions │ │ • Solaris hosts │ └─────────────────────────────────────────────────────────────┘

A.2.2 安装 VirtualBox

  1. 双击下载的VirtualBox-6.1.x-Win.exe安装文件

  2. 按照安装向导操作:

安装步骤: 步骤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 设置为 Enabled

A.3 创建 Ubuntu 虚拟机

A.3.1 新建虚拟机

  1. 打开 VirtualBox,点击新建(New)

  2. 填写虚拟机基本信息:

新建虚拟机 - 步骤1:名称和操作系统 ┌─────────────────────────────────────────────────────────────┐ │ 名称(Name):Ubuntu-20.04-Driver-Dev │ │ 机器文件夹:D:\VirtualBox VMs\(建议放在空间大的磁盘) │ │ 类型(Type):Linux │ │ 版本(Version):Ubuntu (64-bit) │ └─────────────────────────────────────────────────────────────┘ 点击 [下一步]
  1. 设置内存大小:
新建虚拟机 - 步骤2:内存大小 ┌─────────────────────────────────────────────────────────────┐ │ 内存大小(Memory size): │ │ ████████████████░░░░░░░░ 4096 MB │ │ │ │ 推荐:4096 MB(4GB) │ │ 最低:2048 MB(2GB) │ │ 主机内存 8GB 时,分配 4GB 给虚拟机 │ └─────────────────────────────────────────────────────────────┘ 点击 [下一步]
  1. 创建虚拟硬盘:
新建虚拟机 - 步骤3:虚拟硬盘 ┌─────────────────────────────────────────────────────────────┐ │ ○ 不添加虚拟硬盘 │ │ ● 现在创建虚拟硬盘(推荐) │ │ ○ 使用已有的虚拟硬盘文件 │ └─────────────────────────────────────────────────────────────┘ 点击 [创建] 虚拟硬盘文件类型: ● VDI(VirtualBox 磁盘映像)← 推荐 ○ 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) 网卡1(Adapter 1): ☑ 启用网络连接 连接方式:网络地址转换(NAT)← 默认,可以访问互联网 (可选)网卡2: ☑ 启用网络连接 连接方式:仅主机(Host-Only)← 用于主机与虚拟机通信

⑤ 共享文件夹设置

设置 → 共享文件夹(Shared Folders) 点击右侧 [+] 按钮添加共享文件夹: 文件夹路径:D:\LinuxDriver(主机上的目录) 文件夹名称:LinuxDriver ☑ 自动挂载 挂载点:/mnt/LinuxDriver ☑ 固定分配 注意:需要安装 VirtualBox Guest Additions 后才能使用共享文件夹

A.4 安装 Ubuntu 20.04

A.4.1 启动安装

  1. 在 VirtualBox 主界面,选中虚拟机,点击启动(Start)

  2. 虚拟机从 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:等待安装完成 安装过程约需 10~20 分钟 安装完成后点击 [现在重启] 提示移除安装介质时,按 Enter 键

A.4.3 首次启动配置

Ubuntu 首次启动配置: 1. 登录界面 输入安装时设置的密码,按 Enter 2. 欢迎向导 点击 [跳过] 或按提示完成 3. 更新提示 建议先跳过,安装完开发工具后再更新 4. 调整分辨率(可选) 右键桌面 → 显示设置 分辨率:1920×1080 或 1280×800

A.5 安装 VirtualBox Guest Additions

Guest 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:重启虚拟机sudoreboot

A.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.list<<'EOF' 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-getupdate

A.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.1

A.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.0

A.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 工具(lsusb)pciutils# PCI 工具(lspci)# 验证 perfperf--version# perf version 5.4.0# 验证 gdbgdb--version# GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2

A.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 driver@127.0.0.1

A.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 = 0

A.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 vmlinux

A.7.3 编译 ARM 内核(交叉编译)

cd~/linux-driver-dev/linux-4.0# 设置交叉编译环境变量exportARCH=armexportCROSS_COMPILE=arm-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.dtb

A.8 编写并测试第一个内核模块

A.8.1 创建模块源码

# 创建模块目录mkdir-p~/linux-driver-dev/hello_modulecd~/linux-driver-dev/hello_module# 创建源文件cat>hello.c<<'EOF' #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# 创建 Makefilecat>Makefile<<'EOF' 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 EOF

A.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--dearmor>packages.microsoft.gpgsudoinstall-oroot-groot-m644packages.microsoft.gpg /etc/apt/trusted.gpg.d/sudosh-c'echo "deb [arch=amd64,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.list'sudoapt-getupdatesudoapt-getinstall-ycode# 启动 VS Codecode

A.9.2 安装推荐插件

VS Code 推荐插件(在扩展市场搜索安装): 1. C/C++(Microsoft) 提供 C/C++ 语法高亮、智能补全、调试支持 2. C/C++ Extension Pack(Microsoft) C/C++ 扩展包,包含多个有用工具 3. Kernel Snippets Linux 内核代码片段 4. GitLens Git 增强功能 5. Remote - SSH(Microsoft) 通过 SSH 远程开发(连接开发板) 6. Hex Editor(Microsoft) 十六进制文件查看器(查看固件等二进制文件)

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":"gnu++14","intelliSenseMode":"linux-gcc-x64"}],"version":4}

A.10 常见问题与解决方法

A.10.1 虚拟机性能优化

性能优化建议: 1. 增加处理器核心数 设置 → 系统 → 处理器 → 增加到 2~4 核 2. 启用嵌套虚拟化 设置 → 系统 → 处理器 → ☑ 启用嵌套 VT-x/AMD-V 3. 使用固态硬盘存储虚拟机文件 将虚拟机文件放在 SSD 上,显著提升 I/O 性能 4. 增加显存 设置 → 显示 → 显存大小 → 128 MB 5. 禁用不需要的功能 设置 → 音频 → 取消 ☑ 启用音频(如果不需要) 设置 → USB → 取消 ☑ 启用 USB 控制器(如果不需要)

A.10.2 常见错误解决

# 错误1:make menuconfig 报错 "ncurses library not found"sudoapt-getinstall-ylibncurses-dev# 错误2:编译内核模块时报错 "No rule to make target"# 确认内核头文件已安装sudoapt-getinstall-ylinux-headers-$(uname-r)# 错误3:insmod 报错 "Invalid module format"# 模块编译时使用的内核版本与当前运行内核不匹配# 重新编译模块:makeclean&&make# 错误4:insmod 报错 "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# 错误8:QEMU 启动内核失败# 检查内核镜像和设备树文件路径是否正确# 检查 QEMU 版本是否支持目标平台qemu-system-arm-Mhelp|grepvexpress

A.10.3 快照管理

VirtualBox 快照功能(强烈推荐): 创建快照: 虚拟机菜单 → 机器(Machine)→ 拍摄快照(Take Snapshot) 名称:Ubuntu-20.04-基础环境 描述:安装完成,配置好开发工具 建议在以下时机创建快照: ✓ Ubuntu 安装完成后 ✓ 安装完所有开发工具后 ✓ 开始重要实验前 ✓ 内核编译成功后 恢复快照: 虚拟机菜单 → 机器 → 恢复快照 选择要恢复的快照,点击 [恢复] 注意:恢复快照会丢失快照后的所有更改!

A.11 开发环境验证清单

# 完整验证脚本echo"=== Linux 驱动开发环境验证 ==="echo""echo"1. 系统信息:"uname-alsb_release-a2>/dev/null|grepDescriptionecho""echo"2. 编译工具:"gcc--version|head-1make--version|head-1arm-linux-gnueabihf-gcc--version|head-1echo""echo"3. 内核头文件:"ls/lib/modules/$(uname-r)/build/Makefile&&echo"✓ 内核头文件已安装"||echo"✗ 内核头文件未安装"echo""echo"4. 调试工具:"whichgdb&&echo"✓ gdb 已安装"||echo"✗ gdb 未安装"whichstrace&&echo"✓ strace 已安装"||echo"✗ strace 未安装"whichperf&&echo"✓ perf 已安装"||echo"✗ perf 未安装"echo""echo"5. QEMU:"qemu-system-arm--version|head-1echo""echo"6. 设备树编译器:"dtc--versionecho""echo"7. Git:"git--versionecho""echo"=== 验证完成 ==="

预期输出

=== 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 ISO
A.4安装 Ubuntu 20.04按安装向导操作,设置用户名和密码
A.5安装 Guest Additionssudo ./VBoxLinuxAdditions.run
A.6配置开发环境sudo apt-get install build-essential gcc-arm-linux-gnueabihf ...
A.7获取内核源码wget linux-4.0.tar.xzgit clone
A.8测试第一个模块make && sudo insmod hello.ko && dmesg
A.9配置 VS Code安装 C/C++ 插件,配置 includePath
A.10常见问题解决参考错误解决方案

开发环境搭建完成后的下一步

环境搭建完成后,建议按以下顺序学习: 1. 阅读第1章:理解 Linux 设备驱动的基本概念 2. 完成第4章:编写并运行 Hello World 内核模块 3. 完成第6章:实现 globalmem 字符设备驱动 4. 搭建 QEMU ARM 环境:模拟嵌入式开发板 5. 逐章学习各类设备驱动 祝学习顺利!

参考文献:宋宝华《Linux设备驱动开发详解:基于最新的Linux 4.0内核》,机械工业出版社,2015年

http://www.jsqmd.com/news/1093599/

相关文章:

  • 2026年ASIC芯片爆发:云厂商与AI实验室发力,重塑半导体产业链!
  • 额度突降、请求被拒、会话中断——ChatGPT Plus限额异常诊断手册,含4步自查清单与实时监控脚本
  • intel下代CPU最高474瓦,电脑功耗真要干趴空调了
  • 【2026】MapGIS 6.7(地理信息系统)下载安装超详细教程(附安装包)
  • 别让 AI Agent 裸奔:Harness 到底是什么,为什么它决定了 AI 应用能不能上线?
  • 终极指南:如何让老旧Mac重获新生,免费升级到最新macOS系统
  • Iceberg HDP 文件监听与 Spark 任务自动提交模块设计文档
  • 一次遗留接口改造复盘:从长文档到测试清单的验证流程
  • 帮你理解golang与AI Agent
  • 日志收集分析
  • 给孩子选护眼台灯前,先看完这篇:10款主流型号真实差距拆解(含书客/霍尼韦尔/明基/松下/米家等),哪个牌子的护眼灯好用?一步到位选对灯!
  • 智能交通中的感知融合与协同控制
  • 创新实训博客1
  • Java毕设项目:基于 JavaWeb+MySQL 的油田物料综合管理系统 数字化油田物资调度管理系统的设计与实现 (源码+文档,讲解、调试运行,定制等)
  • 通芝科技复杂用工AI无感出勤 依托合规引擎解决制造业灵活用工合规痛点
  • nip.io介绍(把IP地址包装成域名的免费动态DNS服务)sslip.io、OAuth登录、Cookie Domain、HTTPS证书测试、访问集群访问、本地微服务开发
  • 终极指南:如何使用Tinke完整工具集进行NDS游戏文件编辑
  • 深入解析TSB83AA23:IEEE 1394b芯片架构、硬件设计与驱动开发实战
  • 关于美利坚的opus4.8max模型的权威破甲流程
  • 从 “特调媒体机” 事件拆解:性能优化与技术作弊的边界在哪?
  • 专业在线排计划工具落地应用指南
  • AI当「老板」:14位参赛选手多数亏损,Fable 5成最强「AI老板」
  • 百考通一次搞定查重高、AI概率高难题
  • 刷屏全网的蛋挞小姐姐 藏着科技最温柔的力量
  • Kubernetes StatefulSet 容器存储架构
  • 分享一个免费的 API 接口网站——摸鱼API
  • Docker部署Oracle 19c实战指南:从零到一键连接(含避坑详解)
  • 回流焊的工作原理及操作流程
  • 装错软件连不上PLC?主流品牌版本机型特点,收藏这篇不踩坑
  • 如何通过遥控器选型,将整机BOM成本降低15%?