linux-kernel相关内容
在LDD3中,我看到了这样的代码 static unsigned int scull_p_poll(struct file *filp, poll_table *wait) { struct scull_pipe *dev = filp->private_data; unsigned int mask = 0; /* * The buffer is cir
..
最近我安装了:Debian x86_64,oracle 11g和OCI8.我想自动将下面的shell脚本打开,但是收到以下消息错误: root @ debian:/etc/init.d# uname -a Linux debian 3.2.0-4-amd64#1 SMP Debian 3.2.54-2 x86_64 GNU/Linux root @ debian:/etc/init.d
..
我想问的是,是GRUB在引导过程中将CPU切换到保护模式还是Linux内核做到了这一点.我还要问-内核本身(vmlinuz)是ELF还是纯二进制格式?谢谢. 解决方案 GRUB 确实将您置于保护模式. GRUB Multiboot规范(0.6.96版) 3.2节告诉您这一点 "CR0" 位31(PG)必须清除.必须设置位0(PE).其他位均未定义. CR0寄存器映射
..
AFAIK有一个进程存储器的分区,用于存储与内核相关的数据,并将其标记为只读. 我找不到事实解释,为什么会发生这种情况,该区域的目的是什么,为什么要在每个进程存储空间中都包含它? 解决方案 就像用户模式的存储空间一样,内核需要自己的代码段(RX),数据段(R/RW)和堆栈帧.线程(RW). 我不会说它需要包含在进程内存空间中,而是说它是内核始终驻留的地方.与进程之间每次进行上下
..
关于这个主题,我将更好地讨论HR计时器和实际精度问题. 我研究了很多有关它们的文档,并且我确信它们是解决Linux内核模块内部延迟执行问题的最佳,最可靠的解决方案,其CPU成本更低,计时精度更高(例如,某些时间紧迫的驱动程序也使用它们,例如 https://dev.openwrt.org/browser/trunk/target/linux/generic/files/drivers/pwm
..
我正在尝试编写设备驱动程序,并且需要在驱动程序中使用system()函数.要使用system(),我们需要包含,该文件似乎在驱动程序中起作用. 它说找不到这样的文件或目录. 设备驱动程序是否有stdlib.h的替代品?还是system()的替代品? 解决方案 stdlib.h是用户空间标头. 用户空间是在其中运行用户进程(即,除内核之外的所有事物)的那
..
我现在正尝试使用perf来测量PEBS的L3_Miss(LLC错过). 这是命令:perf record -d -e cpu/event=0xd1,umask=0x20/ppu -c 1 test,当性能完成时,我使用perf script -F ip,sym,addr来检查结果. 根据的Nofollow noreferrer“> SDM. 3B表18-55. PEBS记录包含一个名为
..
我试图读取我在200毫秒内通过内核模块创建的回送设备,但是当我尝试插入它时,它使内核崩溃. 我认为我的读取模块有问题,但是没有计时器就可以正常工作. 我是内核编程的新手,请帮忙. 预先谢谢您:D #include #include #include #include
..
通过查看 binfmt_elf.c 作为内核源代码,我无法弄清生成32位进程与64位进程时内核(64位)的不同之处. 有人可以向我解释我所缺少的吗? (此问题与我的另一个问题有关,即关于32位指令与64位指令在同一过程中使用(解决方案 如果使用 execveat 系统调用来启动新进程,则我们首先输入 fs/exec.c 插入到SYSCALL_DEFINEx(execveat ..)函
..
当前,我正在开发一些与研究相关的程序,我需要找到某些特定地址的pte.我的开发环境是Juno r1板(CPU分别是A53和A57),并且正在运行arm64 Linux内核. 我使用一些典型的页表遍历代码,如下所示: int find_physical_pte(void *addr) { pgd_t *pgd; pud_t *pud; pmd_t *pmd;
..
在用户空间中,我只能echo noop > /sys/block/sda/queue/scheduler. 如何在内核模块中执行相同的操作? 我希望这样的东西(伪代码): struct dentry* e = sysfs_get_root(); vfs_path_lookup(e, ????, "block/sda/queue/scheduler", ???); ????; st
..
对于我的作业,我需要读取一些来自串行端口的字符串. 这必须在内核模块中完成,所以我不能使用stdio库. 我正在尝试这种方式: #include #include #include #include #define SERIAL_PORT "/dev/ttyACM0" vo
..
为了检索正在运行的程序的文件权限,我需要在当前正在运行的程序上执行kstat.然后我需要加载ELF图像的绝对路径. 有可能吗? current->comm仅记录不带路径的程序名称. 或者还有其他方法可以做到吗? 解决方案 您可以readlink(2)带有/proc/self/exe的路径,在您的情况下,这将是指向ELF的链接.使用readlink(1)的元示例: $ re
..
我已在ARM Linux板上的i2c总线0上添加了MAX7320 i2c扩展器芯片. 该芯片可以使用诸如/usr/sbin/i2cset -y 0 0x5d 0x02和/usr/sbin/i2cget -y 0 0x5d之类的命令从用户空间正常工作. 内核源文件中有一个drivers/gpio/gpio-max732x.c文件,该文件已编译到我正在运行的内核中. (我从源头上构建了它.
..
我正在编写一段代码,该代码需要在SOC关闭之前存储位于特定物理地址中的10k内存. 我的问题是此物理地址不是内核空间的一部分,因此我必须创建一个临时内存映射,以便我可以访问此内存空间. 我尝试使用io-remap,但它(显然)不适用于非内核空间. 是否有用于执行此操作的API? 我应该使用kmap吗? 预先感谢 解决方案 找到了答案 关键是使用vmap函数为给
..
我需要将一个预编译的目标文件链接到我的linux内核模块.如果我在makefile中有这样一行: obj-m := test.o test-objs := obj1.o obj2.o 正确构建了obj1.o所在的obj1.c源文件,而obj2.o是预编译的目标文件的obj1,但是尝试通过搜索obj2.c源文件来构建obj2.o.如何指定obj2.o是预编译的对象? 谢谢大家!
..
我正在开发一个 android 应用,该应用需要将触摸事件发送到/dev/input/eventX.我知道执行以下操作的C代码结构如下: struct input_event { struct timeval time; unsigned short type; unsigned short code; unsigned int value; }; 要使用
..
在刚安装的Ubuntu上,我在/usr/include/linux和/usr/src/kernel-version-headers/include/linux 中都找到了内核头文件 它们彼此相同吗? 解决方案 它们非常不同; /usr/include/linux标头是在编译系统的标准C库时使用的标头.它们归C库包装所有,并与标准C库同步更新.它们的存在是为了向内核提供 userland
..
我写了我的ISR,我的tasklet立即运行了. 但是,我见过很多人说tasklet仅在引起CPU注意时才运行.这是一个非常通用的术语,称为 CPU注意事项,因此我对那些响应者表示敬意.我的意思是确切地说,cpu在哪一刻将注意力转移到tasklet的执行上,以及CPU的状态如何? 其次,如果假设我一直在遭受硬中断,那么tasklet何时有机会运行? Tasklet是否可能没有机会运行?内核如
..
我在理解TCP的Linux源代码时遇到了问题(net/ipv4/tcp_input.c) 在include/net/tcp.h中,它已经定义了TCP_ECN_OK = 1,但实际上是什么意思 tp->ecn_flags & TCP_ECN_OK 此外,请在套接字,袜子,tcp_sock和sk_buff之间进行说明. 是否有任何参考资料可以解释得更详细或更清楚. 谢谢.
..