推荐使用以下发行版进行驱动开发: - Ubuntu LTS (长期支持版) - Fedora - CentOS Stream - Debian稳定版
# Ubuntu/Debian
sudo apt update && sudo apt install -y build-essential git make gcc libncurses-dev bison flex libssl-dev libelf-dev
# Fedora/CentOS/RHEL
sudo dnf groupinstall "Development Tools" && sudo dnf install -y kernel-devel ncurses-devel bison flex openssl-devel elfutils-libelf-devel
# 获取当前运行内核版本
uname -r
# 下载对应内核源码 (以5.15为例)
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.tar.xz
tar xvf linux-5.15.tar.xz
cd linux-5.15
make menuconfig
确保以下选项已启用:
Device Drivers --->
[*] Block devices --->
<M> RAM block device support
<M> Loopback device support
SCSI device support --->
<*> SCSI disk support
<*> SCSI generic support
[*] Multiple devices driver support (RAID and LVM) --->
<*> Device mapper support
<*> Crypt target support
<*> Snapshot target
<*> Mirror target
<*> Zero target
File systems --->
<*> Second extended fs support
<*> Ext3 journalling file system support
<*> The Extended 4 (ext4) filesystem
<*> Btrfs filesystem support
<*> XFS filesystem support
DOS/FAT/NT Filesystems --->
<*> MSDOS fs support
<*> VFAT (Windows-95) fs support
<*> NTFS file system support
<*> NTFS write support
make -j$(nproc)
sudo make modules_install
sudo make install
sudo apt install -y qemu qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
# Ubuntu/Debian
sudo apt install -y gdb crash systemtap strace ltrace
# Fedora/CentOS/RHEL
sudo dnf install -y gdb crash systemtap strace ltrace
# Ubuntu/Debian
sudo apt install -y linux-headers-$(uname -r)
# Fedora/CentOS/RHEL
sudo dnf install -y kernel-devel-$(uname -r)
# 常用工具
sudo apt install -y e2fsprogs xfsprogs btrfs-progs ntfs-3g dosfstools
# 调试工具
sudo apt install -y debugfs xfs_db btrfs-progs
sudo apt install -y libfuse-dev fuse
sudo apt install -y dmsetup lvm2
# 启用SCSI调试
echo "scsi_logging_level=0x1ffff" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# 块层调试
echo "1" | sudo tee /sys/block/sdX/queue/make_request_fault
# 创建自定义udev规则
sudo nano /etc/udev/rules.d/99-storage.rules
添加内容示例:
# 为特定设备设置权限
KERNEL=="sd*", SUBSYSTEM=="block", ATTRS{model}=="Your_Device_Model", MODE="0666"
# 为开发设备设置无超时
ACTION=="add", SUBSYSTEM=="scsi", ATTRS{model}=="Your_Device_Model", RUN+="/bin/sh -c 'echo 180 > /sys$DEVPATH/device/timeout'"
# 加载模块
sudo insmod your_module.ko
# 查看内核日志
dmesg | tail
# 卸载模块
sudo rmmod your_module
#include <linux/printk.h>
printk(KERN_INFO "Debug message: %s\n", variable);
# 配置内核调试符号
echo "add-auto-load-safe-path /path/to/linux-source" >> ~/.gdbinit
# 启动调试
gdb vmlinux /proc/kcore
# 简单示例:跟踪块设备请求
sudo stap -e 'probe kernel.function("blk_start_request") { printf("%s\n", ppfunc()) }'
模块版本不匹配:
sudo depmod -a
sudo modprobe your_module
缺少符号信息:
# 确保CONFIG_DEBUG_INFO=y在.config中
# 重新编译内核
权限问题:
# 将用户加入相关组
sudo usermod -aG disk,kvm,libvirt $USER
内核崩溃调试:
# 安装crash工具
crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/dumpfile
通过以上配置,您的Linux系统将具备完整的文件系统和存储设备驱动开发环境。根据具体开发需求,可能需要进一步调整内核配置或安装额外的开发工具包。