【linux内核的一些知识点(上)】教程文章相关的互联网学习教程文章

如何拥有linux内核导出/ proc / [pid] / io?【代码】

我在我的主板上运行linux并且必须在/ proc / [pid] / io中读取信息.但它没有找到. 例如:$dd if=/dev/zero of=/tmp/aa & [1] 926 $cat /proc/926/io cat: /proc/926/io: No such file or directory我需要启用内核导出吗? 非常感谢您的帮助!解决方法:根据this,您需要在内核中启用CONFIG_TASKSTATS. 您可以在various ways中检查当前内核的配置,具体取决于分发,但是查看/ boot / config – $(uname -r)可以在Redhat版本中使用. 如...

这是linux内核中有关写入/ proc / self / loginuid的错误吗?【代码】

我有可能在linux内核中发现了一个错误.让我们考虑从主线程和一个辅助线程写入/ proc / self / loginuid的应用程序.代码如下:#include <stdio.h> #include <pthread.h> #include <sys/syscall.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>void write_loginuid(char *str) {int fd;printf("%s\n", str);fd = open("/proc/self/loginuid", O_RDWR);if (fd < 0) {perror(str);return;}if (write(fd, "0", 2) ...

如何在linux内核中使用另一个c文件中的变量?【代码】

我知道正常的方式,我尝试过,但它似乎不起作用. 在linux / net / sched / sch_htb.c中,我定义了变量:unsigned int queuelength; EXPORT_SYMBOL(queuelength);关于变量的一些动作,并不重要. 在linux / net / ipv4 / tcp_dctcp.c中,extern unsigned int queuelength;net / built-in.o出错:In function `dctcp_update_alpha': linux/net/ipv4/tcp_dctcp.c:230: undefined reference to `queuelength'内核版本是v4.6.解决方法:它取决于...

Linux内核如何交换文件映射页面?

我使用文件映射来读取20 GB的文件.当主内存耗尽时,内核如何将文件映射页面交换到磁盘? 我猜想一种可能的方法是将页面条目设置为NULL.然后,如果访问该页面,则再次调用do_no_page()函数以将文件映射到内存.这样对吗? 另一个问题是内核用于交换内存页面的优先级是什么?普通页面或文件映射页面?解决方法:页表中的每个条目都有一个无效位.将页面交换到硬盘驱动器时,会设置其无效位.每当访问页面时,MMU(处理器内部的内存管理单元)引发...

出于好奇:为什么linux内核“优化”strcpy比libc imp慢得多?【代码】

我尝试在http://lxr.linux.no/#linux+v2.6.38/arch/x86/lib/string_32.c下对优化的字符串操作进行基准测试,并与常规strcpy进行比较:#include<stdio.h> #include<stdlib.h> char *_strcpy(char *dest, const char *src) {int d0, d1, d2;asm volatile("1:\tlodsb\n\t""stosb\n\t""testb %%al,%%al\n\t""jne 1b": "=&S" (d0), "=&D" (d1), "=&a" (d2): "0" (src), "1" (dest) : "memory");return dest; } int main(int argc, char *...

如何在Linux内核中计算BogoMips?【代码】

如何在linux内核中计算出bogomips?究竟做了什么来获得这个价值?解决方法: /** Standalone BogoMips program** Based on code Linux kernel code in init/main.c and* include/linux/delay.h** For more information on interpreting the results, see the BogoMIPS* Mini-HOWTO document.** version: 1.3 * author: Jeff Tranter (Jeff_Tranter@Mitel.COM)*/#include <stdio.h> #include <time.h>#ifdef CLASSIC...

如何在Linux内核中启用动态调试?【代码】

我在内核配置文件中启用了CONFIG_DYNAMIC_DEBUG标志.当我在我的系统中启动时,我能够挂载/ sys / kernel / debug,并且还有dynamic_debug / control文件. 但是当我发出任何命令时echo -n 'module nfsd +p' > <debugfs>/dynamic_debug/control它没有在dmesg或syslogd中显示任何输出.我究竟做错了什么?解决方法:你设置了日志级别吗?echo 8 > /proc/sys/kernel/printk

linux – 内核如何通知用户空间程序发生中断【代码】

