Questions tagged «kernel»

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

4
* BSD为什么将驱动程序专用名称用于网络接口?这是否意味着限制?
我注意到,根据网卡的品牌,接口名称有所不同(我想取决于驱动程序)。 * BSD为什么将驱动程序专用名称用于网络接口? 这是否意味着内核中没有描述“通用网络接口”的抽象层,所以每个驱动程序都将通过自己的API在内部进行寻址? (如何)影响链路聚合,流量整形,QoS(ALTQ),过滤等子系统? 准确地说,在pfSense下,我无法将ALTQ与链接聚合(LAG)虚拟接口一起使用。 由于缺少适当的抽象层,这是BSD的内部限制吗?

5
从menuconfig角度比较两个内核配置文件?
我遇到的情况是我有两个内核配置文件(用于同一内核源)。两者都有我需要的功能的一部分(一方面,USB正常工作,另一方面,第二个I2C)。 我知道,从menuconfig的角度来看,两个配置文件之间的区别仅包括几个选定的选项。(但不知道是哪一个) 但是,当手动比较配置文件(在两个.config文件之间合并)时,区别并不容易识别。我尝试过手动合并它们,但没有成功。我相信最终我会成功的,但是我相信,如果将文件以出现在menuconfig中的方式进行比较,则过程可能会更加轻松。 可以实现吗?如果可以,如何实现?


1
Unix中的进程,内核线程,轻量级进程和用户线程之间是什么关系?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 Vahalia的Unix Internal拥有显示进程,内核线程,轻量级进程和用户线程之间关系的数字。本书最关注SVR4.2,还详细探讨了4.4BSD,Solaris 2.x,Mach和Digital UNIX。请注意,我并不是在问Linux。 对于每个流程,该流程始终存在一个或多个轻量级流程吗?图3.4似乎是肯定的。 为什么图3.5(a)在CPU上直接显示进程,而在两者之间却没有轻量级进程? 对于每个轻量级进程,轻量级进程始终始终存在一个内核线程吗?图3.4似乎是肯定的。 为什么图3.5(b)在进程顶部直接显示轻量级进程,而在它们之间却没有任何内核线程? 内核线程是唯一能够调度的实体吗? 轻量级进程是否仅通过调度底层内核线程间接进行调度? 是否仅通过调度底层轻量级进程来间接调度进程? 更新: 我问了一个类似的Linux问题,Linux 的内核线程是否有轻量级进程? 我猜可能是因为《操作系统概念》一书隐含地介绍了使用Unix的概念,而Unix和Linux可能有所不同,所以我了解了Unix内核。 感谢当前的回复,但我希望重新打开该帖子,以便我可以接受其他回复。

1
找不到内核3.10.0-229.el7.x86_64的内核头文件
service vboxdrv setup在CentOS 7终端中键入命令时,出现以下错误: Your kernel headers for kernel 3.10.0-229.el7.x86_64 cannot be found 如何解决此错误? 通过输入打开日志文件时vi /var/log/vbox-install.log,内容为: Uninstalling modules from DKMS removing old DKMS module vboxhost version 5.0.4 ------------------------------ Deleting module version: 5.0.4 completely from the DKMS tree. ------------------------------ Done. Attempting to install using DKMS Creating symlink /var/lib/dkms/vboxhost/5.0.4/source -> /usr/src/vboxhost-5.0.4 DKMS: …

2
Linux内核的内存限制
我有一个困惑的问题。我有一个使用sg执行自定义CDB 的库。有几个系统通常在sg中存在内存分配问题。通常,sg驱动程序的硬限制约为4mb,但是我们在这几个请求〜2.3mb的系统上看到了它。也就是说,CDB正在准备分配2.3mb的传输。这里应该没有任何问题:2.3 <4.0。 现在,机器的配置文件。它是一个64位CPU,但是运行的CentOS 6.0是32位(我没有构建它们,也没有任何与该决定有关的信息)。此CentOS发行版的内核版本为2.6.32。他们有16GB的RAM。 这是系统上的内存使用情况(尽管,由于此错误发生在自动测试期间,所以我尚未验证这是否反映了从sg返回此errno的状态)。 top - 00:54:46 up 5 days, 22:05, 1 user, load average: 0.00, 0.01, 0.21 Tasks: 297 total, 1 running, 296 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 15888480k total, 9460408k used, 6428072k free, 258280k buffers Swap: 4194296k …

