在 Linux 下找 driver(驱动)源码,通常分几种场景:
下面按最常用的方式一步步说。
Linux 驱动源码都在内核源码树里,核心目录是:
drivers/
例如:
drivers/net/drivers/usb/drivers/gpu/drivers/input/drivers/i2c/drivers/spi/# Ubuntu / Debian
apt-get source linux-image-$(uname -r)
# Fedora
dnf download --source kernel
# Arch
pacman -S asp
asp checkout linux
git clone https://github.com/torvalds/linux.git
# 或
git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
lspci / lsusblspci -k
lsusb -v
示例输出:
Ethernet controller: Intel Corporation I211
Kernel driver in use: igb
→ 驱动名是 igb
→ 源码在:
drivers/net/ethernet/intel/igb/
/sys 找ls /sys/class/net/eth0/device/driver
或:
modinfo igb
会显示:
filename: /lib/modules/.../igb.ko
find drivers -name "igb*"
uname -r
然后:
ls /lib/modules/$(uname -r)/kernel/drivers/
这是 编译好的驱动(.ko 文件),不是源码。
如果是嵌入式 Linux:
arch/arm/boot/dts/
arch/arm64/boot/dts/
驱动 + DTS 配合使用。
常见位置:
xxx-linux-driver)rtl8821cu, mt7601u)示例:
github.com/torvalds/linux/tree/master/drivers/net/wireless
| 目的 | 做法 |
|---|---|
| 看所有驱动 | drivers/ |
| 找某设备驱动 | lspci -k / lsusb |
| 看驱动源码 | modinfo 驱动名 |
| 内核源码 | git clone linux |
| 嵌入式 | arch/*/boot/dts |
如果你愿意,可以告诉我:
我可以直接帮你 精确定位到源码文件。