我已经预编译了内核 3.16.7,其中包含 btusb v0.6 模块;我想用位于内核 4.0 中的 btusb v0.7 替换当前的 btusb v0.6;所以我的问题是如何:
编辑:
lsusb 输出:
Bus 001 Device 004: ID 04ca:2006 Lite-On Technology Corp.
Run Code Online (Sandbox Code Playgroud)
Broadcom 设备 04ca 是相当新的,所以这可能是主要问题;
据我所知,它需要 btusb 模块版本>=0.7;所以我确实需要某种模块替换,因为我当前的预编译内核有 btusb 0.6;我真的不想处理整个内核源代码编译,而是想将 btusb 本地集成到我已经预编译的内核 v3.16.7 中
编辑:
我的 $usb-devices 输出为:
T: Bus=01 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#= 11 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=04ca ProdID=2006 Rev=01.12 …Run Code Online (Sandbox Code Playgroud) 有没有一种巧妙的方法来剥离 Linux 内核以仅支持当前正在使用的设备。在 NVIDIA 抱怨 GCC 版本不匹配之后,我决定使用当前版本的 GCC 重新编译内核。现在,既然知道当前内核实际使用哪些模块,我可以自动生成一个.config为本机定制的文件吗?这样展位可以节省一些空间和时间。就像是
lsmod [options] | sed [a good regexp] > .config
Run Code Online (Sandbox Code Playgroud) 我在module-init目录中看到名为weak-modules*.
bash # ls /usr/lib/module-init-tools/weak-modules*
/usr/lib/module-init-tools/weak-modules /usr/lib/module-init-tools/weak-modules2
Run Code Online (Sandbox Code Playgroud)
到底是什么?以及什么时候使用它?我认为它是在初始化模块时使用的,因为它存在于module-init目录中。
我安装了 VirtualBox,在第一次运行时我收到了这个警告:
警告:未加载 vboxdrv 内核模块。当前内核 (3.10.0-327.4.4.el7.x86_64) 没有可用的模块或无法加载。请重新编译内核模块并通过 sudo /sbin/rcvboxdrv setup 安装
启动此命令后,我得到:
须藤/sbin/rcvboxdrv
设置错误的参数设置
我尝试了另一种方法,即以下命令:
/etc/init.d/vboxdrv 设置
bash: /etc/init.d/vboxdrv: 没有那个文件或目录
我尝试的最后一种方法:
/usr/lib/virtualbox/boxdrv.sh 设置
停止 VirtualBox 内核模块 [OK]
卸载旧的 VirtualBox DKMS 内核模块 [OK]
删除旧的 VirtualBox pci 内核模块 [OK]
删除旧的 VirtualBox netadp 内核模块 [OK]
删除旧的 VirtualBox netflt 内核模块 [OK]
删除旧的 VirtualBox 内核模块 [OK]
尝试使用 DKMSdepmod 注册 VirtualBox 内核模块:......一些警告......[确定]
启动 VirtualBox 内核模块 [失败]
我可以尝试什么?
有一个文件version.h在/usr/include/linux。许多头文件都包含此文件并defines在其中使用ifdefs.
但是,当我编译自己的内核时,我看不到这如何在 eg 中正确反映 version.h。
实际上这适用于所有与内核相关的头文件。AFAICS/usr/include/linux始终代表我的发行版附带的内核,而不是正在运行的内核,也不是我make通过SYSSRC.
过去,我求助于创建指向我自己的内核源代码的符号链接,但我觉得这不是正确的方法。
这应该如何工作?如何针对自定义内核进行编译(例如内核模块)?
一种方法是为某些协议创建侦听套接字,然后将加载该协议的模块。例如,DCCP 和 SCTP。
还有其他方法吗?
UPD:用例:AWS/Azure/ 中某处的虚拟机......攻击者获得了本地非特权用户 shell。非特权用户无法更改硬件。目前未加载的内核模块存在本地提权漏洞。他如何加载这个模块来使用它?
受最近 DCCP 协议内核模块中的漏洞启发的问题。
UPD2:根据 CVE-2017-2636,可以n_hdlc通过“为 tty 设备激活 HDLC”来加载内核模块(关于 CVE-2017-2636 的俄文文章)。所以还有其他方法,但没有人对这个问题感兴趣:(
这是在 Linux 操作系统上。
我发现在某些机器上,在过滤net.bridge.bridge-nf-call-iptables之前变量并不存在。我还看到有些机器加载了模块并且本身引入了这个变量。modprobebr_netfilterbridge
有没有办法知道我应该加载哪个模块才能获取特定变量?
所以我的新联想 ThinkPad 13 遇到了这个问题,它没有从暂停和休眠状态恢复。经过 2 天的故障排除后,我发现显然是一个名为 intel_lpss_pci 的模块导致了问题。当我禁用它时,一切正常。我也不确定它的用途是什么,因为没有它似乎一切都很好。
现在我的问题。如何永久禁用此模块?
我尝试了modprobe.blacklist=intel_lpss_pci似乎不起作用的内核参数,并且将其添加到/etc/modprobe.d/blacklist似乎也不起作用。
关于如何进行的任何想法?
我刚开始学习 netfilter 并且我正在尝试制作一个简单的 netfilter 模块,所有教程和 HOW TO 都使用nf_register_hook().
据我了解,该nf_register_hook()函数用于调用_nf_register_hook()进一步调用nf_register_net_hook()函数的函数,迭代net链表的每个成员,但后来我有点难以理解。
随着nf_register_hook()功能消失,我正在解决如何注册一个钩子。
该nf_register_net_hook()功能仍然存在,但我不确定它是如何工作的。
所以我的问题归结为,
如何在 4.13-rc1 以上的内核中注册 netfilter 钩子?
我在网上找到的关于在 Ubuntu 中添加或替换内核模块的大多数说明只提到modprobe和rmmod. 但是,根据我的经验e1000e,除非我update-initramfs -u之后再做,否则在重新启动后会恢复修改。的man页面update-initramfs没有提到模块。
那么,update-initramfs -u如果我想在重新启动后拥有修改后的内核,是否总是需要在更换内核模块后运行?
kernel-modules ×10
linux ×4
linux-kernel ×4
debian ×2
modprobe ×2
bluetooth ×1
centos ×1
compiling ×1
header-file ×1
kernel ×1
netfilter ×1
sysctl ×1
ubuntu ×1
virtualbox ×1