linux-kernel相关内容

为什么`sched_setscheduler()`需要root特权?

为什么sched_setscheduler()需要根特权? 我正在编写一些受益于设置SCHED_FIFO的代码.但是,如果我使用sched_setscheduler(),则现在必须要求该进程以root用户身份运行.为什么不允许sched_setscheduler()在没有root权限的情况下运行? 解决方案 大概是因为使用实时调度程序的进程可以完全接管一台计算机,而不会将CPU交给其 ..
发布时间:2020-04-23 11:32:36 服务器开发

在cdev_add()在117上成功注册了main之后,char设备出现在哪里?

我已经写了基本的char驱动程序. 已使用cdev_alloc,cdev_init,cdev_add完成了char设备与内核的注册. 专业= 117,未成年人= 1. cdev_add函数重新运行成功. 我正在尝试检查char设备是否已创建. 我在/dev/或/dev/char下找不到主要编号为117的任何设备. register_chrdev不会在我们提供NAME的最新内核中使 ..
发布时间:2020-04-23 11:32:34 服务器开发

如何调试Linux内核模块的init_module()调用?

我正在开始Linux内核开发的第一步. 我有一些代码生成随insmod一起安装的.ko内核模块.我想调试安装模块时会发生什么,但遇到一些困难. 我需要调试对init_module的调用.我运行insmode时会调用此函数吗? 我尝试使用insmod "/my/url/fil.ko" -m调试发生的情况,但是每次出现错误-1 Unknown symbol in module时,在/cat ..
发布时间:2020-04-23 11:30:26 服务器开发

是否可以关闭linux内核并以实模式恢复?

假设我想在普通操作系统启动之前启动一个小型Linux发行版. BIOS加载MBR并执行MBR. MBR找到活动分区,这是我的linux分区. 启动Linux,然后执行所需的操作. Linux关闭,我再次切换到实模式. 原始分区引导扇区已加载,我的普通操作系统也已启动. AFAIK,第4步将是一项艰巨的任务,要在linux之前的所有设备上恢复状态,INT13h会起作用吗?我需要还 ..
发布时间:2020-04-23 11:29:03 服务器开发

在Linux 2.6驱动程序模块Makefile中创建调试目标

我试图在命令行上执行"make debug",它将使用-DDEBUG_OUTPUT定义构建我的驱动程序模块,这将导致某些代码段被编译. 在2.4内核makefile中,这非常容易.我只是创建一个debug:目标,并在该目标的cc编译命令参数中包括"-DDEBUG_OUTPUT".容易. 不幸的是(对我而言),2.6彻底改变了模块的编译方式,我似乎只能找到琐碎的“全部"和“干净"示例,这 ..
发布时间:2020-04-23 11:28:04 服务器开发

如何将小精灵中的地址转换为物理地址

我知道os会将elf加载到物理内存中.当执行jmp elf-address时,系统将检查tlb并将elf-address转换为物理地址.我感到困惑的是,elf-address没有段num和页num?操作系统如何将elf-address转换为MMU所需. 我真的很困惑. 我知道linux将读取elf的标头和map elf. 当发生页面错误时,内核会将elf加载到内存中并刷新页面表. 但是您知道 ..
发布时间:2020-04-23 11:27:55 服务器开发

在Linux内核模块中运行无限循环

我已经制作了一个模块,在该模块中,我想运行一个无限循环,直到不卸载该模块为止.目前,如果我执行rmmod,它会通知我模块仍然很忙,并且在一段时间后出现内核崩溃. while(1) { ....... } 有什么技巧可以运行无限循环,直到卸载模块. 解决方案 此循环在哪个上下文中运行?这是一个非常重要的问题. 如果运行init_module,则insmod进程将永远 ..
发布时间:2020-04-23 11:27:14 服务器开发

将数据从内核空间复制到用户空间

我正在尝试进行自定义系统调用. 我的系统调用使用2个参数struct buffer **mybuffer& int size. 它强加了对**mybuffer所做的任何更改,这些更改应反映在用户空间中,但似乎不起作用. 所以我已经看到其他地方可以使用copy_to_user(void *dest, void *src, int size)将数据从内核空间复制到用户空间. 在 ..
发布时间:2020-04-23 11:25:47 服务器开发

如何测试自己的Linux模块?