1
你能解释一下random.c中使用的熵估计吗
/dev/random使用内核中断的时间添加到熵池中。在名为的变量中跟踪池中的熵量entropy_count。 这是的相关代码段random.c。它表示变量的最后两次间断delta与delta的差异之间的时间(以我为准)delta2。 delta = time - state->last_time; state->last_time = time; delta2 = delta - state->last_delta; state->last_delta = delta; if (delta < 0) delta = -delta; if (delta2 < 0) delta2 = -delta2; delta = MIN(delta, delta2) >> 1; for (nbits = 0; delta; nbits++) delta >>= 1; r->entropy_count += nbits; …
12 linux  kernel  random 

1
Linux内核25年的开发是否可以通俗易懂地加以限定或抽象?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 Linux内核已有25年的历史了。如果我不得不提出自1991年(成立之日)以来Linux内核的发展历史的简短版本,而直到1994年直到现在,尤其是1994年以来(1.0.0)的简短版本,我都做不到。在阅读每个内核发行说明之前,我所能做的最好的就是提供以下内容,这些内容是在3.11版之前添加到内核的常规发行功能(省略说明和链接): Linux内核的1.0版于1994年3月14日发布。此Linux内核发行版仅支持基于单处理器,基于i386的计算机系统。可移植性成为一个问题,因此 1.2版(1995年3月7日发布)获得了对使用基于Alpha,SPARC和MIPS架构的处理器的计算机系统的支持。 2.0版于1996年6月9日发布。该系列共有41个版本。2.0的主要功能是SMP支持(即在单个系统中支持多个处理器)以及对更多类型的处理器的支持。 2.2版(1999年1月26日发布)删除了全局自旋锁,并提供了改进的SMP支持,并增加了对m68k和PowerPC架构以及新文件系统的支持(包括对Microsoft NTFS的只读支持)。 2001年1月4日发布的2.4.0版包含对ISA即插即用,USB和PC卡的支持。它还包括对惠普公司PA-RISC处理器的支持。2.4.x的开发发生了一些变化,在整个系列的整个过程中提供了更多功能,包括:支持蓝牙,逻辑卷管理器(LVM)版本1,RAID支持,InterMezzo和ext3文件系统。 版本2.6.0于2003年12月18日发布。针对2.6.x的开发进一步朝着在整个系列中包含新功能的方向发展。在2.6系列中所做的更改包括:将µClinux集成到主线内核源中,PAE支持,对几行新CPU的支持,将ALSA集成到主线内核源中,最多支持2 32个用户( (从2 16开始),最多支持2 29个进程ID(仅64位,32位Arch仍限制为2 15)),大大增加了设备类型的数量和每种类型的设备的数量,改进了64位支持,支持文件系统,支持文件大小最大为16 TB,内核抢占,支持本机POSIX线程库(NPTL),将用户模式Linux集成到主线内核源中,将SELinux集成到主线内核源中,InfiniBand支持等等。同样值得注意的是,在整个2.6.x版本中增加了几个文件系统:FUSE,JFS,XFS,ext4等。有关2.6内核系列历史记录的详细信息,可以在kernel.org 2.6内核系列源代码发布区域的ChangeLog文件中找到。 3.0版于2011年7月22日发布。Torvalds宣布最大的变化是“什么都没有,绝对没有。” 2011年5月30日,Torvalds宣布:“ ...确保我们真正发布下一个发行版,不仅是一个全新的闪亮数字,而且是一个好的内核。” 经过预期的6-7周的开发过程后,它将在Linux 20周年纪念日附近发布。 在2012年12月,Torvalds决定通过取消对i386处理器的支持来降低内核的复杂性,从而使3.7内核系列 成为仍支持原始处理器的最后一个。同一系列统一支持ARM处理器。 2013年9月2日发布的3.11版增加了许多新功能,例如用于open(2)的新O_TMPFILE标志,以减少临时文件漏洞,实验性AMD Radeon动态电源管理,低延迟网络轮询和zswap(压缩交换缓存)。 我还可以补充一点,Linux基金会多年来一直在报告内核开发。以下是2012-2013年内核开发亮点: 来自3,738个代表536家公司(我们知道)的个人开发人员已合并了将近92,000个变更集。 大量重要的新功能已合并到主线中。其中包括完整的无滴答操作,用户命名空间,用于ARM的KVM和Xen虚拟化,调度程序中的每个实体负载跟踪,用户空间检查点/重新启动,64位ARM体系结构支持,面向F2FS闪存的文件系统,旨在改善许多联网性能的网络在延迟和缓冲区膨胀问题上,两个独立的子系统为块存储设备提供了快速缓存,等等。 关于Android特定内核功能的长期争论已完全消失在后台。备受关注的“唤醒锁”功能已被最新的Android设备中使用的另一种主线解决方案悄然取代。 在此期间,使用自动化工具查找开发内核中的错误的使用显着增加。诸如“三位一体”模糊测试仪和零日构建和启动系统之类的工具正在预发行内核中发现大量错误,从而缩短了开发周期并使社区能够提供更高质量的发行版。 来自移动和嵌入式行业的贡献继续增加。例如,Linaro,Samsung和TI共同贡献了本白皮书先前版本的4.4%的更改;在截至3.10的时期内,他们贡献了几乎所有变化的11%。 核心项目首次参加了“妇女外联方案”,为41个职位申请了7个职位。在应用过程中,向内核提交了374个补丁,而3.10内核发行版中接受了超过1/3的补丁。实习过程现在正在进行中,但是直到将来的内核发行时,结果才开始显示。 此外,量化内核所发生的事情并不难,因为我们拥有超越单个提交的指标。例如,我们知道1994年的1.0.0内核有176250行代码;我们知道像3.10这样的现代内核具有15803499行代码。数量更多。内核发布频率增加了(3.10为63天),更改率也有所提高(每小时9次提交或更多)。引用Linux Foundation: 在过去的任何公共软件项目中,保持这种变化速度多年的能力都是前所未有的。 但是所有这些在我看来并没有什么洞察力。因此,我会问: 除了线性构成组成该内核的所有列出功能的线性加法之外,这个四分之一世纪的演变是否可以被概括地视为合格? 这是否带来了有关Linux内核的含义或发展方向的任何见解?经过25年的发展,可以肯定地得出一些结论吗? 寻找一个通俗易懂的抽象答案,说明一切,而不必诉诸一切。
12 kernel  history 