我正在编写用户空间程序和内核空间设备驱动程序. 目标:一旦发生中断,用户空间程序需要快速执行某些操作. 我的天真方法:用户空间程序使用ioctl调用wait_event_interruptible(),内核ISR调用wake_up_interruptible()来唤醒用户空间程序.事实证明,从中断到用户空间需要花费太多时间. 有没有更好的方法? 谢谢!解决方法:这里有一个类似的问题: Notify gpio interrupt to user space from a kernel module 请检查以上问题.但是,我可以...

如何处理ASID的情况在Linux内核中用完了?

ARM体系结构中的ASID(地址空间标识符)占用寄存器中的8位.这意味着可以分配256个ASID.但是在Linux内核中,甚至可以同时运行1024个以上的任务.如何处理ASID的情况在Linux内核中用完了?我检查了内核源代码,当ASID用完时,内核会再次从启动时将ASID分配给新任务.考虑到一种情况,最新任务拥有第一个ASID(0b1000 0000 0000 0001),但是有一个任务必须已经拥有相同的ASID.如果这两个任务需要cantext切换怎么办?我没有找到相关的内核源代码....

使用source insert 查看Linux内核源码【图】

先配置下source insert软件,添加工程文件时可以支持各种类型的文件 “ Options ” --> “ Preferences ” ---> “ Languages ” ---> “ C Languages ” ---> “ Doc Types... ” ---> “ file filter ” -->“ *.c;*.h;*.S;*.lds;*.dts;*.dtsi;*config;*Makefile;” 1. 打开source insert 软件 “Project”->“New Project...” 2. 选择工程文件存放的位置“Browse...”; “New project name”新工程的名称然...

在linux内核中,是否会调用kfree?

标题几乎就是问题…… 我正在编写一些使用自旋锁来帮助列表管理的代码.关于自旋锁的文档很清楚,没有调用任何会睡觉的东西.我知道有办法分配“原子”的内存,但我还没有看到任何关于kfree或释放内存的东西. 直觉告诉我它不应该睡觉,但我没有发现这是明确的.解决方法:不,它永远不会睡觉.从任意上下文调用kfree是安全的.唯一的例外是NMI oopser和类似的arch代码.

为什么在linux内核中radix_tree_preload会在禁用抢占的情况下返回

我正在阅读一篇关于linux内核基数树实现的文章,文章链接如下: http://lwn.net/Articles/175432/ 在本文中,它提到radix_tree_preload分配了足够的内存,以便后续插入树中不会失败.虽然它基于每个CPU分配结构,因此函数返回时禁用抢占.调用者的责任是调用radix_tree_preload_end以启用抢占. 我的问题是: 1)为什么radix_tree_preload基于每个CPU分配结构? 2)用户何时应该调用radix_tree_preload_end?是在radix_tree_insert之后吗? ...

Linux内核更改默认CPU调度程序

我试图破解Linux内核,我很想知道.如何更改默认的Linux Process调度程序?我可以将每个流程设置为实时流程吗? 谢谢解决方法:这篇文章有点过时,但无论如何我希望这可以帮助…我有类似的问题,我实现了Linux内核的黑客攻击,使RR成为默认的CPU调度程序.最后,hack基本上改变了shed_fork函数,正如之前的评论所指出的那样.以下是我实现的代码:https://aelseb.wordpress.com/2016/01/06/change-linux-cpu-default-scheduler/

是什么原因导致这些重复的TCP ACK在linux内核中发送【代码】

我在Android设备上使用tcpdump捕获了这些数据包(linux 3.4.39),这些数据包在HTTP GET Stream中:1 385.447794 Server -> Client: SEQ 12517, LEN 1002 385.498345 Client -> Server: SEQ 3086, LEN 0, ACK 126173 385.497836 Server -> Client: SEQ 12617, LEN 13484 385.498644 Client -> Server: [DUP ACK] SEQ 3086, LEN 0, ACK 126175 385.498735 Server -> Client: SEQ 13965, LEN 6196 385.498978 Client -> Server: [...

获取当前进程上下文的实际可执行路径 – Linux内核【代码】

我试图通过我的内核驱动程序获取正在运行的进程的实际可执行路径. 我做了以下事情:static struct kretprobe do_fork_probe = {.entry_handler = (kprobe_opcode_t *) process_entry_callback,.handler = (kprobe_opcode_t *) NULL,.maxactive = 1000,.data_size = 0 };do_fork_probe.kp.addr = (kprobe_opcode_t*)kallsyms_lookup_name("do_fork");if ((ret = register_kretprobe(&do_fork_probe)) < 0)return -1; static int...