Articles of kernel module

在设备驱动程序中使用stdlib.h

我试图写一个设备驱动程序,我需要在驱动程序中使用system()函数。 要使用system()我们需要包含<stdlib.h> ,这个dosnt似乎是从驱动程序中运行的。 它说没有find这样的文件或目录。 是否有替代stdlib.h设备驱动程序? 或system()的替代?

dynamic添加条目到sysctl

考虑这个代码: int procmon_state = 0; static struct ctl_table_header *procmon_table_header; static ctl_table state_table[] = { { .procname = "state", .mode = 0666, .proc_handler = &proc_dointvec_minmax, .data = &procmon_state, .maxlen = sizeof(int), .extra1 = "\x00\x00\x00\x00" /*0*/, .extra2 = "\x01\x00\x00\x00" /*1*/ }, { 0 } }; static ctl_table procmon_table[] = { { .procname = "procmon", .mode = 0555, […]

Linux内核模块/ IOCTL:不适用于设备的ioctl

我正在编写一个作为伪驱动程序的Linux内核模块(LKM) – 我无法弄清楚如何在LKM( wait.c )和用户级程序( user.c )之间进行IOCTL调用)。 设备驱动程序的幻数是0xBF – LKM不与物理块/字符设备通信,这只是一个练习。 从我所知道的情况来看,调用KERN_IOCTL_CREATE_EVENT的IOCTL格式不正确,幻数也不正确。 我尝试使用的IOCTL调用是: #include <sys/ioctl.h> #define KERN_IOCTL_CREATE_EVENT _IOWR(WAIT_DEVICE_MAGIC, 1, int) int main(){ int ret; int fd; fd = open("/dev/wait", 0); if(fd < 0){ return -1; } ret = ioctl(fd, KERN_IOCTL_CREATE_EVENT, 0); 错误: [fail]: KERN_IOCTL_CREATE_EVENT: Inappropriate ioctl for device 用户模式应用程序可以打开/closures指向设备的文件描述符: /dev/wait但case / switch语句不接受IOCTL调用。 有什么build议么? 这是# uname -a的输出 […]

为什么在Linux内核中循环繁忙的时候,进程被剥夺了太长的CPU?

乍一看,我的问题可能看起来有点微不足道。 请忍耐,完全阅读。 我在Linux内核模块中发现了一个繁忙的循环。 由于这个原因,其他进程(如sshd)在很长时间内(如20秒)没有获得CPU时间。 这是可以理解的,因为我的机器只有一个CPU,并且忙碌循环没有机会安排其他进程。 为了实验,我在忙循环中每次迭代之后都添加了schedule()。 尽pipe如此,这将使CPU保持忙碌状态,但应该让其他进程运行,因为我正在调用schedule()。 但是,这似乎并没有发生。 我的用户级别进程仍然持续很长时间(20秒)。 在这种情况下,内核线程得到了很好的值-5,用户级线程得到了很好的值0.即使用户级线程的优先级较低,我认为20秒太长而不能获得CPU。 有人可以解释为什么这可能发生? 注意:我知道如何彻底删除忙碌循环。 但是,我想在这里理解内核的行为。 内核版本是2.6.18,内核抢占被禁用。

加载内核模块时的未知符号

我需要帮助了解为什么当我插入模块时出现错误。 我试过这个没有成功。 $ sudo modprobe lpfc_scst FATAL: Error inserting lpfc_scst (/lib/modules/2.6.32-33-generic/extra/lpfc_scst.ko): Unknown symbol in module, or unknown parameter (see dmesg) $ dmesg | tail [ 1201.262842] lpfc_scst: Unknown symbol scst_register_target [ 1201.262949] lpfc_scst: Unknown symbol lpfc_tm_term [ 1201.263161] lpfc_scst: no symbol version for scst_register_session [ 1201.263164] lpfc_scst: Unknown symbol scst_register_session [ 1201.263284] lpfc_scst: no symbol […]

使用linux-kernel模块发送UDP数据包而不使用套接字

我正在编写一个创buildIP数据包的内核模块。 现在我想发送这个数据包,但是没有为它的传输创build任何套接字。 有没有什么办法直接发送它的内核例程的帮助。 因为我已经跟踪了用于数据包传输的linux内核代码,所以在net / core / dev.c中定义了一个名为dev_hard_start_xmit()的函数。 我们可以使用它吗? 其实我不想使用套接字。

Linux内核代码中的EXPORT_SYMBOL_GPL是什么?

Linux内核代码中的EXPORT_SYMBOL_GPL是什么? 下面是一段代码,其中包含EXPORT_SYMBOL_GPL 62 struct resource *platform_get_resource(struct platform_device *dev, 63 unsigned int type, unsigned int num) 64 { 65 int i; 66 67 for (i = 0; i < dev->num_resources; i++) { 68 struct resource *r = &dev->resource[i]; 69 70 if (type == resource_type(r) && num– == 0) 71 return r; 72 } 73 return NULL; […]