3
一个如何捕获虚拟接口上的流量?
我想捕获Linux虚拟接口上的流量,以进行调试。我一直在尝试veth,tun而且dummy接口类型; 在这三个方面,我都很难tcpdump显示任何东西。 这是我设置虚拟界面的方法: ip link add dummy10 type dummy ip addr add 99.99.99.1 dev dummy10 ip link set dummy10 up 在一个终端中,通过以下方式观看tcpdump: tcpdump -i dummy10 一秒钟,用以下命令收听nc: nc -l 99.99.99.1 2048 第三,使用发出HTTP请求curl: curl http://99.99.99.1:2048/ 尽管在2号航站楼中我们可以从curl请求中看到数据,但从中看不到任何数据tcpdump。 一个TUN / TAP教程澄清某些情况下,内核可能不会实际发送当一个本地接口上运行的任何数据包: 查看tshark的输出,我们什么都没看到。没有流量通过该接口。这是正确的:由于我们要对接口的IP地址执行ping操作,因此操作系统正确地确定不需要“在线”发送任何数据包,并且内核本身正在答复这些ping操作。如果您考虑一下,这就是您对另一个接口的IP地址(例如eth0)执行ping操作时将发生的情况:不会发送任何数据包。这听起来似乎很明显,但一开始可能会引起混乱(对我而言)。 但是,很难看到这如何适用于TCP数据包。 也许tcpdump应该以不同的方式绑定到接口?
12 networking  kernel  ip  tcp  tcpdump 


