소스에서 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 지침은 약간 혼란스럽고 잘못된 부분이 있습니다. 공급업체에 피드백을 제공하여 문서를 업데이트했습니다.