今天,我开始开发Linux模块.用Helloworld编写,编译和使用它相当困难,但是我已经做到了. 第二个具有打开,写入,读取功能的模块已经准备就绪,但是我真的不知道如何对其进行测试. Write方法只是使printk().我的模块已加载,其名称为iamnoob.如何测试此write(...)函数并在var/log/syslog中找到smth? cat> iamnoob只是将文件写入目录. ..
发布时间:2020-04-23 11:25:12 服务器开发

使FD生效-为什么每个用户ID而不是每个进程的限制?

在Linux中,进程可以打开的inotify实例的数量受到/proc/sys/fs/inotify/max_user_instances 中指定的每个用户ID最大数量的限制. > 自然的事情是对每个进程进行限制,例如文件FD.由于inotify FD受用户ID的限制,因此它更可能在许多进程可能使用同一用户ID运行的服务器上达到极限.但是我想这一定有原因吗? 这是一个编程问题,因为我必须在代 ..
发布时间:2020-04-23 11:19:31 服务器开发

Linux内核模块/IOCTL:不适合设备的ioctl

我正在编写用作伪驱动程序的Linux内核模块(LKM)-我无法弄清楚如何在LKM之间进行IOCTL调用( wait.c )以及用户级程序( user.c ). 设备驱动程序的幻数是0xBF-LKM不与物理块/字符设备通信,这只是一个练习.据我所知,对KERN_IOCTL_CREATE_EVENT的IOCTL调用未正确格式化&;幻数不正确. 我尝试使用的IOCTL呼叫是: #inc ..

insmod和modprobe有什么区别?

我知道insmod和modprobe用于将模块插入内核. 但是,它们之间有什么区别? 而且,为什么在modprobe中插入带有force选项的模块会有危险吗? 解决方案 modprobe是insmod的智能版本. insmod只是添加一个模块,其中modprobe查找任何依赖项(如果该特定模块依赖于任何其他模块)并加载它们. 关于--force选项,以下是手册页中的引言: ..
发布时间:2020-04-23 11:15:31 服务器开发

在设备驱动程序中使用select()/poll()

我有一个驱动程序,可以处理多个TCP连接. 有没有一种方法可以在给定struct sock列表的情况下在内核中执行类似于用户空间应用程序api的select/poll()/epoll()? 谢谢 解决方案 您可能想编写自己的自定义sk_buff处理程序,该处理程序调用试图锁定信号量的kernel_select()并在套接字时进行阻塞等待是打开的. 不确定您是否已经通过此链 ..
发布时间:2020-04-23 11:15:14 服务器开发

哪种是注册新net_device的正确方法?

我正在尝试在linux中注册新的net_device ...我可以分配并正确注册它,而ifconfig显示它.当我尝试设置界面时,问题就来了: ifconfig my_dev up 发生内核冻结...问题仅存在于x86机器上,我无法弄清原因...在pcc机器上一切正常.代码很简单: static struct net_device *my_dev; static int veth ..
发布时间:2020-04-23 11:15:03 服务器开发

更改Linux内核计时器

我必须运行对延迟敏感的应用程序,并且被要求将计时器分辨率更改为1000 Hz或更高.我在网上搜索了一下,找到了有关CONFIG_HZ等的页面. 但是,文件中似乎还存在其他一些相关设置,因此我想确保自己不会搞乱设置.我在这里发布一些输出 $cat /boot/config-2.6.28-11-generic | grep HZ # CONFIG_HZ_1000 is not set # ..
发布时间:2020-04-23 11:13:22 服务器开发

在启动时为多个文件启用动态调试

如何通过向Linux内核提供命令行参数来在启动时为多个文件启用动态调试(pr_debug)? 我试图提供以下内容作为参数- dyndbg='file drivers/ +p file drivers/ +p file drivers/ +p' 但是未启用动态调试. 我的语法正确吗? 解决方案 用分号分 ..
发布时间:2020-04-23 11:12:52 服务器开发

为什么关闭功能在Linux内核的`struct file_operations`中被称为release?

我正在尝试制作一个Linux内核模块,该模块支持打开,关闭,读取和写入操作. 所以我想通过struct file_operations注册这些函数,但是在struct中找不到'close'条目. 我想我应该使用“发布"而不是“关闭",但是我想知道为什么名称是“发布"而不是“关闭"吗? 解决方案 因为文件可能会多次打开,所以当您关闭描述符时,仅在最后一次关闭调用时才对文件的最后引用调用rel ..
发布时间:2020-04-23 11:12:16 服务器开发