1
为什么我最初的虚拟磁盘这么大?
我正在运行带有内核版本的Ubuntu 11.10 3.0.0-14。我从3.1.0分支机构下载并构建了内核。安装新内核后,我看到我的/boot/initrd.img-3.1.0文件很大。这是114MB,而我/boot/initrd.img-3.0.0-14-generic大约是13MB。我想摆脱膨胀,这显然是不必要的。 构建新内核时,我将复制/boot/config-3.0.0-14-generic到.config到我的构建目录中,以保留原始内核的配置。我运行make oldconfig,为所有新选项选择了默认值,然后构建了内核。 查看每个initrd cpio归档文件中的文件大小,我发现在3.1.0 ramdisk中,所有.ko模块的大小都比3.0.0-14大。我以为在配置文件中检查了一个不必要的调试标志,但没有看到3.0.0-14配置文件中尚未启用的任何其他功能。 我/boot/config-3.0.0-14-generic在这里:http: //pastebin.com/UjH7nEqd 我/boot/config-3.0.1的在这里:http : //pastebin.com/HyT0M2k1 谁能解释所有不必要的膨胀来自何处?


2
ksplice有缺点吗?
ksplice是Linux内核的开源扩展,它允许系统管理员将安全补丁应用到正在运行的内核,而无需重新启动操作系统。(摘自Wikipedia。) 使用ksplice有不利之处吗?它会引起任何形式的不稳定吗?如果不是,为什么默认情况下它不包含在更多Linux发行版中?
12 linux  kernel  upgrade 

5
是否可以在不使用initrd的情况下将root放在LVM中?
我刚刚建立了一个Gentoo基本系统(这意味着我现在可以启动和登录并使用它进行操作)。我的根分区位于LVM2虚拟组中(具有单独的/boot分区)。为了启动,我需要将以下参数传递给内核: root=/dev/ram0 real_root=/dev/vg/rootlv init=/linuxrc dolvm 显然,它是在挂载root之前使用初始ramdisk做一些事情(我猜是加载LVM事情)。有没有一种方法可以将该代码放入内核本身,从而不需要initrd?如果没有,我该如何使自己成为initrd? 补充一下,我曾尝试在没有initrd的情况下为非LVM根目录编译内核,并且运行良好。然后,我试图将整个东西放在LVM下,并且无法启动计算机(我想它无法处理LVM的东西)。然后,我将该genkernel工具与该--lvm选项一起使用,它会创建当前正在使用的工作内核和initrd。 现在,我想跳过genkernel并自己完成所有操作,最好不要使用initrd,这样计算机可以更快地启动(无论如何我都不需要灵活性)。
12 kernel  boot  root  initrd  lvm 

1
为什么使用内核模式设置,而不是特权分离?
刚开始使用Linux时,内核模式设置有些痛苦,但是现在有了它真是太棒了。我的意思是,X是否不需要以root身份运行?高分辨率硬件加速控制台?酷的东西。 问题是,许多UNIX平台都没有任何形式的模式设置内核驱动程序。因此,依赖KMS的硬件现在大多限于Linux。 我的问题:为什么实际上在内核中实现呢? 如果需要硬件访问来设置屏幕分辨率,为什么不使用单独的特权守护程序或小的setuid二进制文件?这样可以保持分离特权代码并让显示服务器以受限用户身份运行的优势。同时摆脱了特殊的驱动程序要求,并使跨UNIX支持更加容易。对?还是我在这里错过了重要的事情?
12 kernel  xorg  drivers 

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.