在书籍中,我通常会阅读对 Linux 源代码树的引用/usr/src/linux以及通常的子目录集 ( arch, block, crypto, ...)。
我期待这棵树包含组成内核的二进制文件。在我的系统(Ubuntu 10.04)中...
对于我拥有的不同内核(使用自动软件下载,而不是手动安装),我在这个位置找到了每个内核的两个子目录,如下所示:
/usr/src/linux-headers-2.6.32-22
/usr/src/linux-headers-2.6.32-22-generic
Run Code Online (Sandbox Code Playgroud)在子目录中,我期望二进制文件等。但是,我检查了相当数量的树,这里的最后一个子目录似乎总是有一个Makefile(在阅读它时,它听起来通常更像是一个配置文件而不是安装文件),偶尔还有一些孤立的其他文件(大部分Kconfig)。
我的问题可能很幼稚,但我有点困惑。是 (2) 我应该在内核源代码树中看到的内容;为什么我明确提到“标题”?我需要linux-generic-headers为其他一些软件安装一段时间,但不确定这是否相关。我意识到makefiles有很好的理由(例如,在/driver子目录中安装模块),但是(几乎)只有makefiles?
我在很多地方读到 Linux 为 Java VM 中的每个用户线程创建一个内核线程。(我看到术语“内核线程”以两种不同的方式使用:
我说的是后一种。)
内核线程是否与内核进程相同,因为 Linux 进程支持父子进程之间的共享内存空间,还是真的是一个不同的实体?
我想从技术角度了解;BSD Kernel和之间有什么区别Linux Kernel。
在 Linux 中,我们可以下载源内核然后patch它make和make modules它。即使我们有多种工具来编辑内核,config例如menuconfig,xconfig和 ... 。
但是我在 BSD 上找不到这么广阔的领域。首先,我可以下载BSD kernel吗?我怎么能配置呢?和 ...
所以我要问的是:(不涉及祖先和词源)
Kernel在每种情况下(在)依赖于分布的?Kernel适用于工作的每个和工具的方法?kernel分布范围之外的可用性?( Kernel Sources)?Kernels每种情况下可用的风味( X??BSD/ Linux) 喜欢XEN/Vmware/GEN吗?我一直在像 uCOS、ThreadX 这样的嵌入式操作系统中工作。虽然我已经在 Linux 中编写了应用程序,但现在我打算开始学习 Linux 内核。我有几个关于环境的问题。
哪个是最好的发行版,哪个具有易于使用的内核开发工具?(到目前为止,我已经使用过 RHEL 和 Fedora。虽然我对这些很满意,但看起来 Ubuntu 也有内置脚本可以轻松编译内核,例如make_kpkg等)
你能描述内核调试的最佳设置吗?在调试其他嵌入式操作系统时,我使用了串口转储进度、JTAG 等。Linux 内核开发人员使用哪种设置?(我的带串口的测试台 PC 是否足以满足我的需要?如果是,如何配置内核以转储到串口?)我打算将内核消息重定向到串行控制台,该控制台将在我的笔记本电脑中读取。
什么工具最适合调试和跟踪内核代码?如前所述,串行控制台是唯一的方法吗?或者是否存在用于 PC 的任何 IDE/JTAG 类型的接口?
显然可以编译 glibc--enable-kernel以支持旧的内核版本。但是,我无法找到有关特定 glibc 版本支持哪些内核版本的信息。理想情况下,我希望看到每个 glibc (2.x) 和内核 (2.6.x) 版本的兼容性矩阵。它存在吗?
如果它不存在,也许是因为每个 glibc 版本(在过去 5 年左右)都支持自 2.6.0 以来的所有内核?
(Arch = x86-64,如果这很重要)
由于磁盘控制器故障,我已将服务器从一个主板移到另一个主板。
从那时起,我注意到其中一个核心的 25% 总是会转到 IRQ,但是我还没有设法让自己知道哪个 IRQ 对此负责。
内核是 Linux 2.6.18-194.3.1.el5 (CentOS)。mpstat -P ALL显示:
18:20:33 CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
18:20:33 all 0,23 0,00 0,08 0,11 6,41 0,02 0,00 93,16 2149,29
18:20:33 0 0,25 0,00 0,12 0,07 0,01 0,05 0,00 99,49 127,08
18:20:33 1 0,14 0,00 0,03 0,04 0,00 0,00 0,00 99,78 0,00
18:20:33 2 0,23 0,00 0,02 0,03 0,00 0,00 0,00 99,72 0,02
18:20:33 3 0,28 0,00 0,15 0,28 25,63 0,03 0,00 73,64 …Run Code Online (Sandbox Code Playgroud) 我在外部机箱中有一个笔记本电脑硬盘驱动器,用作大型笔式驱动器。另外,我在其上安装了 Linux,因此我可以使用我选择的发行版启动任何机器(例如,用于数据恢复或修复 b0rked 系统或仅使用借来的笔记本电脑而不破坏预装的 Windows)。
问题是,根据硬件配置,USB 硬盘驱动器可能在不同路径下可见。对于 grub 配置,我只是使用(hda0,0)它,因为它与启动 grub 的设备相关。我在/etc/fstab. 我还在rootwait内核参数中指定,以便它在尝试挂载设备之前等待 USB 子系统稳定下来。
我应该将什么传递给内核root=?目前,从 pendrive 启动一次,检查调试消息以查看/dev/sdX内核已将哪些设备分配给 USB 驱动器,然后重新启动并编辑 grub 配置。除了Boot from USB hard drive在 BIOS 中启用并将其设置为比内部硬盘驱动器更高的优先级之外,我无法更改 PC 上的任何内容。
有多种 initrd 生成脚本在根设备路径中包含对 UUID 的支持,不幸的是,Gentoo 原生脚本(genkernel)不支持rootwait,我没有运气尝试使用其他脚本。
启动过程是这样的(在 Windows 中非常相似):
root,使用(hd0)它从 BIOS 加载的设备。(hd0,0)再次使用)。rootwait现在是不是很神奇)。root(这是一个内核参数,而不是 grub …grsecurity默认情况下,内核中不包含补丁(或其带来的安全功能)的原因是什么?在考虑安全性的好处时,香草内核似乎非常不安全。
如果这是一种权衡(某些应用程序您想避免安全措施),似乎grsecurity可以在 vanilla 内核中启用它。
主流 vanilla 内核中有这么多东西,我很难理解为什么社区不想包含grsecurity.
dmesg 的输出显示自系统启动以来的秒数+毫秒数。
[ 10.470000] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 14.610000] device eth0 entered promiscuous mode
[ 18.750000] cfg80211: Calling CRDA for country: DE
[ 18.750000] cfg80211: Regulatory domain changed to country: DE
Run Code Online (Sandbox Code Playgroud)
问:如何将秒+毫秒转换为可读格式?
我的消息:
root@OpenWrt:/tmp# dmesg -h
dmesg: invalid option -- h
BusyBox v1.19.4 (2013-03-14 11:28:31 UTC) multi-call binary.
Usage: dmesg [-c] [-n LEVEL] [-s SIZE]
Print or control the kernel ring buffer
-c Clear ring buffer after printing
-n LEVEL Set console logging level
-s …Run Code Online (Sandbox Code Playgroud)