linux-kernel相关内容
我读到 Mac OS X 和 bsd 是相关的.他们的关系有多密切.可以在 BSD 上调整和安装 Mac OS X 软件吗? 解决方案 回到 OS X 10.4 的时代,我花了一些时间未能为 OS X 编写 VFS.在那些日子里,内核的主要子系统,只有网络堆栈和 VFS 仍然是真正的 BSD.当时,甚至 VFS 也被部分重写以使其更加模块化(所有 BSD VFS 数据结构都变成了不透明的指
..
我正在尝试了解链表和哈希表的 Linux 内核实现.实现的链接是这里.我理解链表实现.但是我对为什么在 hlist (**pprev) 中使用双指针有点困惑.hlist 的链接是这里.我知道 hlist 用于哈希表的实现,因为列表的头部只需要一个指针,它节省了空间.为什么不能使用单指针来完成(就像链表一样 *prev)?请帮帮我. 解决方案 原因可以在评论之一中找到: 547/*548
..
在 Qt creator 中调试 C++ 代码时出现以下错误 ptrace:不允许操作.无法附加到进程.确保没有其他调试器跟踪此过程.检查设置/proc/sys/kernel/yama/ptrace_scope有关更多详细信息,请参阅/etc/sysctl.d/10-ptrace.conf 这里找到了一个临时解决方案:尝试调试时收到错误在 QtProject 中 临时解决方案(重启后无效
..
我曾尝试测量 NUMA 的非对称内存访问效果,但失败了. 实验 在 Intel Xeon X5570 @ 2.93GHz、2 个 CPU、8 个内核上执行. 在固定到核心 0 的线程上,我使用 numa_alloc_local 在核心 0 的 NUMA 节点上分配了一个大小为 10,000,000 字节的数组 x.然后我遍历数组 x 50 次并读取和写入数组中的每个字节.测量执行
..
Linux 编程接口在第 3 章中有一个练习是这样的: 当使用 Linux 特定的 reboot()重新启动系统的系统调用,第二个参数,magic2,必须是指定为一组魔法之一数字(例如,LINUX_REBOOT_MAGIC2).这些有什么意义数字?(将它们转换为十六进制提供了线索.) 手册页告诉我们 magic2 可以是 LINUX_REBOOT_MAGIC2 (672274793)、
..
我无法理解 linux 中的内存映射页面和匿名页面.有人可以用一个例子来解释它吗?与它们相关的内核数据结构是什么? 解决方案 正确的术语是内存映射文件和匿名映射.当提到内存映射时,通常指的是 mmap(2).使用 mmap 有 2 个类别.一类是共享映射与私有映射.另一个类别是文件与匿名映射.混合在一起,您将获得以下 4 种组合: 私人文件映射 共享文件映射 私人匿名映射 共享
..
我试图了解 linux 内核中的调度过程实际上是如何工作的.我的问题不是关于调度算法.它是关于函数 schedule() 和 switch_to() 是如何工作的. 我会试着解释一下.我看到了: 当进程用完时间片时,标志 need_resched 由 scheduler_tick() 设置.内核检查标志,看到它已设置,并调用 schedule()(与问题 1 相关)切换到新进程.这个标
..
在 SMP 机器上,我们必须使用中断上下文中的 spin_lock_irqsave 而不是 spin_lock_irq. 为什么我们要保存标志(包含 IF)? 还有其他中断例程可以打断我们吗? 解决方案 如果在您的代码开始锁定之前已经禁用了中断,则当您调用 spin_unlock_irq 时,您将在可能不需要的情况下强制重新启用中断方式.相反,如果您还通过 spin_lock_
..
我正在尝试配置 ARP 年龄超时.我想我应该将 /proc/sys/net/ipv4/neigh/default/base_reachable_time_ms 设置为所需的超时时间.但是,尽管我将其设置为 30000 毫秒(30 秒),但仍需要将近 10 分钟的时间才能将条目从 ARP 缓存中删除.在阅读了几篇文章后,我发现还有一些影响超时的设置: /proc/sys/net/ipv4/neig
..
我想详细了解 nl80211 和 cfg80211 的工作原理.函数流,nl80211 如何与wpa_supplicant、iw 等网络工具交互. 请给我推荐一些有用的链接或书籍以供参考. 解决方案 为了能够从用户空间控制无线驱动程序,使用了内核和用户空间之间的一些 IPC 通信进程. 最初使用了带有供应商相关 API 的 ioctl. 1996 年,Jean Tourril
..
我想在我的 gem5 模拟器中调整缓存大小,看看它如何影响程序的性能,并可能在运行时调整程序. 作为健全性检查,我尝试检查我使用的命令行参数是否有效,因此我尝试了以下建议的各种方法:https://superuser.com/questions/55776/finding-l2-cache-size-in-linux/1298808#1298808 cat/sys/devices/syst
..
如果我只有通过 PCI-Express BAR(基地址寄存器)映射到设备缓冲区的内存缓冲区的物理地址,我如何将该缓冲区映射到用户空间? 例如,代码在 Linux 内核中通常应该是什么样子? unsigned long long phys_addr = ...;//获取设备物理地址unsigned long long size_buff = ...l//获取设备大小 buff//... mm
..
我对 Makefile 和内核模块非常熟悉,但最近我在我的 Makefile 中遇到了一个没有任何意义的问题——使用通配符.为了证明这一点,我正在从头开始编译一个 hello world 内核模块.目录结构是这样的: hello_mod/|- - 你好ç|--- 生成文件 这是实际的makefile: CFILES := $(wildcard hello.c*)#CFILES := hell
..
我已经从 kernel.org 下载了 Linux 内核的源代码并通过调用创建了头文件 make ARCH=arm headers_check 我有一个嵌入式平台,我问自己这是否足够,因为我没有供应商提供的头文件.头文件的依赖是什么?在我看来,头文件是特定于硬件的,我希望它们取决于 CPU 类型等.仅通过 ARCH=arm 指定架构就足够了吗?arm系统的供应商是否有可能为Linux内核创建自
..
对于一个项目,我试图从 Linux 内核空间发送 UDP 数据包.我目前正在将我的代码“硬编码"到内核中(我认为这不是最好/最简洁的方式),但我正在尝试进行一个简单的测试(发送“测试").应该提到的是,我是内核黑客的新手 - 我对许多原则和技术并不了解! 每次我的代码运行时,系统都会挂起,我必须重新启动 - 没有鼠标/键盘响应,滚动和大写锁定键指示灯一起闪烁 - 我不确定这是什么意思,但我假
..
我阅读了 本指南编写内核模块来做简单的网络过滤. 首先,我不知道下面的文字是什么意思,入站和出站数据包(按传输层)有什么区别? 当一个数据包从线路进入时,它从物理层传输,数据链路层,网络层向上,因此它可能不会通过netfilter 中为 skb_transport_header 定义的函数. 其次,我讨厌幻数,我想用 Linux 内核实用程序中的任何函数(源文件). 任何帮
..
我正在使用连接到虚拟机串行端口的 gdb 来调试 linux 内核. 我想知道,是否有任何补丁/插件可以让 gdb 理解一些 linux 内核的数据结构并使其“线程感知"? 我的意思是在 gdb 下我可以看到有多少内核线程,它们的状态,以及每个线程的堆栈信息. 解决方案 libvmi https://github.com/libvmi/libvmi 该项目执行“Li
..
似乎在Windows 32位上,内核会从总共4G的用户虚拟内存空间中预留1G的虚拟内存,并将部分的内核空间映射到这1G空间中. 所以我的问题是: 在 32 位 Linux 上有没有类似的情况? 如果是这样,我们如何才能看到整个内存布局? 我觉得 cat/proc/pid/map 只能看到某个进程的用户空间布局.. 谢谢! 解决方案 其实在 32 位 Windo
..
好的,问题来了:我有 3 个类 MyClass1 和 MyClass2 和 ExecClass.我转到我的命令提示符并执行以下操作: $java MyClass1 -exec "java MyClass2 arg1 arg2" 完美运行.现在在 ExecClass 我有以下几行: Runtime.getRuntime().exec("java MyClass1 -exec \"java My
..
我在 linux 上分发了我的应用程序的静态链接二进制版本.但是,在使用 2.4 内核的系统上,我在启动时遇到段错误,并显示消息:“致命:内核太旧." 如何轻松地启动并运行带有 2.4 内核的版本?我需要的一些库甚至在 2003 年左右的旧 linux 发行版上都不可用.是否有 apt-get 安装或可以让我轻松定位旧内核的东西? 解决方案 最简单的方法就是安装 VirtualBox
..