Articles of 内核

Linux设备驱动程序3rd Ed和3.2内核

我知道3.2内核主要是一个渐进的步骤,但是我想为我正在开发的项目使用一些简单的设备驱动程序。 Linux设备驱动程序第三版(Corbet,Rubini和Kroah-Hartman,O'Reilly)中的信息仍然密切相关,或者在2.6和3.2之间有什么重大区别? 一般人对这本书有什么看法?

如何重命名内核模块名称,而不重命名传递给insmod的.ko。

我需要重命名已有驱动程序的内核模块(使用lsmod显示的名称),而不更改源文件的名称。 例如 # insmod xxx.ko <<module loads successfully>> # lsmod Module Size Used by Tainted: P xxx 191527 0 # 我想把xxx重命名为yyy 。 现在我知道更改驱动程序源文件的名称(当涉及单个文件时)会更改模块的名称。 但我不想更改源文件的名称。

Linux ISR入口点在哪里?

我想了解Linux内核中的系统调用接口和实现。 我知道关于entry.S和libc头文件和实现之间的关系。 我想知道的是内核中第一次接收到int 80h的地方,也就是决定实际上是80h中断的地方。 任何人都可以指向我的LXR链接吗?

为什么堆栈必须是页面alignment的?

在Linux中,我试过(只是为了好玩)在process.c中修改内核源代码。创build一个具有更多熵的堆栈地址,即: sp -= get_random_int() % 8192; 当我改变太多,内核停止或我得到一些看似不明确的行为。 我猜这会导致PAGE_ALIGN()以某种方式失败? 我并不关心为什么PAGE_ALIGN()特别是失败,或者说内核中的哪一段代码失败了(尽pipe这也是很好的事情)。 我更感兴趣的是为什么堆栈必须驻留在特定的区域。 这背后的build筑理由和动机是什么? 这与GDT / LDT如何在保护模式下工作有关系吗? 只是为了弄清楚我在问什么: 为什么堆栈的forms必须是0xbfXXXXXX(在32位上)? 为什么堆栈不能是例如0xaaXXXXXX或其他值?

如何在Linux上通过inode访问文件

有没有任何用户空间的API或第三方内核模块,可以帮助通过Linux上的inode访问文件? 我试图执行一些像这样的事情: int read_file_by_ino(int ino, int pos, int size, char* buf); int write_file_by_ino(int ino, int pos, int size, const char* buf); int readdir_by_ino(…); int stat_by_ino(…); … 该程序预计在root用户下运行,因此没有安全要求进行权限检查。 谢谢!

从核心土地写文件

我想从内核空间写入一个日志文件。 我可以创build,打开和closures文件(/var/log/my_kern_module.log),但如果我试图写入东西,我的模块崩溃…所以我知道从内核空间读/写文件是坏的,但我必须做它在这个模块中。 你有什么build议来帮助我吗? 谢谢 在这里你可以find在我的内核模块上执行写操作的代码。 它的代码运行到一个线程(kthread) mutex_lock(&gl_mtx_writelog); printk(KERN_EMERG "Readed : %s\n", buffer); fd = filp_open("/var/log/my_kern_module.log", O_CREAT | O_WRONLY | O_APPEND, S_IRWXU); if (!IS_ERR (fd)) { fs = get_fs(); set_fs(KERNEL_DS); do_sync_write(fd, buffer, readed, 0); set_fs(fs); filp_close(fd, NULL); } mutex_unlock(&gl_mtx_writelog); 所以,我试着使用fd-> f_op-> write(…),但模块崩溃了。 BUG: unable to handle kernel NULL pointer dereference at (null) IP: [<c10df83a>] do_sync_write+0x6a/0xe0 *pde […]

内核线程 – “kthreadd”

众所周知,kthreadd是一个内核线程,用于帮助其他人创build新的内核线程(查看kthread_create_list以查看是否需要创build任何新的内核线程)。 但我不明白为什么我们不使用create_kthread创build一个新的内核线程? 我没有看到任何差异kthreadd使。 请给我一些build议。 感谢您的帮助。

如何指定使用bitbake / yocto构build哪个内核

我正在使用yocto菊花来生成一个新的BSP。 当我build立我的形象时,我得到这些警告: NOTE: Resolving any missing task queue dependencies NOTE: multiple providers are available for virtual/kernel (my-kernel, linux-dummy) NOTE: consider defining a PREFERRED_PROVIDER entry to match virtual/kernel NOTE: multiple providers are available for runtime kernel-modules (my-kernel, linux-dummy) NOTE: consider defining a PREFERRED_PROVIDER entry to match kernel-modules 我无法理解如何定义内核的首选提供者。 从我读过的,我应该只需要将其添加到meta-myLayer / conf / machine / myMachine.conf我这样做: KERNEL_IMAGETYPE […]

进程nice(优先级)设置对Linux没有影响

我写了一个testing程序,其中只包含一个无限循环,里面有一些计算,不执行I / O操作。 我试着开始两个程序实例,一个具有很高的漂亮度值,另一个具有较低的漂亮度值: sudo nice -n 19 taskset 1 ./test sudo nice -n -20 taskset 1 ./test taskset命令确保两个程序在同一个内核上执行。 与我的预期相反,最重要的报告是这两个程序都能获得大约50%的计算时间。 这是为什么? nice命令是否有效?

我们可以在内核空间中调用系统调用吗?

有时,当我们在内核系统中调用系统调用时,我们调用它的帮助程序或相关的内核函数,而不是“系统调用”。 我仍然想知道我们可以在内核空间中调用系统调用吗? 如果不是的话,什么阻止我们这样做。 我的问题有点奇怪