linux-kernel相关内容
为什么sched_setscheduler()需要根特权? 我正在编写一些受益于设置SCHED_FIFO的代码.但是,如果我使用sched_setscheduler(),则现在必须要求该进程以root用户身份运行.为什么不允许sched_setscheduler()在没有root权限的情况下运行? 解决方案 大概是因为使用实时调度程序的进程可以完全接管一台计算机,而不会将CPU交给其
..
我已经写了基本的char驱动程序. 已使用cdev_alloc,cdev_init,cdev_add完成了char设备与内核的注册. 专业= 117,未成年人= 1. cdev_add函数重新运行成功. 我正在尝试检查char设备是否已创建. 我在/dev/或/dev/char下找不到主要编号为117的任何设备. register_chrdev不会在我们提供NAME的最新内核中使
..
我正在开始Linux内核开发的第一步. 我有一些代码生成随insmod一起安装的.ko内核模块.我想调试安装模块时会发生什么,但遇到一些困难. 我需要调试对init_module的调用.我运行insmode时会调用此函数吗? 我尝试使用insmod "/my/url/fil.ko" -m调试发生的情况,但是每次出现错误-1 Unknown symbol in module时,在/cat
..
假设我想在普通操作系统启动之前启动一个小型Linux发行版. BIOS加载MBR并执行MBR. MBR找到活动分区,这是我的linux分区. 启动Linux,然后执行所需的操作. Linux关闭,我再次切换到实模式. 原始分区引导扇区已加载,我的普通操作系统也已启动. AFAIK,第4步将是一项艰巨的任务,要在linux之前的所有设备上恢复状态,INT13h会起作用吗?我需要还
..
我试图在命令行上执行"make debug",它将使用-DDEBUG_OUTPUT定义构建我的驱动程序模块,这将导致某些代码段被编译. 在2.4内核makefile中,这非常容易.我只是创建一个debug:目标,并在该目标的cc编译命令参数中包括"-DDEBUG_OUTPUT".容易. 不幸的是(对我而言),2.6彻底改变了模块的编译方式,我似乎只能找到琐碎的“全部"和“干净"示例,这
..
我知道os会将elf加载到物理内存中.当执行jmp elf-address时,系统将检查tlb并将elf-address转换为物理地址.我感到困惑的是,elf-address没有段num和页num?操作系统如何将elf-address转换为MMU所需. 我真的很困惑. 我知道linux将读取elf的标头和map elf. 当发生页面错误时,内核会将elf加载到内存中并刷新页面表. 但是您知道
..
我已经制作了一个模块,在该模块中,我想运行一个无限循环,直到不卸载该模块为止.目前,如果我执行rmmod,它会通知我模块仍然很忙,并且在一段时间后出现内核崩溃. while(1) { ....... } 有什么技巧可以运行无限循环,直到卸载模块. 解决方案 此循环在哪个上下文中运行?这是一个非常重要的问题. 如果运行init_module,则insmod进程将永远
..
我正在尝试进行自定义系统调用. 我的系统调用使用2个参数struct buffer **mybuffer& int size. 它强加了对**mybuffer所做的任何更改,这些更改应反映在用户空间中,但似乎不起作用. 所以我已经看到其他地方可以使用copy_to_user(void *dest, void *src, int size)将数据从内核空间复制到用户空间. 在
..
我正在处理shell脚本.我有一个预建的zImage.是否有可能知道创建zImage的内核版本? 我尝试使用更新的命令@ 从压缩的内核映像,但两个命令均失败. $ dd if=zImage bs=1 skip=$(LC_ALL=C grep -a -b -o $'\x1f\x8b\x08\x00\x00\x00\x00\x00' zImage | \ cut -d ':' -f 1
..
今天,我开始开发Linux模块.用Helloworld编写,编译和使用它相当困难,但是我已经做到了. 第二个具有打开,写入,读取功能的模块已经准备就绪,但是我真的不知道如何对其进行测试. Write方法只是使printk().我的模块已加载,其名称为iamnoob.如何测试此write(...)函数并在var/log/syslog中找到smth? cat> iamnoob只是将文件写入目录.
..
在Linux中,进程可以打开的inotify实例的数量受到/proc/sys/fs/inotify/max_user_instances 中指定的每个用户ID最大数量的限制. > 自然的事情是对每个进程进行限制,例如文件FD.由于inotify FD受用户ID的限制,因此它更可能在许多进程可能使用同一用户ID运行的服务器上达到极限.但是我想这一定有原因吗? 这是一个编程问题,因为我必须在代
..
我想确保/proc/cpuinfo是正确的.当前输出 Hardware : am335xevm Revision : 0000 Serial : 0000000000000000 我可以在代码中的哪个位置更改它以提供真实值? 解决方案 这取决于Linux的版本和处理器体系结构.由于这是TI ARM,因此您可以从以下内容开始:arch/
..
子进程的父进程突然终止而没有等待,该怎么办?子进程也会死吗? 解决方案 孩子得到与init相对.
..
我正在编写用作伪驱动程序的Linux内核模块(LKM)-我无法弄清楚如何在LKM之间进行IOCTL调用( wait.c )以及用户级程序( user.c ). 设备驱动程序的幻数是0xBF-LKM不与物理块/字符设备通信,这只是一个练习.据我所知,对KERN_IOCTL_CREATE_EVENT的IOCTL调用未正确格式化&;幻数不正确. 我尝试使用的IOCTL呼叫是: #inc
..
我知道insmod和modprobe用于将模块插入内核. 但是,它们之间有什么区别? 而且,为什么在modprobe中插入带有force选项的模块会有危险吗? 解决方案 modprobe是insmod的智能版本. insmod只是添加一个模块,其中modprobe查找任何依赖项(如果该特定模块依赖于任何其他模块)并加载它们. 关于--force选项,以下是手册页中的引言:
..
我有一个驱动程序,可以处理多个TCP连接. 有没有一种方法可以在给定struct sock列表的情况下在内核中执行类似于用户空间应用程序api的select/poll()/epoll()? 谢谢 解决方案 您可能想编写自己的自定义sk_buff处理程序,该处理程序调用试图锁定信号量的kernel_select()并在套接字时进行阻塞等待是打开的. 不确定您是否已经通过此链
..
我正在尝试在linux中注册新的net_device ...我可以分配并正确注册它,而ifconfig显示它.当我尝试设置界面时,问题就来了: ifconfig my_dev up 发生内核冻结...问题仅存在于x86机器上,我无法弄清原因...在pcc机器上一切正常.代码很简单: static struct net_device *my_dev; static int veth
..
我必须运行对延迟敏感的应用程序,并且被要求将计时器分辨率更改为1000 Hz或更高.我在网上搜索了一下,找到了有关CONFIG_HZ等的页面. 但是,文件中似乎还存在其他一些相关设置,因此我想确保自己不会搞乱设置.我在这里发布一些输出 $cat /boot/config-2.6.28-11-generic | grep HZ # CONFIG_HZ_1000 is not set #
..
如何通过向Linux内核提供命令行参数来在启动时为多个文件启用动态调试(pr_debug)? 我试图提供以下内容作为参数- dyndbg='file drivers/ +p file drivers/ +p file drivers/ +p' 但是未启用动态调试. 我的语法正确吗? 解决方案 用分号分
..
我正在尝试制作一个Linux内核模块,该模块支持打开,关闭,读取和写入操作. 所以我想通过struct file_operations注册这些函数,但是在struct中找不到'close'条目. 我想我应该使用“发布"而不是“关闭",但是我想知道为什么名称是“发布"而不是“关闭"吗? 解决方案 因为文件可能会多次打开,所以当您关闭描述符时,仅在最后一次关闭调用时才对文件的最后引用调用rel
..