从源代码构建 Centos-6/elrepo 3.10.19 内核后出现“内核恐慌 - 未同步”

从源代码构建 Centos-6/elrepo 3.10.19 内核后出现“内核恐慌 - 未同步”

我需要从源代码重建 Centos-6 / elrepo 3.10.19 内核。

背景:GVision触摸屏驱动程序与> 3.8的内核不兼容,需要源代码补丁来添加代码以避免与其触摸屏驱动程序发生冲突。我的第一步是从源代码构建一个未修改的驱动程序,该驱动程序在我尝试应用 GVision 补丁之前可以正常工作。

当我如下所示构建内核时,内核无法正确启动(手动输入!):

Kernel panic - not syncing: Attempted to kill init! exitcode=0x000000100
<some register dumps>
dump_stack
panic
remote_function+0x38/0x40
find_new_reaper_0x512/0x160
forget_original_parent+0x34/0x250
perf_cgroup_switch+0x160/0x160
exit_notify+0x16/0x120
do_exit+0x1b4/0x400
do_group_exit_0x3e/0xb0
SyS_exit_group_0x3e/0xb0
sysenter_do_call+0x12/0x28
drm_kms_helper: panic occurred, swithcing back to text console

这是我如何构建内核的https://fedoraproject.org/wiki/BuildingUpstreamKernel

Get config file elrepo used:
- First, get the config files that were used to build the elrepo kernel
- - wget http://elrepo.org/linux/kernel/el6/SRPMS/kernel-t-3.10.19-1.el6.elrepo.nosrc.rpm
- - rpm -i kernel-lt-3.10.19-1.el6.elrepo.nosrc.rpm
The key thing that you want from here is rpmbuild/SOURCES/config-3.10.19-i686
Next, get the kernel source
- wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.19.tar.xz
Change perms on /usr/src/kernels
- chmod o+w /usr/src/kernels

Then, as non-root
- cd /usr/src/kernels
- tar xJf ~/linux-3-10-19.tar.xz
- cd linux-3-10-19
- copy the config file from the rpmbuild/SOURCES/config-3.10.19-i686 to ./.config
- edit the Makefile to make a unique kernel name with an extesion in the variable "EXTRAVERSION"
- make bzImage && make modules

As root
- make modules_install
- make install

这一切都干净地完成

在/boot中,原始和新建的vmlinuz和System.map文件大小相同(但md5sum不同),而新建的initramfs要小得多。

drwxr-xr-x 3 root root     1024 Nov 11 18:23 boot
-rw-r--r-- 1 root root   142933 Nov 12 23:22 config-3.10.19-1.el6.elrepo.i686
drwxr-xr-x 3 root root     1024 Aug  5  2011 efi
drwxr-xr-x 2 root root     1024 Nov 14 20:07 grub
-rw-r--r-- 1 root root 16589977 Nov 14 14:16 initramfs-3.10.19-1.el6.elrepo.i686.img
-rw-r--r-- 1 root root  4645843 Nov 14 20:07 initramfs-3.10.19-MDV1.img
drwx------ 2 root root    12288 Aug  5  2011 lost+found
-rw-r--r-- 1 root root   254858 Nov 12 23:23 symvers-3.10.19-1.el6.elrepo.i686.gz
lrwxrwxrwx 1 root root       29 Nov 14 20:06 System.map -> /boot/System.map-3.10.19-MDV1
-rw-r--r-- 1 root root  2342208 Nov 12 23:22 System.map-3.10.19-1.el6.elrepo.i686
-rw-r--r-- 1 root root  2342208 Nov 14 20:06 System.map-3.10.19-MDV1
lrwxrwxrwx 1 root root       26 Nov 14 20:06 vmlinuz -> /boot/vmlinuz-3.10.19-MDV1
-rwxr-xr-x 1 root root  4868224 Nov 12 23:22 vmlinuz-3.10.19-1.el6.elrepo.i686
-rw-r--r-- 1 root root  4868224 Nov 14 20:06 vmlinuz-3.10.19-MDV1

我缺少哪一步?

====已解决====

这里的关键问题是我生成的 initramfs 缺少原始 elrepo 分布式 initramfs 中的大量材料。正如 @terdon 指出的那样,其中缺少一些对于成功启动显然至关重要的东西。

我不知道为什么“make install”创建的 initramfs 不起作用——我没有深入研究这一点。

重新创建 initramfs:

cd /boot
dracut -f initramfs-3.10.19.el6.elrepo.i686-MDV1.img 3.10.19.el6.elrepo.i686-MDV1

使用新的 initramfs,该内核可以干净地启动。

在深入研究时,我发现 /boot 中的配置文件与我从 elrepo 存档中提取的配置文件完全相同,因此可以消除 elrepo 配置文件的 wget。

通过从源代码构建的干净流程,我能够应用源代码补丁来使 GVision 触摸屏正常工作。 GVision 说明有点令人困惑,并且在某些地方不正确,我已向供应商提供反馈以更新他们的文档。

相关内容