我尝试从我从 kernel.org(主线)获得的源代码make allyesconfig和 和编译内核make allmodconfig,但两个构建都导致内核无法启动。
我在想,通过编译所有内容,它应该可以在任何硬件上运行。我究竟做错了什么?
以及如何编译工作内核?
如果我想为 ARM 架构构建自定义内核,是否需要:
a) 从 kernel.org 下载内核,对内核进行更改,使用一些交叉编译器(如代码源或其他东西)构建它
b) 从某处找到一个 ARM 特定的内核,找到一些补丁,使用一些 ARM 特定的工具编译它?
可以为 ARM 架构构建任何自定义内核吗?
一般来说,我对内核知之甚少。
我正在编写一个 linux 内核模块来报告统计信息并发送一些日志消息。我可以使用 syslog 来完成这项工作吗?还是printk唯一的办法?
当我尝试使用以下命令配置 Linux 内核时出现链接器错误menuconfig:
# make menuconfig
HOSTLD scripts/kconfig/mconf
/usr/local/bin/ld: scripts/kconfig/lxdialog/checklist.o: undefined reference to symbol 'acs_map'
/usr/local/bin/ld: note: 'acs_map' is defined in DSO /lib/libtinfo.so.5 so try adding it to the linker command line
/lib/libtinfo.so.5: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
make[1]: *** [scripts/kconfig/mconf] Error 1
make: *** [menuconfig] Error 2
Run Code Online (Sandbox Code Playgroud)
知道它有什么问题吗?我正在运行 CentOS 6.2,并且我确定我已经安装了所有需要的库。
我一直想知道内核如何在启动期间将控制权传递给第三方代码,或者特别是特定于发行版的代码。
我在 GRUB 的配置文件中四处寻找,怀疑将一个特殊的参数传递给内核,让它知道在成功启动后要做什么,但找不到任何东西。这使我怀疑内核查找的根分区上可能存在某些文件。
如果有人能对此事有所了解,我将不胜感激。发行版如何实现这一点?
我已经读到我可以在没有 initrd 的情况下启动内核,并且我还读到在 initrd 阶段加载了额外的模块——据我所知,对于内核中未包含的必要驱动程序。
如果我使用 构建内核make defconfig && make,我可以期望内核在哪种硬件上启动?一个相当现代的桌面?虚拟机?
我什么时候真的需要 initrd/initramfs?
我正在尝试组合一个最小的系统来在 Virtualbox 上进行测试,如果可能的话,我想保持简单而不使用 initrd。
我想添加i915.i915_enable_rc6=1为内核行,如here所述,但我不确定在哪里/如何准确。
我在mkinitcpio.conf.
它们是在内核启动时自动加载还是udev在我没有在模块列表中指定它们时自动加载rc.conf?
由于各种原因,我已经构建了一个支持可加载模块的内核,其中之一是无需重新启动即可编译和加载模块的可能性。当我需要一个我没有在内核配置中启用的模块时,这应该很有用。
现在,有了像 nouveau 这样的驱动程序,只需转到源目录并运行make M=drivers/gpu/drm/nouveau. 如何在iptables不编译整个内核并重新启动的情况下构建更新的模块?甚至有可能吗?
每个进程有2个内存区域:用户空间(高内存)和内核空间(低内存)。在内核空间中,前 896 MB 是否用于映射内核代码(不完全是 1 GB)?这意味着,当用户空间应用程序执行系统调用或与内核相关的任何事情时,内核会引用内核空间来执行系统调用,是吗?
内核空间预留的128MB(用于高端内存(用户空间)访问),是不是都是用户空间内存区域的引用?那么,内核进程可以通过引用这个区域来访问任何用户空间,这是真的吗?
这就是为什么这个区域在内核空间中被称为 highmem 的原因,不是吗?