Questions tagged «kernel»

有关UNIX内核的所有内容:开发,配置,编译,设计等。

2
捕获信号时中断系统调用
通过阅读read()和write()调用上的手册页,可以看出这些调用被信号打断了,而不管它们是否必须阻塞。 特别地,假设 进程为某些信号建立处理程序。 O_NONBLOCK 未设置(即以阻止模式运行)打开设备(例如,终端) 然后,该过程将进行read()系统调用以从设备读取数据,从而执行内核空间中的内核控制路径。 当程序read()在内核空间中执行时,先前安装了处理程序的信号将传递到该进程,并调用其信号处理程序。 阅读SUSv3“系统接口卷(XSH)”中的手册页和相应部分,您会发现: 一世。如果a read()在读取任何数据之前被信号打断(即由于没有可用数据而不得不阻塞),则它将返回-1并将其errno设置为[EINTR]。 ii。如果a read()在成功读取某些数据后被信号中断(即可以立即开始处理请求),则它将返回读取的字节数。 问题A): 我是否正确地假设在任何一种情况下(块/无块)信号的传递和处理对信号都不完全透明read()? 案例一 这似乎是可以理解的,因为阻塞read()通常会将进程置于TASK_INTERRUPTIBLE状态,以便在传递信号时,内核会将进程置于TASK_RUNNING状态。 但是,当read()不需要阻塞(情况ii。)并在内核空间中处理请求时,我会认为信号的到达及其处理将是透明的,就像硬件的到达和正确处理一样中断会。特别是,我会假设在传递信号后,该过程将被暂时置于用户模式下以执行其信号处理程序,然后该信号处理程序将最终返回该用户处理程序,以完成对中断read()(在内核空间中)的处理,从而read()运行其直到完成为止,然后过程返回到调用read()(在用户空间中)之后的点,结果将读取所有可用字节。 但是ii。似乎暗示read()中断了,因为数据立即可用,但是它返回时仅返回部分数据(而不是全部)。 这使我想到了第二个(也是最后一个)问题: 问题B): 如果我在A)下的假设是正确的,那么read()即使不需要阻塞,因为有可用的数据可以立即满足请求,为什么会被中断?换句话说,为什么read()在执行信号处理程序后不能恢复,最终导致所有可用数据(毕竟是可用的)被返回?

6
内核如何挂载根分区?
我的问题是关于从单独的/ boot分区引导Linux系统。如果大多数配置文件位于单独的/分区中,内核如何在引导时正确地将其安装? 在这方面的任何阐述都是很棒的。我感觉好像缺少一些基本知识。我最关心的是操作的过程和顺序。 谢谢! 编辑:我想我需要问的是更多的root内核参数中使用的dev文件。例如,假设我将我的根参数设置为root = / dev / sda2。内核如何映射/ dev / sda2文件?
29 linux  kernel  boot  mount 


9
如何卸载内核模块“ nvidia-drm”?
我正在尝试在Debian Stretch中安装最新的NVIDIA驱动程序。我是NVIDIA-Linux-x86_64-390.48.run从这里下载的,但是当我尝试这样做时 sudo sh ./NVIDIA-Linux-x86_64-390.48.run 根据建议,出现错误消息。 ERROR: An NVIDIA kernel module 'nvidia-drm' appears to already be loaded in your kernel. This may be because it is in use (for example, by an X server, a CUDA program, or the NVIDIA Persistence Daemon), but this may also happen if your kernel …

