标签: kernel-module

如何将 yocto rootfs 中的 galcore 内核模块列入黑名单

内核模块名称 galcore.ko 使我的 imx6slevk 板在启动时挂起。该文件的路径是: /lib/modules/4.9.88-imx_4.9.88_2.0.0_ga+g5e23f9d61147/extra/galcore.ko 手动删除此 .ko 文件并刷新 rootfs 板可以正常启动。我想修改 yyocto 源以防止自动加载此 .ko 文件。

我尝试过添加

PACKAGE_EXCLUDE = "imx-gpu-viv"
Run Code Online (Sandbox Code Playgroud)

并且

IMAGE_INSTALL_remove = "imx-gpu-viv"
Run Code Online (Sandbox Code Playgroud)

进入我的 fsl-image-validation-qt5.bb 文件,但它们都没有任何效果。

这是用于自动加载 galcore 的 bb 文件

inherit module
require recipes-kernel/linux/linux-imx-src.inc
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"

EXTRA_OEMAKE += "CONFIG_MXC_GPU_VIV=m"

KERNEL_MODULE_AUTOLOAD = ""
Run Code Online (Sandbox Code Playgroud)

如果我在上面的 OEMAKE 路径中给出“n”,我会收到一条错误消息:

ERROR: kernel-module-imx-gpu-viv-6.2.4.p1.2-r0 do_package: QA Issue: kernel-module-imx-gpu-viv: Files/directories were installed but not shipped in any package:
/lib
/lib/modules
/lib/modules/4.9.88-imx_4.9.88_2.0.0_ga+g5e23f9d61147
/lib/modules/4.9.88-imx_4.9.88_2.0.0_ga+g5e23f9d61147/extra
Please set FILES such that these items are packaged. Alternatively if they are unneeded, …
Run Code Online (Sandbox Code Playgroud)

blacklist kernel-module yocto imx6

1
推荐指数
1
解决办法
3266
查看次数

插入带有insmod的模块后没有输出到终端

我正在按照以下教程,尝试学习如何开发设备驱动程序,在第2章中,重点是开发一个工作模块并将其插入到内核中.我使用了以下代码(hello.c):

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
    printk(KERN_ALERT "Hello World!\n");
    return 0;
}

static void hello_exit(void)
{
    printk(KERN_ALERT "Goodbye, cruel world!\n");
}

module_init(hello_init);
module_exit(hello_exit);
Run Code Online (Sandbox Code Playgroud)

我的这是Makefile:

obj-m += hello.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Run Code Online (Sandbox Code Playgroud)

然后我在LXTerminal中运行以下命令:

