草庐IT

linux - 内核态抢占

我了解新的Linux内核允许内核空间线程被抢占。有人可以简要解释一下在内核模式下执行时抢占是如何工作的吗?因此,当进行系统调用时,软件中断会将线程切换到内核模式并运行必要的线程。现在,假设它的时间片已到-另一个用户线程正在运行,它也想在内核空间中执行。(或者它可能是一个硬件中断)。内核在中断时如何保持它为T1修改的任何结构的完整性? 最佳答案 Linux内核保护其数据结构的方式与在多线程环境中运行的任何事物相同。它可能会使用一些sortoflock保护必须以原子方式访问的数据结构。通常,这些包括自旋锁、互斥锁和信号量。还有一些函数d

c - 如何从 shell 触发内核模块?

我正在使用Ubuntu和VirtualBox。我正在为我的shell定义一个新命令来输出子进程的一些特征(如兄弟树等)。为了输出这些特性,我创建了一个内核模块并使用了task_struct。我还在我的shell之外测试了我的内核模块并且它可以工作。现在我的问题是如何在我的shell中触发这个内核模块(用C代码)以便加载我的内核模块?我搜索了一下,发现需要用到modprobe或insmod之类的系统调用,但不明白怎么用。我尝试了下面的代码,但没有用:setuid(0);system("/sbin/insmod/.../mymodule.ko");感谢您的帮助。

c - 如何从 shell 触发内核模块?

我正在使用Ubuntu和VirtualBox。我正在为我的shell定义一个新命令来输出子进程的一些特征(如兄弟树等)。为了输出这些特性,我创建了一个内核模块并使用了task_struct。我还在我的shell之外测试了我的内核模块并且它可以工作。现在我的问题是如何在我的shell中触发这个内核模块(用C代码)以便加载我的内核模块?我搜索了一下,发现需要用到modprobe或insmod之类的系统调用,但不明白怎么用。我尝试了下面的代码,但没有用:setuid(0);system("/sbin/insmod/.../mymodule.ko");感谢您的帮助。

linux - SIGSTOP 在 Linux 内核中是如何工作的?

我想知道SIGSTOP在Linux内核中是如何工作的。它是如何处理的?以及内核如何在处理时停止运行?我熟悉内核代码库。所以,如果你能引用内核函数就好了,事实上这就是我想要的。我不是在从用户的角度寻找高级描述。我已经用printk()语句调试了get_signal_to_deliver()(现在正在编译)。但我希望有人能更详细地解释事情。 最佳答案 自从我接触内核以来已经有一段时间了,但我会尽量提供尽可能多的细节。我不得不在其他不同的地方查找其中的一些内容,所以一些细节可能有点困惑,但我认为这很好地说明了幕后发生的事情。当发出信号时,

linux - SIGSTOP 在 Linux 内核中是如何工作的?

我想知道SIGSTOP在Linux内核中是如何工作的。它是如何处理的?以及内核如何在处理时停止运行?我熟悉内核代码库。所以,如果你能引用内核函数就好了,事实上这就是我想要的。我不是在从用户的角度寻找高级描述。我已经用printk()语句调试了get_signal_to_deliver()(现在正在编译)。但我希望有人能更详细地解释事情。 最佳答案 自从我接触内核以来已经有一段时间了,但我会尽量提供尽可能多的细节。我不得不在其他不同的地方查找其中的一些内容,所以一些细节可能有点困惑,但我认为这很好地说明了幕后发生的事情。当发出信号时,

linux - 从压缩的内核镜像中获取内核版本

我正在编写shell脚本。我有一个预建的zImage。是否可以知道创建此zImage的内核版本?我已经尝试使用更新的命令@Gettingunameinformationfromacompressedkernelimage,但两个命令都失败了。$ddif=zImagebs=1skip=$(LC_ALL=Cgrep-a-b-o$'\x1f\x8b\x08\x00\x00\x00\x00\x00'zImage|\cut-d':'-f1)|zcat|grep-a'Linuxversion'dd:unrecognizedoperand`3165585'Try`dd--help'formorein

linux - 从压缩的内核镜像中获取内核版本

我正在编写shell脚本。我有一个预建的zImage。是否可以知道创建此zImage的内核版本?我已经尝试使用更新的命令@Gettingunameinformationfromacompressedkernelimage,但两个命令都失败了。$ddif=zImagebs=1skip=$(LC_ALL=Cgrep-a-b-o$'\x1f\x8b\x08\x00\x00\x00\x00\x00'zImage|\cut-d':'-f1)|zcat|grep-a'Linuxversion'dd:unrecognizedoperand`3165585'Try`dd--help'formorein

Linux 内核 : What process does schedule() run in?

当您在进程X中调用诸如fork之类的系统调用时,内核被认为是在进程上下文中执行。那么,fork可以说是在进程X中运行,对吧?但是如果schedule()在同一个进程中被调用(并且它不是sys调用),你会说它作为X的一部分运行吗?或者它是否在swapper进程中运行?还是考虑到内核的整体性,这听起来很荒谬? 最佳答案 schedule()始终在进程上下文中运行。它的特殊之处在于它可以更改哪个进程上下文是当前的——但它总是有一个进程上下文。在调用context_switch()之前,它在要换出的进程的上下文中运行,在它运行之后在换入的进

Linux 内核 : What process does schedule() run in?

当您在进程X中调用诸如fork之类的系统调用时,内核被认为是在进程上下文中执行。那么,fork可以说是在进程X中运行,对吧?但是如果schedule()在同一个进程中被调用(并且它不是sys调用),你会说它作为X的一部分运行吗?或者它是否在swapper进程中运行?还是考虑到内核的整体性,这听起来很荒谬? 最佳答案 schedule()始终在进程上下文中运行。它的特殊之处在于它可以更改哪个进程上下文是当前的——但它总是有一个进程上下文。在调用context_switch()之前,它在要换出的进程的上下文中运行,在它运行之后在换入的进

linux - 如何为 Linux 内核开发做出贡献?使用最新的源代码?

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭7年前。Improvethisquestion我喜欢Linux,对它的内核开发很感兴趣。但是我对这个过程有一些困惑。最大的困惑是我是否需要下载最新的内核源代码(例如linux-next树或staging树)并使其在我的目标机器上运行?我担心的是,如果这样做,很可能由于代码不成熟而使我的目标机器死机。这样做并不容易,对吧?但如果不这样做,我怎么能找到最新源代码的错误呢?或者如何进一步发展?我的目标机器是基于ARM的,例如BeagleBoard或电话。谢