Makefile 如何";制造;修改驱动程序源代码后的现有Linux内核模块驱动程序
我对Linux USB Wi-Fi卡驱动程序做了一些小修改,以插入一些日志(Makefile 如何";制造;修改驱动程序源代码后的现有Linux内核模块驱动程序,makefile,kernel,Makefile,Kernel,我对Linux USB Wi-Fi卡驱动程序做了一些小修改,以插入一些日志(printk语句)。我大致遵循这一点,即我需要执行make,以构建.ko文件。工作目录(/usr/src/linux/drivers/net/wireless/rtl818x/rtl8187/)中存在一个现有的Makefile,其内容如下: rtl8187-objs := dev.o rtl8225.o leds.o rfkill.o obj-$(CONFIG_RTL8187) += rtl8187.
printk
语句)。我大致遵循这一点,即我需要执行make
,以构建.ko
文件。工作目录(/usr/src/linux/drivers/net/wireless/rtl818x/rtl8187/
)中存在一个现有的Makefile
,其内容如下:
rtl8187-objs := dev.o rtl8225.o leds.o rfkill.o
obj-$(CONFIG_RTL8187) += rtl8187.o
ccflags-y += -Idrivers/net/wireless/rtl818x
当我在这个目录中执行make
时,我得到:
make: *** No targets. Stop.
根据,这意味着“找到了一些makefile,但它不包含任何默认目标,并且在命令行中没有给出任何目标。在这些情况下,GNU make与此无关。”
所以我的问题是,在我尝试做的上下文中,这意味着什么?我如何生成下一步所需的.ko
文件?您必须从Linux源代码的顶部目录(/usr/src/Linux/)运行make。确保驱动程序包含在/usr/src/linux/.config文件中。因此,使用驱动程序构建内核。
如果您不想重建整个内核,请阅读更多:)
如果要重新构建目录中的所有模块:
make M=drivers/net/wireless/rtl818x/rtl8187/
make M=drivers/net/wireless/rtl818x/ CONFIG_RTL8187=m
如果要在目录中重新构建单个模块:
make M=drivers/net/wireless/rtl818x/rtl8187/
make M=drivers/net/wireless/rtl818x/ CONFIG_RTL8187=m
*CONFIG\u RTL8187*名称可在drivers/net/wireless/rtl818x/Kconfig(CONFIG\u+RTL8187)中找到
它还应该在以下方面起作用:
make drivers/net/wireless/rtl818x/rtl8187/rtl8187.ko
您的
make
ing目录不正确。转到一个目录,然后再次尝试make
。继续运行并make
ing,直到编译完成。因此,我在/usr/src/linux
目录中做了一次一次性make
,没有任何驱动程序修改。然后,我对驱动程序进行了修改(添加了一个printk
语句),并从/usr/src/linux/drivers/net/wireless//rtl818x/rtl8187/
目录中进行了make./rtl8187.ko
。第一次工作正常,但随后我对dev.c
进行了另一次修改,并再次尝试make./rtl8187.ko
,我得到了“make:Nothing to do to do for`/usr/src/linux/drivers/net/wireless/rtl818x/rtl8187/rtl8187.ko.”。有什么想法吗?始终从/usr/src/linux运行make
。如果您构建了整个内核,那么在下一个版本中,make只编译修改过的文件。无论如何,使用此make M=drivers/net/wireless/rtl818x/CONFIG\u RTL8187=M
编译单个模块。我刚刚测试了它,我发现了一些类似这样的错误:警告:“usb_unachor_urb”[drivers/net/wireless/rtl818x//rtl8187/rtl8187.ko]未定义!这是因为我没有编译所需的所有其他模块。所以,若您将遇到类似这样的错误,请确保编译所有请求的模块。