커널 2.6.33 이후 버젼 커널 컴파일하시려는 분들 주의하세요

커널 2.6.33 이후 버젼 커널 컴파일하시려는 분들 주의하세요.
현재 루시드나 카르믹 이하 kernel-package(저는 kernel package version 11.001-0.1)
에 문제가 있어서 make-kpkg 맨 마지막에 이런 에러가 날것입니다.

[quote:gt8ohadk]making target install/linux-image-2.6.33-reandr-r3 [new prereqs: ]======
This is kernel package version 11.001-0.1.
echo "The UTS Release version in include/linux/version.h"; echo " "" "; echo "does not match current version:"; echo " "2.6.33-
reandr-r3" "; echo "Please correct this."; exit 2
The UTS Release version in include/linux/version.h
""
does not match current version:
"2.6.33-reandr-r3"
Please correct this.
make: *** [install/linux-image-2.6.33-reandr-r3] 오류 2[/quote:gt8ohadk]

해결 방법은 데비안 최신 패키지(kernel-package_12.033.dsc kernel-package_12.033.tar.gz) 를
가져와서 컴파일 설치해주는 겁니다.

[code:gt8ohadk]$ wget http://ftp.de.debian.org/debian/pool/main/k/kernel-package/kernel-package_12.033.dsc
$ wget http://ftp.de.debian.org/debian/pool/main/k/kernel-package/kernel-package_12.033.tar.gz

$ dpkg-source -x kernel-package_12.033.dsc
$ cd kernel-package-12.033
$ debuild -us -uc
$ sudo dpkg -i ../kernel-package_12.033_all.deb[/code:gt8ohadk]

아쉽게도 루시드 kernel-package 에는 아직 버그 패치가 적용되지 않은걸로 보이고 그럴 의사도 없어 보입니다.

kernel-package_12.033 를 설치후 한가지 문제가 있었습니다.
만들어진 커널 image deb패키지를 설치해주는 과정에서 intrd.img를 만들어 줘야하는데 그러질 못해서 수동으로 해야했습니다.
/boot/ 디렉토리에 새 램디스크 이미지가 잘 생성됐는지 확인하시고 없으면 아래같이 만들어 주세요

[b:gt8ohadk]sudo mkinitramfs -o /boot/initrd.img-2.6.33-reandr-r3 2.6.33-reandr-r3[/b:gt8ohadk]

또는

[b:gt8ohadk]sudo update-initramfs -c -k 2.6.33-reandr-r3[/b:gt8ohadk]

sudo update-grub (grub2쓰시는 분들은 update-grub2 하세요)

[quote:gt8ohadk]추가 정보

kernel-package_12.033 설치한 뒤에도 initrd 이미지가 생성되지 않는것은 관련 스크립트를
자동으로 복사해주지 못하기 때문이네요.

[b:gt8ohadk] $ sudo cp /usr/share/kernel-package/examples/etc/kernel/postinst.d/initramfs /etc/kernel/postinst.d/[/b:gt8ohadk]
[b:gt8ohadk] $ sudo cp /usr/share/kernel-package/examples/etc/kernel/postrm.d/initramfs /etc/kernel/postrm.d/[/b:gt8ohadk]

해주신뒤 make-kpkg 로 다시 deb 패키지를 만들어 주시면 deb 설치시 정상적으로 initrd 이미지가 만들어 지고 수동으로 update-grub 하실필요가 없어집니다.[/quote:gt8ohadk]

[b:gt8ohadk]사족:))[/b:gt8ohadk]

혹시 git 버젼 최신 커널로 컴파일 하시는 분이 계시다면 section mismatch 경고에 신경을 쓰세요.
커널 컴파일에서는 경고가 상당히 중요한 의미를 갖고 있고 새커널로 부팅했을때 커널 패닉에 빠지는 원인이 될수 있습니다. section mismatch경고를 사소하다고 생각해서인지 릴리스 커널이 아닌한 git 버젼 코드에서는
잘 고쳐 주지않는 경향이(저만 느끼는 건가요?)있는 듯 보입니다. 컴파일 시에 항상 [b:gt8ohadk]CONFIG_DEBUG_SECTION_MISMATCH=y [/b:gt8ohadk]를 덧붙인후 컴파일 하세요. 이 옵션 없이는 단순히 경고만 하고 자세한 내용을 보여주지 않습니다.

제가 사용한 옵션입니다.

[b:gt8ohadk]CONFIG_DEBUG_SECTION_MISMATCH=y fakeroot make-kpkg --initrd --append-to-version=-reandr-r3 --revision="3" kernel_image kernel_headers[/b:gt8ohadk]

이번에 git 최신버젼 컴파일을 해보니 section mismatch 경고가 하나 있었습니다.

[code:gt8ohadk]WARNING: drivers/pci/built-in.o(__ksymtab+0x1a0): Section mismatch in reference from the variable __ksymtab_pci_register_set_vga_state to the function .init.text:pci_register_set_vga_state()
The symbol pci_register_set_vga_state is exported and annotated __init
Fix this by removing the __init annotation of pci_register_set_vga_state or drop the export.[/code:gt8ohadk]

drivers/pci/pci.c를 열고

EXPORT_SYMBOL(pci_register_set_vga_state);

란 항목을 찾아서 삭제해주면 문제가 해결됩니다.

혹시라도 /etc/kernel-img.conf 안에
update-grub 이 주석처리되어 있지 않은지 확인하시고 만약 주석처리되어 있으면 주석표시를 없애 주세요.

[quote:mnxwxijn]do_symlinks = yes
relative_links = yes
do_bootloader = no
do_bootfloppy = no
do_initrd = yes
link_in_boot = no
postinst_hook = /sbin/update-grub
postrm_hook = /sbin/update-grub
[/quote:mnxwxijn]

위처럼 되어 있어야 합니다.

$ uname -a
Linux reandr 2.6.34-rc1-reandr-r4 #1 Wed Mar 10 05:19:48 KST 2010 i686 GNU/Linux

현재 cdrom 관련 문제가 있긴하지만 별문제없이 잘 돌아가고 있습니다.