重新编译一个内部模块

1.以usb-storage.ko模块为例。修改usb-storage.ko模块的源代码, 新增一条日志打印。

源码路径: kernel/linux-5.19/drivers/usb/storage/usb.c

2.重新编译该模块。在此命令中,是包含usb-storage.ko模块源码的drivers/usb/storage目录。此命令将构建所有在该目录中启用的内核模块,而不仅仅是usb-storage.ko。由于我们修改的代码属于usb-storage.ko,所以我们只需要加载生成的usb-storage.ko模块即可。

~/kernel/linux-5.19$ pwd
/home/meetabs/kernel/linux-5.19
~/kernel/linux-5.19$ make -C . M=drivers/usb/storage

# 可以看到生成了很多ko模块。
~/kernel/linux-5.19/drivers/usb/storage$ ll *.ko
-rw-rw-r-- 1 meetabs meetabs 439K 6月 4 14:48 uas.ko
-rw-rw-r-- 1 meetabs meetabs 392K 6月 4 14:48 ums-alauda.ko
-rw-rw-r-- 1 meetabs meetabs 315K 6月 4 14:48 ums-cypress.ko
-rw-rw-r-- 1 meetabs meetabs 331K 6月 4 14:48 ums-datafab.ko
-rw-rw-r-- 1 meetabs meetabs 409K 6月 4 14:48 ums-eneub6250.ko
-rw-rw-r-- 1 meetabs meetabs 297K 6月 4 14:48 ums-freecom.ko
-rw-rw-r-- 1 meetabs meetabs 360K 6月 4 14:48 ums-isd200.ko
-rw-rw-r-- 1 meetabs meetabs 320K 6月 4 14:48 ums-jumpshot.ko
-rw-rw-r-- 1 meetabs meetabs 296K 6月 4 14:48 ums-karma.ko
-rw-rw-r-- 1 meetabs meetabs 319K 6月 4 14:48 ums-onetouch.ko
-rw-rw-r-- 1 meetabs meetabs 351K 6月 4 14:48 ums-realtek.ko
-rw-rw-r-- 1 meetabs meetabs 399K 6月 4 14:48 ums-sddr09.ko
-rw-rw-r-- 1 meetabs meetabs 348K 6月 4 14:48 ums-sddr55.ko
-rw-rw-r-- 1 meetabs meetabs 382K 6月 4 14:48 ums-usbat.ko
-rw-rw-r-- 1 meetabs meetabs 2.2M 6月 4 14:48 usb-storage.ko

3.卸载原有usb-storage.ko,加载重新编译的usb-storage.ko。加载成功后,插拔一下U盘就可以看到在usb-storage.ko模块里面添加的日志信息。

meetabs@testing:~$ sudo modprobe -r uas
meetabs@testing:~$ sudo modprobe -r usb_storage

# 查看日志信息
meetabs@testing:~$ dmesg
[ 1375.323686] usbcore: registered new interface driver usb-storage
[ 1385.595336] uas: disagrees about version of symbol usb_stor_adjust_quirks
[ 1385.595341] uas: Unknown symbol usb_stor_adjust_quirks (err -22)
[ 1409.955361] usb 2-3: new SuperSpeed USB device number 3 using xhci_hcd
[ 1409.984471] usb 2-3: New USB device found, idVendor=0951, idProduct=1666, bcdDevice= 1.00
[ 1409.984477] usb 2-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1409.984479] usb 2-3: Product: DataTraveler 3.0
[ 1409.984481] usb 2-3: Manufacturer: Kingston
[ 1409.984503] usb 2-3: SerialNumber: 0019E06B588FBF10D7BE4C1B
[ 1409.987217] usb-storage 2-3:1.0: USB Mass Storage device detected
[ 1409.987233] usb-storage 2-3:1.0: [meetabs]hook it with print
[ 1409.988124] scsi host6: usb-storage 2-3:1.0
[ 1410.004717] uas: disagrees about version of symbol usb_stor_adjust_quirks
[ 1410.004721] uas: Unknown symbol usb_stor_adjust_quirks (err -22)