brian@brian-desktop:~/driver_stuff/hello$ su
root@brian-desktop:/home/brian/driver_stuff/hello# make
make -C /lib/modules/2.6.32-21-generic/build M=/home/brian/driver_stuff/hello modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.32-21-generic'
Building modules, stage 2.
MODPOST 1 modules
make[1]: Leaving directory `/usr/src/linux-headers-2.6.32-21-generic'
root@brian-desktop:/home/brian/driver_stuff/hello# insmod ./hello.ko …
Run Code Online (Sandbox Code Playgroud)

c linux module kernel-module linux-kernel

0
推荐指数
1
解决办法
3999
查看次数

为什么导出的const值由另一个未在原始驱动程序中更新的驱

我在一个驱动程序中声明了一个静态const int变量并导出了该变量符号.在另一个驱动程序中我正在修改该变量.另一个驱动程序打印修改后的值,但原始驱动程序保留原始值.当两个驱动程序看到的变量的虚拟和物理地址都相同时,这怎么可能.这是一个内核bug吗?

[root@localhost bug]# uname -a
Linux localhost.localdomain 3.5.3 #3 SMP Mon Sep 3 21:52:12 IST 2012
i686 i686 i386 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

[root @ localhost bug] #cat driver.c

#include <linux/module.h>

static const int value = 123;

int init_module()
{
        printk("Base driver (init): value                     = %d\n", value);
        printk("Base driver (init): virtual address of value  = %p\n", (void *)&value);
        printk("Base driver (init): physical address of value = %p\n", (void
*)__pa(&value));
        return 0;
}

void cleanup_module()
{
        printk("Base driver (exit): value                     = %d\n", value); …
Run Code Online (Sandbox Code Playgroud)

c const kernel-module linux-kernel

0
推荐指数
1
解决办法
108
查看次数

我们怎么知道我们在旋转锁内?

我有一个由多个函数调用的函数.有些函数使用自旋锁定调用它,有些函数没有任何锁定.我怎么知道我的函数是否被保持螺旋锁调用?

我有一段时间写了一大段代码.它有一些函数可以使用和不使用不同代码路径的锁来调用.只考虑没有锁的情况,函数使用GFP_KERNEL标志分配skbs.使用spin_lock()调用时会导致问题.我需要处理这两种情况以避免在spin_lock中睡觉.

linux kernel-module linux-device-driver linux-kernel embedded-linux

0
推荐指数
1
解决办法
246
查看次数

SPIN_LOCK_UNLOCKED 的 Linux 3.16 等效项是什么?

这是我为 2.x 内核编写的内核模块中的一行。

static spinlock_t mr_lock = SPIN_LOCK_UNLOCKED;
Run Code Online (Sandbox Code Playgroud)

当我尝试为 3.16 内核编译此模块时,出现以下构建错误。

error: ‘SPIN_LOCK_UNLOCKED’ undeclared here (not in a function)
Run Code Online (Sandbox Code Playgroud)

当我查看linux/spinlock_types.h定义spinlock_t此内核类型的 3.16 版本时,确实不再有 SPIN_LOCK_UNLOCKED 常量。

但是,不清楚如何为该内核初始化自旋锁以解锁。

实现相同初始化的正确方法是什么?

c linux kernel-module linux-kernel

0
推荐指数
1
解决办法
4055
查看次数

printk的Linux内核模块错误:格式参数过多

我已经创建hello.cMakefile/home/coder/workspace/test_module目录中。我正在使用Arch Linux。我已经安装好了linux-headers

你好ç

#include <linux/init.h>
#include <linux/module.h>


static int hello_init(void){
    printk(KERN_ALERT, "hello, this is hello module");

    return 0;
}

static void hello_exit(void){
    printk(KERN_ALERT, "exiting the hello module");
}

module_init(hello_init);
module_exit(hello_exit);
Run Code Online (Sandbox Code Playgroud)

生成文件

obj-m=hello.o

KDIR = /usr/lib/modules/$(shell uname -r)/build

all :
        make -C $(KDIR) M=$(PWD) modules


clean :
        rm -rf *.o *.ko *.mod.* *.symvers *.order
Run Code Online (Sandbox Code Playgroud)

错误

[coder@coder test_module]$ make
make -C /usr/lib/modules/4.10.13-1-ARCH/build M=/home/coder/workspace/test_module modules
make[1]: Entering directory '/usr/lib/modules/4.10.13-1-ARCH/build'
  CC [M]  /home/coder/workspace/test_module/hello.o
In file included …
Run Code Online (Sandbox Code Playgroud)

c linux makefile kernel-module

0
推荐指数
1
解决办法
899
查看次数

如何从性能统计数据中解释 LLC-Load-Misses

我在这里发布了一个类似上下文的问题

在解决了一些问题后,我降低了抖动。

我将描述我的场景。

我的内核启动参数如下所示:

nmi_watchdog=0 intel_idle.max_cstate=0 processr.max_cstate=0 nohz_full=7-11 isolcpus=7-11 mce=off rcu_nocbs=7-11 nosoftlockup cpuidle.off=1 powersave=off nonmi_ipi nnwatchdog

我有一个内核模块,它负责以给定的时间间隔发送一些数据包(这里我每 1 毫秒发送一次)。

  • 我有一个固定在 CPU 9 上的数据包生成器
  • 我有一个内核模块(或 Kthread)固定到 CPU 8
  • 我已将 rx 队列的 IRQ 关联设置为 CPU 10

因此,我执行了以下命令来获取性能统计信息

sudo ./perf stat -a -d -I 1000 --cpu=8 taskset -c 9 ./test.sh

下面,我发布了我得到的输出的摘录。从上面的命令,我试图分析我的 CPU Core 8 的事件。

因此,通过这种方式,这些组件不应相互干扰。

     5.002780500        1000.296809      cpu-clock (msec)          #    1.000 CPUs utilized
     5.002780500                  0      context-switches          #    0.000 K/sec
     5.002780500                  0      cpu-migrations            #    0.000 K/sec
     5.002780500                  0      page-faults               #    0.000 …
Run Code Online (Sandbox Code Playgroud)

kernel-module linux-kernel perf

0
推荐指数
1
解决办法
4421
查看次数

真正的软件在 Linux 和其他操作系统上是否有内核模块

我想问:Linux 上的 Apache Webserver 之类的应用程序,Wireshark 之类的应用程序,以及网络工具之类的软件以及其他必须与网络连接一起工作的现实世界应用程序,它们是否需要内核模块,如果不需要,那么它在多大程度上是正常的实践应用程序确实具有内核模块。就像当我安装一些应用程序然后内核模块安装它一样。我知道当我从 Windows 启用 IIS 服务器时,会启用特定的内核模块来执行 IIS 工作。(不知道为什么那个操作系统没有实现原始套接字 api 以便开发人员可以使用)

我的问题:前段时间我试图使用原始套接字制作 tcp 服务器,但发现这并不容易,因为内核会做各种各样的事情(如果我错了,请纠正我)

检查欺骗数据包

在数据包中添加自己的标头信息

所以我要制作一个在内核中执行以下操作的应用程序

  1. 配置NIC卡如读卡寄存器和报告
  2. 关闭网络接口
  3. 启动网络接口
  4. 从 DMA RX 读取数据包并报告接收到的平均数据包数以检测 DOS 攻击,如果检测到 DOS,则关闭特定接口/如数据包的报告计数器

应用程序将仅充当命令控制器。喜欢用户可以使用应用程序进行上述 4 点中指定的更改。

所以我想问你,如果有人喜欢在应用程序中选择嵌入式内核模块,为什么应用程序有一个内核模块是一种常见的做法,为什么这是一个重新选择的选项,

以上内容仅供学习使用。

c linux kernel-module

0
推荐指数
1
解决办法
56
查看次数

mod-&gt;init什么时候被赋值

当Linux内核使用insmod加载新模块时,它将调用

finit_module
  do_init_module
    do_one_initcall
Run Code Online (Sandbox Code Playgroud)

然后将调用模块中定义的 init 函数。

finit_module
  do_init_module
    do_one_initcall
Run Code Online (Sandbox Code Playgroud)

但是在搜索了linux内核的所有代码后,我没有找到mod->init分配的地方,有人可以帮助我吗?

提前致谢。

c linux kernel-module linux-kernel

0
推荐指数
1
解决办法
358
查看次数

CentOS 7:VirtualBox抱怨内核模块未加载

背景

我在macOS上使用VirtualBox 创建了一个沙箱 VM。它可以正确启动我可以访问的VM(运行了CentOS7)。

在此沙盒虚拟机内部,我想启动几个虚拟机,以便使用Kitchen CI&Vagrant测试Ansible Playbook,因此我通过从以下链接下载VirtualBox来安装VirtualBox:https://download.virtualbox.org/virtualbox/5.2 。 8 / VirtualBox-5.2-5.2.8_121009_el7-1.x86_64.rpm

安装后,我执行了以下命令:

[david@vmkitchen-env ansible-test]# VBoxManage --version

它返回:

WARNING: The vboxdrv kernel module is not loaded. Either there is no module
         available for the current kernel (3.10.0-693.2.1.el7.x86_64) or it 
         failed to load. Please recompile the kernel module and install it 
         by
           sudo /sbin/vboxconfig

         You will not be able to start VMs until this problem is fixed.
5.2.8r121009
Run Code Online (Sandbox Code Playgroud)

我安装了开发工具,但仍然遇到相同的问题。

我认为我不需要重新编译任何内核模块。任何的想法?

在此先感谢您的帮助。

virtualbox kernel-module centos7

-1
推荐指数
1
解决办法
9461
查看次数

如何在内核程序中使用copy_to_user()?

我尝试copy_to_user()在循环中使用.

for_each_process(p) {
    copy_to_user(buf, "data of p", len);
}
Run Code Online (Sandbox Code Playgroud)

但是,我得到的输出是不同的.它只有用户空间中的最后一行数据,例如

#Data expected to copy to user space

123 1234 12 21
1243 124 423 12
1234 422 42 423

#Current Output:
1234 422 42 423
Run Code Online (Sandbox Code Playgroud)

如何从内核空间将每一行复制到用户空间?

c kernel-module linux-kernel userspace

-5
推荐指数
1
解决办法
515
查看次数