Articles of linux kernel

dynamic添加条目到sysctl

考虑这个代码: int procmon_state = 0; static struct ctl_table_header *procmon_table_header; static ctl_table state_table[] = { { .procname = "state", .mode = 0666, .proc_handler = &proc_dointvec_minmax, .data = &procmon_state, .maxlen = sizeof(int), .extra1 = "\x00\x00\x00\x00" /*0*/, .extra2 = "\x01\x00\x00\x00" /*1*/ }, { 0 } }; static ctl_table procmon_table[] = { { .procname = "procmon", .mode = 0555, […]

只有当它们出现在insmoded Linux Kernel模块中时,如何使用导出的符号?

我正在修改一个Linux内核,将一些function添加到Linux虚拟服务器(LVS)。 我开发了一个模块(我称之为net/netfilter/ipvs/ip_vs_utils.c ),其中包含一些用于负载平衡的function。 这里所有的函数都使用EXPORT_SYMBOL()来导出。 这个模块在逻辑上并不是一直加载。 我的意图是让用户决定是否要使用这个附加function(加载或卸载模块)。 我的问题是,我怎样才能从现有的(当然是修改的)模块( net/netfilter/ipvs/ip_vs_core.c )中OPTIONALLY(取决于模块是否在运行)调用这些函数。 像这样的东西: if(ip_vs_utils_IsLoaded) { function1(arg1, arg2, arg3); // being function1 defined on ip_vs_utils.c }

内核中的malloc

当我尝试在内核模块中使用malloc ,我从编译器中收到一条错误消息。 我的代码: res=(ListNode*)malloc(sizeof(ListNode)); 编译器的错误信息是: /root/ex3/ex3mod.c:491: error: implicit declaration of function 'malloc' 我该怎么办?

ARM汇编“retne”指令

我目前正在理解Linux内核启动的过程。 我正在浏览Linux内核源代码树,特别是ARM架构,直到我偶然发现arch / arm / kernel / hyp-stub.S中的这个汇编指令retne lr 从概念上讲,很容易理解的是,如果Z标志为0,则指令将返回到存储在链接寄存器中的地址。我正在寻找的是这个ARM汇编指令的实际logging。 我在“ ARM体系结构参考手册”ARMv7-A和ARMv7-R版本 A8.8中进行了search,找不到指令说明。 剔除源代码,看看它是否是一个ARM特定的GNU AS扩展,并没有特别的说明。 一个谷歌search与查询“臂大会ret指令”,“arm返回指令”和类似的东西沿线没有什么有用的。 当然,我必须在错误的地方寻找,否则我一定会错过一些东西。 任何澄清将不胜感激。

Linux CFS计划代码在哪里?

我有完整的Linux版本3.13的源代码。 我试图findCFS调度程序的源代码,根据stream行的书籍应该驻留在/kernel/sched.c中的基本调度程序代码和/kernel/sched_fair.c专门为CFS代码。 我只是在我的3.13 linux代码里面的这两个文件做了一个代码全局search,结果没有任何结果。 我还单独search了/linux-3.13/kernel文件夹和/linux-3.13/kernel/sched文件夹。 仍然没有运气。 我想让别人知道CFS在新的linux内核代码域(linux-3.13。*)中的位置。 请原谅,如果我在这里失去了一些东西。 我是一个初学linux内核的人。

未注册端口重组错误的nf_conntrack_helper_register

我有以下代码来注销和注册sip conntrack从内核3.18 static void __nf_conntrack_sip_fini(void) { int i, j; for (i = 0; i < ports_c; i++) { for (j = 0; j < ARRAY_SIZE(sip[i]); j++) { if (sip[i][j].me == NULL) continue; nf_conntrack_helper_unregister(&sip[i][j]); } } memset(sip, 0, sizeof(sip)); } static int __nf_conntrack_sip_init(void) { int i, j, ret; if (ports_c == 0) ports[ports_c++] = SIP_PORT; for […]

ftrace:通过echo从function_graph更改current_tracer时系统崩溃

我最近一直在玩ftrace来监视我的系统的一些行为特征。 我一直在处理通过一个小脚本打开/closures跟踪。 运行脚本后,我的系统会崩溃并重新启动。 最初,我相信脚本本身可能有错误,但是我已经确定,当current_tracer设置为function_graph时,崩溃和重新启动是将跟踪器回显到/ sys / kernel / debug / tracing / current_tracer的结果。 也就是说,下面的命令序列会产生崩溃/重启: echo "function_graph" > /sys/kernel/debug/tracing/current_tracer echo "function" > /sys/kernel/debug/tracing/current_tracer 在上面的echo语句导致崩溃之后重启重启,我看到很多输出结果如下: 清除孤立的inode <inode> 我试图重现这个问题,将函数的current_tracer值replace成C程序中的其他东西: #include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #include <stdlib.h> int openCurrentTracer() { int fd = open("/sys/kernel/debug/tracing/current_tracer", O_WRONLY); if(fd < 0) exit(1); return fd; } int writeTracer(int fd, char* […]

无法编译Android的LKM

我有Ubuntu 12.04作为编译环境。 我也有Cyanogen mod内核的源代码(从Github获得: https : //github.com/CyanogenMod/cm-kernel ) 我使用Android NDK r5c 工具链 (for linux) 我有以下代码: #include <linux/kernel.h> #include <linux/module.h> #include <asm/unistd.h> asmlinkage ssize_t (*orig_open)(const char *pathname, int flags); asmlinkage ssize_t hooked_open(const char *pathname, int flags) { printk(KERN_INFO "SYS_OPEN: %s\n", pathname); return orig_open(pathname, flags); } void **sys_call_table; static int __init root_start(void) { sys_call_table= (void *) 0x0030084; […]

内核级线程库

我必须实现内核级线程,但在网上search时,我发现有三种方法可以在linux中创build内核级线程: NPTL KTHREAD Linux线程 这是写在linuxThreads现在被放弃的地方。 但我无法findNPTL&kthread的当前支持。 此外,我无法find任何来源,可以简单地解释我如何使用其function。 哪个是当前支持的,使用内核级线程的好库? 也请分享任何资源安装这些库,也使用它们?

有取代Linux内核函数的错误

#include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/types.h> #define CODESIZE 7 static unsigned char original_code[CODESIZE]; static unsigned char jump_code[CODESIZE] = "\xb8\x00\x00\x00\x00" /* movq $0, %rax */ "\xff\xe0" /* jump *%rax */ ; void (*sync_readahead)( struct address_space *mapping, struct file_ra_state *ra, struct file *filp, pgoff_t offset, unsigned long req_size ) = (void (*)(struct address_space *, struct […]