草庐IT

linux - 如何从Linux内核空间获取用户名

我正在做一些Linux模块开发,限制我只能使用内核可用的库,我想获得与我的模块用户名交互的用户的用户名。又名他们的“whoami”。我的模块实际上环绕着系统调用...我可以从内核空间中的current->pid获取pid。有没有什么办法可以使用pid来追踪pid所属的用户?或者其他更简单的方法?谢谢 最佳答案 您可以使用filp_open从内核打开/etc/passwd文件的函数。接下来您需要使用file_operations读取文件:structfile*file=filp_open(...);file->f_op->read(f

linux - 内核线程 --- "kthreadd"

众所周知,kthreadd是一个内核线程,用来帮助别人创建新的内核线程(查看kthread_create_list,看是否有新的内核线程需要创建)。但是我不明白为什么我们不用create_kthread来创建一个新的内核线程?我看不出kthreadd有什么不同。你能给我一些建议吗?感谢您的大力帮助。 最佳答案 不是真的。kthreadd是在内核空间中运行的守护线程。原因是内核有时需要创建线程,但在内核中创建线程非常棘手。因此,kthreadd是一个线程,如果需要,内核使用它来生成新线程。该线程也可以访问用户空间地址空间,但不应这样做

linux - 是否有必要在每个二分步骤后清理 Linux 内核源代码树?

当将Linux内核源代码树平分为两个相对较远的树时提交,前几个平分步骤通常会改变很多内核源代码,所以无论makedistclean是否运行,都不会造成太大影响区别。但是,随着二分范围越来越窄,源文件越来越少每一步都会改变,所以清理源代码树会删除很多*.o不需要重建的文件。由于make通过比较它们来推断需要重建的目标文件最后修改它们的相关源文件的时间,我假设在每个平分步骤后没有必要清理树,但我这样做无论如何,在我遇到长时间的情况后,它是一种预防措施二分法最终让我陷入了一个无关紧要的“糟糕”提交有问题的错误。为了使其具体化,以下是我在第一次平分尝试中使用的步骤(这让我陷入了错误的提交):c

linux - 内核中的红黑树没有保护?

在Linux内核中,为了存储进程的内存区域,Linux同时使用链表和红黑树。find_vma是一个函数,它定位第一个内存区域,其vm_end字段大于通过红黑树传递的地址。但是,我发现find_vma()中的红黑树没有任何保护(如锁)。如果另一个线程调用rb_erase怎么办?函数同时删除树上的一些元素? 最佳答案 是的,find_vma函数调用受到保护,不会通过信号量进行并发访问。在调度程序中,函数也与信号量调用一起使用。2209down_read(&mm->mmap_sem);2210vma=find_vma(mm,start);

c - 如何在linux内核中选择 "sys'和 "proc"文件

据我所知,在Linux文件系统中,为了用户空间和内核空间之间的信息通信,使用了两种虚拟文件系统。1)Proc文件系统http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html2)sysfs文件系统https://en.wikipedia.org/wiki/Sysfs在linux内核代码中,我看到一些子系统使用proc文件来执行这样的用户空间-内核空间通信,而一些系统使用sysfs文件来实现同样的问题。所以我只想知道,如果我要编写新的linux内核模块或驱动程序,那么如何选择虚拟文件?什么时候应该使用sysfs什么时

linux - 准备加载内核

尽管有非常完整的引导装载程序可用,但我一直在业余时间断断续续地写一个,作为一种教育练习。我遇到了问题。我能够毫无问题地执行初始引导和链加载其他扇区。如果我正在编写自己的操作系统,我会很高兴。:)相反,我正在尝试引导Linux。我面临的挑战是双重的。我明白Ineedtoloadthekernel(Linux)intomemoryat0x100000.我知道我应该在内核的偏移量0x202处找到“HdrS”签名。我也知道起始地址应该在0x214。但是,当我跳转到该位置的地址时,它会停止。显然,围绕这个包装调试器非常困难。:)我是否遗漏了确定内核正确起始地址所必需的这一系列事实?我怀疑(1)的

linux - 无法将 python3 内核添加到 Jupyter

我想更改Jupyter中内核的路径,将其设置为我在机器中使用的路径。这是在jupyter中安装的原始内核:jupyterkernelspeclistAvailablekernels:python3/home/n/.local/share/jupyter/kernels/python3python2/usr/local/share/jupyter/kernels/python2然后我在我的机器上检查了python3的路径是这样的:whichpython3/usr/bin/python3$ipython内核规范列表我这样删除了python3的内核:jupyterkernelspecunin

linux - 内核构建 : how are the "torvalds" and "stable" repos related?

当谈到Kernel.org内核存储库时,有几个是最新的:linux/内核/git/stablelinux/内核/git/torvalds就各自的标签而言,这些似乎大多不相交。似乎除非我在前沿工作,否则我应该坚持克隆“稳定”(我当前的测试基于现有的稳定内核)。这是一个正确的假设吗?torvalds树实际上是stable的完整超集吗(虽然看起来不是,看一下标签)?如果不是,那么变化如何在两者之间来回传播? 最佳答案 是的,除非你正在研究最前沿的东西,否则你主要希望构建稳定。标签只是指向提交的指针——仅仅因为一个仓库有标签而另一个没有标签

linux - 调试 linux 内核 panic

我是内核调试的新手。下面是最后一条内核消息。据我了解,它正在尝试访问空指针。但我不明白为什么要关闭cup0。Unabletohandlekernelpagingrequestatvirtualaddress40025694[37655.473976]pgd=d7138000[37655.474007][40025694]*pgd=9ec1a831,*pte=bf2e659d,*ppte=00000000[37655.474038]Internalerror:Oops:17[#1]PREEMPTSMP[37655.474038]Moduleslinkedin:[37655.474068]

linux - 在 x86 ubuntu 上为 ARM 交叉编译 linux 内核模块

关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭9年前。Improvethisquestion我想在我的x86ubuntulinux上交叉编译一个ARM内核模块。我下载了内核源代码(linux2.6.26,因为目标ARM机器正在运行这个linux版本)。我apt-get'edarm交叉编译器。如您所见。root@declspec-desktop:/var/www/module_test#arm-linux-gnueabi-arm-linux-gnueabi-addr2linearm-li