5
使Linux读交换回内存
当我运行一个使用大部分16GB物理内存的应用程序时,Linux内核会从内存中换出大多数页面。应用程序完成后,每个操作(键入命令,切换工作区,打开新网页等)都需要很长时间才能完成,因为首先需要从交换中读回相关页面。 有没有办法告诉Linux内核将页面从交换复制回物理内存,而无需手动触摸(和等待)每个应用程序?我运行许多应用程序,因此等待总是很痛苦。 我经常使用它swapoff -a && swapon -a来使系统再次响应,但这会清除页面中的交换内容,因此下次运行脚本时需要重新编写它们。 是否有内核接口(也许使用sysfs)来指示内核从swap读取所有页面? 编辑:我确实在寻找一种使所有交换swapcached的方法。(谢谢德罗伯特!) [ PSserverfault.com/questions/153946/…和serverfault.com/questions/100448/…是相关主题,但没有解决如何使Linux内核将页面从交换复制回内存而不清除交换的问题。
28 linux  kernel  memory  swap  sysfs 

1
为什么在Linux负载计算中没有使用简单的1/5/15分钟移动平均值?
直到最近,我还认为负载平均(如顶部所示)是状态“可运行”或“正在运行”的进程数的n个最后值的移动平均值。并且n将由移动平均线的“长度”定义:由于计算平均负载的算法似乎每5秒触发一次,因此对于1分钟的平均负载,n将为12,对于5分钟的平均负载,n将为12x5,而12x15 15分钟的平均负载。 但是后来我读了这篇文章:http : //www.linuxjournal.com/article/9001。这篇文章很老,但是今天在Linux内核中实现了相同的算法。平均负载不是移动平均,而是一种我不知道名称的算法。无论如何,我在一个假想的周期性负载下对Linux内核算法和移动平均值进行了比较: 。 这是个很大的差异。 最后,我的问题是: 为什么选择这种实现方式而不是对任何人都具有真正意义的真实移动平均值? 为什么每个人都说“ 1分钟平均负载”,因为算法考虑了比最后一分钟更多的时间。(从数学上讲,是自启动以来的所有度量;实际上,考虑到舍入误差-仍然是很多度量)

3
关闭USB端口的电源。或关闭整个USB子系统的电源
我有一个USB灯,我专门购买了USB灯,以便在特定时间以编程方式将其关闭,因此我需要断开USB端口的电源。 我相信我在usb6有一个usb-hub。灯泡连接到此集线器中的端口之一: #myhost$ lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 005 …

2
如何根据MemTest86 +错误指示将正确的坏RAM扇区列入黑名单?
MemTest86 +(Ubuntu 13.04附带的版本)说 Failing address: 002f796c48 - 759.5 MB 我应该在memmap内核参数中指定什么来绕过该区域? 我尝试运行memtester 770MB,它说一切都很好,因此看上去MemTest的指示从一开始就没有出现第759.5 MB的错误。 如何解释此MemTest指示进行配置memmap? 我现在没有钱买新的RAM,并且错误似乎是单一的,所以我希望我可以重写它。
28 linux  kernel  memory  ram 



2
这是Linux分页应该如何表现吗?
当我的Linux系统接近分页时(例如,在我的情况下,16GB的内存几乎已满,16GB的交换空间完全为空),如果新进程X尝试分配一些内存,系统将完全锁定。也就是说,直到不成比例的页面(已浪费X的内存分配请求的总大小和速率)为止。请注意,不仅gui变得完全没有响应,甚至sshd之类的基本服务也被完全阻止。 这是我用来以更“科学”的方式触发此行为的两段代码(当然是粗糙的)。第一个从命令行获取两个数字x,y,然后继续分配和初始化y字节的多个块,直到分配了x个以上的总字节。然后无限期地睡觉。这将使系统处于分页的边缘。 #include <stdlib.h> #include <stdio.h> #include <string.h> #include <unistd.h> int main(int argc, char** argv) { long int max = -1; int mb = 0; long int size = 0; long int total = 0; char* buffer; if(argc > 1) { max = atol(argv[1]); size = atol(argv[2]); } printf("Max: %lu …

5
是否可以在两个Linux操作系统之间进行USB到USB的数据传输?
我想在Linux(最好是Ubuntu)中创建USB到USB数据传输系统。为此,我不想使用任何外部硬件或开关(除了这根电缆)。就像将USB驱动器安装到系统上一样,但是在这种情况下,一个Linux系统将被安装在另一个系统上。我该如何创建呢? 鉴于我的内核编程经验非常基础,是否有可用的内核模块?

1
如何为USB-HID设备使用Linux内核驱动程序绑定/取消绑定接口?
第一个背景。我正在开发Logitech游戏面板设备的驱动程序。它是带有屏幕的键盘。驱动程序运行良好,但默认情况下,设备由HID处理。为了防止HID在驱动程序之前接管设备,我可以在hid-core.c中将其列入黑名单。这是可行的,但不是最佳解决方案,因为我正在与几个人一起工作,我们每个人都必须不断修补我们的HID模块,这变得很麻烦,尤其是因为它通常涉及到重建initramfs之类。 我对此问题进行了一些研究,发现了该邮件列表帖子,最终将我带到了LWN上。这描述了一种在运行时将设备绑定到特定驱动程序的机制。这似乎正是我所需要的。 所以,我尝试了。我能够将键盘与HID解除绑定。这行得通,而且按预期,我无法再键入它。但是,当我尝试将其绑定到驱动程序时,出现“错误:没有这样的设备”,操作失败。 所以我的问题是:如何在内核中将HID设备列入黑名单并提供自己的驱动程序时,如何使用内核绑定/解除绑定操作来复制会发生的情况?-就是说-取代始终需要修补hid-core.c的需要? 我们的驱动程序的源代码在这里:https : //github.com/ali1234/lg4l

1
管道如何在Linux中工作
我一直在阅读有关如何在Linux内核中实现管道的信息,并希望验证我的理解。如果我不正确,将选择带有正确解释的答案。 Linux有一个称为pipefs的VFS,它安装在内核中(而不是在用户空间中) pipefs有一个超级块,并安装在它自己的根目录(pipe:)旁边/ 与大多数文件系统不同,无法直接查看pipefs pipefs的条目是通过pipe(2)syscall进行的 pipe(2)外壳程序使用的syscall与|操作员进行管道传输(或从任何其他进程手动进行管道传输)在pipefs中创建一个新文件,其行为与普通文件非常相似 管道运算符左侧的文件已stdout重定向到pipefs中创建的临时文件 管道运算符右侧的文件已stdin设置为pipefs上的文件 pipefs存储在内存中,并且通过一些内核魔术,不应进行分页 这种关于管道(例如ls -la | less)功能如何的解释是否正确? 我不明白的一件事是,诸如bash之类的东西将如何设置进程stdin或stdout由返回的文件描述符pipe(2)。我还没有找到任何关于此的信息。
25 kernel  pipe 

5
确定Linux内核崩溃的原因
我正在运行Ubuntu 12.04衍生产品(amd64),最近遇到了一些非常奇怪的问题。突然,X会完全冻结一段时间(1-3分钟?),然后系统将重新启动。该系统已超频,但如Windows中所验证的那样非常稳定,这使我相信我遇到了内核恐慌或某个模块有问题。即使在Linux中,我也可以运行LINPACK,即使在CPU上放置了可笑的负载也不会崩溃。即使机器闲置时,崩溃似乎也是随机发生的。 如何调试崩溃的系统? 由于可能是专有的NVIDIA驱动程序,我一路退缩到驱动程序的稳定版本304,但仍然遇到崩溃。 谁能在崩溃后指导我完成一个好的调试过程?我很乐意引导到拇指驱动器并发布所有我的崩溃后配置文件,但我不确定它们是什么。我如何找出导致系统崩溃的原因? 这是一堆原木,通常是罪魁祸首。 .xsession-errors:http : //pastebin.com/EEDtVkVm /var/log/Xorg.0.log:http://pastebin.com/ftsG5VAn /var/log/kern.log:http://pastebin.com/Hsy7jcHZ / var / log / syslog:http : //pastebin.com/9Fkp3FMz 我什至似乎都找不到崩溃的记录。 触发崩溃并非如此简单,它似乎是在GPU试图一次绘制多个物体时发生的。如果我全屏播放YouTube视频,让它重复一会儿,或者滚动浏览大量的GIF,然后会弹出Skype通知,则有时会崩溃。完全挠了我的脑袋。 CPU已超频至4.8GHz,但它是完全稳定的,并且在昨天的大型LINPACK运行和9个小时的Prime95中幸免了一次崩溃。 更新资料 我已经安装了kdump,,crash和linux-crashdump,以及我的内核版本3.2.0-35的内核调试符号。当我apport-unpack在崩溃的内核文件上运行,然后crash在VmCore崩溃转储上运行时,这是我看到的内容: KERNEL: /usr/lib/debug/boot/vmlinux-3.2.0-35-generic DUMPFILE: Downloads/crash/VmCore CPUS: 8 DATE: Thu Jan 10 16:05:55 2013 UPTIME: 00:26:04 LOAD AVERAGE: 2.20, 0.84, 0.49 TASKS: 614 NODENAME: mightymoose RELEASE: 3.2.0-35-generic VERSION: …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.