----------------------------------------------------------------------------------------------------------------------------
开发板 :NanoPC-T4
开发板eMMC
:16GB
LPDDR3
:4GB
显示屏 :15.6
英寸HDMI
接口显示屏u-boot
:2017.09
linux
:4.19
----------------------------------------------------------------------------------------------------------------------------
注意:本节介绍的内容基于《Rockchip RK3399 - linux-headers
制作》中移植的运行环境:内核版本4.19.193
以及debian 11
根文件系统。
一、安装usbmon
usbmon
即usb monitor
,是linux
内置的usb
抓包工具。usbmon
本质是一个内核模块,模块的位置:/lib/modules/4.19.193/kernel/drivers/usb/mon/usbmon.ko
。
想要启用usbmon
,必须挂载debugfs
并加载usbmon
模块。
1.1 挂载debugfs
文件系统
在开发板debian
执行如下命令,如果提示已经挂载,则下次抓包就无需运行该命令了,表示系统默认会挂载该文件系统。
root@SOM-RK3399v2:/# mount -t debugfs none /sys/kernel/debug
mount: /sys/kernel/debug: none_debugs already mounted or mount point busy.
如上所示, debian
系统默认已经挂载了debugfs
文件系统,无需再去手动挂载。
1.2 安装usbmon
模块
需要注意的是:如果你已经将usbmon
编译到内核中,就不需要安装了。
确认内核支持usbmon
模块
root@SOM-RK3399v2:/# ls /sys/module/usbmon
ls: cannot access '/sys/module/usbmon': No such file or directory
如上所示,目前内核不支持usbmon
模块,需要手动安装usbmon
模块。
执行如下命令安装usbmon
:
root@SOM-RK3399v2:/# modprobe usbmon
bash: modprobe: command not found
提示未找到命令则是因为/usr/sbin
(或者/sbin
)默认没有加到PATH
;通过修改profile
文件:
root@SOM-RK3399v2:/# vim /etc/profile
找到设置·PATH·的行,添加:
export PATH=/usr/sbin:$PATH
要想马上生效还要运行 source /etc/profile
不然只能在下次重进此用户时生效。
重新运行命令:
root@SOM-RK3399v2:/# modprobe usbmon
root@SOM-RK3399v2:/# ls /sys/module/usbmon
coresize holders initsize initstate notes refcnt sections srcversion taint uevent
这里的原理是,usbmon
是一个模块,使用modprobe
安装该模块后,该模块内部调用debugfs
相关的API
,这样在 /sys/kernel/debug/usb
目录下便形成了usbmon
这个目录。
查看/sys/kernel/debug/usb/usbmon
目录,
root@SOM-RK3399v2:/# ls /sys/kernel/debug/usb/usbmon
0s 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u 5s 5t 5u 6s 6t 6u
发现该目录下有以下内容:0s、0u、1s、1t、1u、2s、2t、2u等,其中1代表bus1
,2代表bus2
,0代表所有USB
总线。
1.2.1 开机自动加载模块
这里有一个问题,就是内核4.19.193
版本启动的时候为啥没有自动去加载/lib/modules/4.19.193/
目录下的驱动模块,如果我们想让系统能自动加载该目录下的驱动模块,我们应该怎么做?
(1) 使用命令depmod -a
depmod
命令用于分析可载入模块的相依性,-a
参数的作用是探测所有的模块,建立模块的依赖关系,更新/lib/modules/4.19.193/modules.dep
文件;
(2) 将模块设置为自动加载
在 /etc/modules
文件里面添加我们要加载的驱动名(一个驱动占一行);
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
usbmon
1.2.2 重启验证
上述操作完成后,重启系统,使用 lsmod
或 cat /proc/modules
、ls /sys/module/usbmon
命令查看驱动是否已经加载。
root@SOM-RK3399v2:/# lsmod
Module Size Used by
algif_hash 20480 1
algif_skcipher 16384 1
af_alg 24576 6 algif_hash,algif_skcipher
bnep 24576 2
hci_uart 61440 1
btbcm 16384 1 hci_uart
serdev 20480 1 hci_uart
hid_logitech_hidpp 36864 0
crct10dif_ce 16384 0
l2tp_ppp 24576 0
l2tp_netlink 24576 1 l2tp_ppp
l2tp_core