linux-kernel相关内容
Os:REDHAT LINUX Linux 管理:2.6.18.8-1 # 可以直接从网卡读取MAC地址吗?我有下面的代码,但它只是从上面的层读取而不是卡本身!!! 我想弄清楚如何在我的 linux 机器上找到以太网 NIC 的原始 MAC 地址.我了解如何使用 ifconfig 查找当前 MAC 地址,但是如果地址已更改,请说使用'ifconfig eth0 hw ether uu:
..
我在 linux 中玩弄 ptrace.我正在尝试使用/proc/pid/mem 接口写入被跟踪进程的内存. 我用来完成这个任务的函数是: void write_proc(pid_t child, unsigned long int addr) {char mem_file_name[100];char buf[10]="希望";int mem_fd;memset((void*)mem_f
..
我注意到一个调用 nanosleep 的小测试程序在内核高于 2.6.22 的 Linux 机器上运行时显示出 CPU 使用率的巨大差异. #include int main (void){struct timespec sleepTime;struct timespec returnTime;sleepTime.tv_sec = 0;sleepTime.tv_nsec = 1000;而 (1)
..
我想在内核空间回显一个数据包.我在这台机器上用端口 6000 运行一个回显服务器.现在客户端运行在另一台机器上,向回显服务器发送数据.现在,我想要做的是从内核空间回显数据包.我不想用数据包打扰服务器,它会从内核空间静默回响.我在下面展示我的代码: #include #include #include #include #include #include #include #include #in
..
在Linux内核中,为什么很多结构使用____cacheline_aligned_in_smp宏?访问结构时它是否有助于提高性能?如果是,那么如何? 解决方案 任何缓存(dcache 或 icache)中的每个缓存线都是 64 字节(在 x86 中)架构.需要缓存对齐以避免缓存行的错误共享.如果缓存行在全局变量之间共享(在内核中发生得更多)如果全局变量之一被其缓存中的处理器之一更改,则它将
..
什么是链式 IRQ?chained_irq_enter 和 chained_irq_exit 是做什么的,因为在中断发生后,IRQ 线被禁用,但是 chained_irq_enter 正在调用与屏蔽中断相关的函数.如果线路已经禁用为什么要屏蔽中断? 解决方案 什么是链式 irq ? 如何在父(中断控制器)设备的 IRQ 处理程序中调用子设备的中断处理程序有两种方法. 链式中
..
我正在使用 NUMA 机器(SGI UV 1000)同时运行大量数值模拟,每个模拟都是使用 4 个内核的 OpenMP 作业.但是,运行大约 100 个以上的这些作业会导致显着的性能下降.我们关于为什么会发生这种情况的理论是,软件所需的共享库只加载一次到机器的全局内存中,然后系统会遇到通信瓶颈,因为所有进程都在单个节点上访问内存. 这是一个旧软件,没有任何修改范围,并且静态 make 选项不
..
是否有更好的方法在 Linux 内核中调试打印输出? 现在乱丢代码: printk(KERN_DBG "%s:%d - %s() ", __FILE__, __LINE__, __FUNCTION__ ); 这不是很干净. 应该有一种方法可以使整行 #ifdef: 以某种不错的方式进行编辑. 解决方案 使用 /* 在文件的顶部,在任何包含之前 */#define pr_f
..
我一直被告知(在书籍和教程中)在将数据从内核空间复制到用户空间时,我们应该使用 copy_to_user() 而使用 memcpy() 会导致系统出现问题.最近我错误地使用了 memcpy() 并且它工作得很好,没有任何问题.为什么我们应该使用 copy_to_user 而不是 memcpy() 我的测试代码(内核模块)是这样的: static ssize_t test_read(stru
..
Linux 内核 4.16 的文件 include/linux/typecheck.h 包含此代码. #define typecheck(type,x) \({ 输入 __dummy; \typeof(x) __dummy2;\(void)(&__dummy == &__dummy2);\1;\} 它检查 x 是否与参数 type 的类型相同. 但我看不懂这行: (void)(&__
..
我已经看到了一些零散的信息,但我似乎无法得出一个最终答案.如何清理内核中的僵尸线程? 为了确保并产生处理内核中线程的最终正确方法,我想更广泛地提出这个问题.如何在 Linux 内核中创建、终止和清理线程? 到目前为止我所拥有的是: thread_func:退出 = 0;而 (!must_exit)做东西退出 = 1;do_exit(0)init_module:must_exit =
..
我尝试安装一个由我移植的 Linux 内核遗留模块.出现以下错误: >须藤 insmod camac-mx.koinsmod:插入“camac-mx.ko"时出错:-1 模块格式无效dmesg |tail -n 1[1312783.938299] camac_mx:不同意符号 module_layout 的版本 我该如何解决这个问题? 解决方案 这表明您已针对与正在运行的内核版本不同的
..
我可以使用 msleep() 函数在内核空间中休眠指定的时间吗?如果是这样,我需要包含哪些头文件?#include 似乎不是正确的.是否有更好的功能用于此目的? 解决方案 我需要包含 才能在内核空间中使用 msleep.
..
我正在编写一个设备驱动程序来访问 PCIe 卡上 FPGA 中的内存. 该卡启动并被探测/发现:- /proc/iomem 80000000-840fffff : PCI 总线 #0380000000-83ffffff:0000:03:00.084000000-840fffff : 0000:03:00.0 所以阅读 ldd/etc 我在 80000000 编码了对 request_m
..
内核在samples/bpf 中提供了许多示例.我有兴趣在树之外构建一个示例,就像我们构建一个内核模块一样,其中 Makefile 可以很简单.可以对 bpf 做同样的事情吗?我通过从 samples/bpf/Makefile 中删除不必要的部分并保持对 libbpf 和其他人的依赖来尝试它,但结果证明并不是那么容易. 例如,尝试在内核树之外构建samples/bpf/bpf_tcp_ker
..
我目前正在尝试调试运行在以太网之上的 ATM 封装层.ATM 信元基本上是在以太网报头之后按顺序存储的.但是,我怀疑驱动程序对 sk_buffs 的幼稚方法已被破坏. 驱动程序盲目地假设 skb->data 可以迭代,但查看 virtio_net.c:page_to_skb 的内核代码我看到以下行为: memcpy(hdr, p, hdr_len);len -= hdr_len;p +=
..
这是一个“Hello.c"模块和“Makefile".从 woking 目录执行 make 后,我收到以下消息: make:对'all'什么都不做. 这是“Hello.c"文件: #include //包含在所有内核模块中#include //包含在 KERN_INFO 中#include //包含在 __init 和 __exit 宏中MODULE_LICENSE("GPL");M
..
我正在尝试在内核驱动程序和用户空间程序之间进行异步通信(我知道这里有很多问题需要类似的信息,但我找不到与 sysfs_notify 相关的问题). 我将 Vilhelm 的编辑留在这里,但是将源添加到一个使用 sysfs 的简单驱动程序和一个用户空间程序来轮询它.驱动程序工作正常(我从网上获得了大部分内容;它缺少信用,但当我回去添加它们时找不到它们).不幸的是,轮询程序不起作用.它总是立即返
..
我决定参加Eudyptula 挑战.在我提交了第一个任务之后,即构建一个简单的“Hello World!"模块,我收到了以下答案. 请阅读 Makefile 的要求并允许模块针对文件系统上的任何内核源代码树构建,而不仅仅是那些在某个时间点碰巧安装在 /lib/ 中的内核. 要求是: Makefile 应该能够针对当前正在运行的内核的来源以及能够接受来自环境变量的任意内核源目录.
..
在多任务系统中,当任何硬件对特定 CPU 产生中断时,CPU 可以执行以下任一情况,除非它已经在为 ISR 提供服务: 用户态进程正在 CPU 上执行 内核模式进程正在 CPU 上执行 想知道在上述两种情况下中断处理程序使用哪个堆栈以及为什么? 解决方案 所有中断都由内核处理.这是由为该特定中断编写的中断处理程序完成的.对于中断处理程序,有 IRQ 堆栈.中断处理程序堆栈
..