标签: linux-kernel

在Linux内核模块中使用timer_list会导致系统崩溃

我正在编写一个使用动态计时器的内核(2.6.28)模块.我正在使用timer_list结构,如下所示:

struct timer_list our_timer;
init_timer(&our_timer);
our_timer.function = handleFlowTimer;
our_timer.expires = jiffies + 2000;
our_timer.data = 0;
add_timer(&our_timer);

void handleFlowTimer(unsigned long data)
{
    //do nothing
}
Run Code Online (Sandbox Code Playgroud)

这可以正常工作约2秒,直到计时器到期.然后系统崩溃了.我也尝试过这样的结果:

struct timer_list our_timer = TIMER_INITIALIZER(handleFlowTimer, 0, 0);
mod_timer(&our_timer, jiffies + 2000);
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

c linux-kernel

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

安装Linux内核模块

我通常只在FreeBSD内核上工作,它有点不同.我开始制作和安装模块的阶段,但是你如何实际启动刚刚构建的内核?

linux-kernel

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

在VMWare Fusion下的RedHat Linux中引导时出现内核严重错误:找不到文件系统

这应该很简单.然而,它给了我地狱.

问题
我编译了最新的内核,当我重启我的盒子时,它会产生与文件系统相关的内核恐慌.

问题
如何让新内核识别VMWare文件系统?某些地方必须有一些设置让Linux安装知道"硬盘驱动器"不是真正的驱动器,而是实际上代表虚拟机的文件.

背景
首先,我不是Linux大师.这是我第一次编译内核.我为解决这个问题做了什么:

  • 从kernel.org下载内核版本2.6.34
  • 将源解压缩到目录中
  • 按照安装说明进行操作:
  • http://www.cyberciti.biz/tips/compiling-linux-kernel-26.html
  • 基本上,运行:make menuconfig,make,make modules,make modules_install,make install,reboot
  • 我没有真正改变make menuconfig部分中的任何内容

重启后,它失败并出现以下错误:

No volume groups found
Volume group "VolGroup00" not found
Unable to access resume device (/dev/VolGroup00/LogVol01)
mount: could not find filesystem '/dev/root'
setuproot: moving /dev failed: No such file or directory
setuproot: error mounting /proc: No such file or directory
setuproot: error mounting /sys: No such file or directory
switchroot: mount failed: No such file or directory
Kernel panic - not syncing: …
Run Code Online (Sandbox Code Playgroud)

linux kernel redhat linux-kernel vmware-fusion

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

如何从内核中记录应用程序的系统调用(包括相关参数)?

我想记录内核中应用程序调用的系统调用(包括参数).有人告诉我,我可以挂钩所有系统调用或钩住sysenter,但是,我不知道该怎么做.顺便说一句,我已经尝试了strace实用程序,但似乎strace为我提供了比我预期更多的系统调用.例如:我构建了一个只包含"open,lseek,read,write和close"系统调用的程序,用于简单的文件操作,但strace返回了更多的系统调用,例如"access,fstat64等",而不是那些以上.为什么?

c linux-kernel

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

内核如何不抢占并且仍然具有多个控制路径

在一个操作系统课程中,我花了一段时间才开始研究一个旧的,非抢占式的Linux内核(2.4.X).但是,我们被告知内核中可能同时存在多个控制路径.这与内核的非抢占性质相矛盾吗? 编辑:我的意思是,没有上下文切换内部的内核.上次我尝试提出这个问题时,得到了回答"好吧,Linux内核是先发制人的,所以没有问题".

linux-kernel

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

我的系统调用无法正常工作

我需要创建2个新的系统调用来设置并通过给定的pid从进程获取属性.我更改了task_struct,添加了int z_value(这是我需要设置/获取的)

我还设法为每个创建的进程设置默认的z_value(200).

当我运行get system call时,我可以看到默认的z_value正确.但是当我尝试设置z_value时没有任何反应.

没有编译错误,没有分段错误等.

这是我的系统调用.

#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/uaccess.h>

asmlinkage void sys_set_z_value ( int user_value , pid_t pid )
{


    rcu_read_lock();

    struct task_struct *p = find_task_by_vpid(pid);  

    p->z_value = user_value;

    rcu_read_unlock();
}
Run Code Online (Sandbox Code Playgroud)

c linux kernel system-calls linux-kernel

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

在Linux内核空间中存储struct数组

我相信我可能会过度思考这个问题......我的文件系统上有一个文本文件,我在启动时解析它并将结果存储到一个结构数组中.我需要将这个数组从用户空间复制到内核空间(copy_from_user),并且必须随时由内核访问这些数据.内核空间中的数据需要由Sockets.c文件访问.是否有一个特殊的地方可以在内核空间中存储数组,或者我可以简单地在Sockets.c中添加对该数组的引用?我的C有点生疏......

谢谢你的建议.

c linux kernel linux-kernel data-structures

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

所有系统调用都在内核模式下执行吗?

标题说明了一切:)。

但是,让我扩展一个具体案例。

到目前为止,我已经研究了所有需要与硬件进行交互的系统调用(例如 read()、write() 等),因此在执行这些系统调用(陷阱指令)之前切换到内核模式是有意义的。

据我了解,信号纯粹是软件构造,这意味着它们不是由硬件直接生成的(与中断不同)。我将它们理解为进程(内核-内核、内核-用户或用户-用户进程)之间的消息传递机制。

Kill是一个系统调用,用于向进程发送信号。它不直接与硬件交互。那么为什么我们需要昂贵地切换到内核模式来执行该系统调用呢?我还没有发现任何“特殊”系统调用在开始执行之前不会陷入内核模式的证据。因此,问题。

linux operating-system signals system-calls linux-kernel

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

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
查看次数

用户空间中的确切编程指令是什么?

我知道一个进程在用户态和内核态之间切换运行。我很困惑,对于每一行代码,我们都可能需要内核。下面是示例,我能否得到内核在执行以下代码行中的作用的解释。以下是否确实需要内核模式。

如果(a<0)a++

c operating-system kernel linux-kernel

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