커널 시작이 실패하는 이유는 무엇입니까?

커널 시작이 실패하는 이유는 무엇입니까?

Ubuntu 12.04(커널 3.2.0-53)가 설치된 시스템에서 3.11.1 커널 이미지로 부팅하려고 합니다.

그런 다음 컴파일 make defconfig하고 이미지를 넣은 다음 /bootGRUB를 업데이트하고 재부팅합니다.

다시 시작하면 다음 메시지가 나타납니다.

EXT4-fs (sda1) : couldnt mount as ext3 due to feature incompatibilities
EXT4-fs (sda1) : couldnt mount as ext2 due to feature incompatibilities
init : unable to create device: /dev/kmsg
Root filesystem check failed

무엇이 잘못되었나요?

커널이 파일 시스템이 ext4라는 것을 알고 있다면(나는 그럴 것이라고 가정합니다) EXT4-fs (sda1), 왜 ext3/2로 마운트됩니까?


/etc/fstab:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    nodev,noexec,nosuid 0       0
# / was on /dev/sda1 during installation
UUID=7be51edc-99ae-4e6e-b863-2bef9e4adb22 /               ext4    errors=remount-ro 0       1
# /home was on /dev/sda4 during installation
UUID=e4b936e5-e1c5-4146-9710-03b0d6dfdea2 /home           ext4    defaults        0       2
# swap was on /dev/sda3 during installation
UUID=10d012d1-bbba-43f4-8e8a-8aa493435acb none            swap    sw              0       0

# Move /tmp to RAM
tmpfs /tmp tmpfs defaults,noexec,nosuid 0 0

grub.cfg이미지 항목:

menuentry 'Ubuntu, with Linux 3.11.1' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    gfxmode $linux_gfx_mode
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set=root 7be51edc-99ae-4e6e-b863-2bef9e4adb22
    linux   /boot/vmlinuz-3.11.1 root=/dev/sda1 ro   quiet splash $vt_handoff
}
menuentry 'Ubuntu, with Linux 3.11.1 (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set=root 7be51edc-99ae-4e6e-b863-2bef9e4adb22
    echo    'Loading Linux 3.11.1 ...'
    linux   /boot/vmlinuz-3.11.1 root=/dev/sda1 ro recovery nomodeset 
}

답변1

initramfs 없이 부팅하려고 합니다. 를 사용한 update-initramfs -c -k 3.11.1다음 하나를 만들어야 합니다 update-grub.

답변2

내가 보기에는 당신이 kernel.org나 다른 곳에서 Linux 커널 소스 코드를 다운로드하고 배포판 기능(예: 패키징)을 활용하지 않고 직접 컴파일한 것 같습니다.

이 작업을 수행하는 것은 확실히 가능하지만 간단한 방법보다 훨씬 더 많은 작업이 필요합니다.

불행히도 ubuntu launchpad kernel-ppa는 더 이상 유지 관리되지 않는 것 같습니다. 그렇지 않으면 다음 답변을 참조하겠습니다.https://askubuntu.com/questions/47397/how-do-i-add-the-kernel-ppa.

대신 추천해드려요http://ubuntuhandbook.org/index.php/2013/09/kernel-3-11-1-released-install-upgrade-in-ubuntu-linux-mint/여기에는 Ubuntu 사전 컴파일된 커널 3.11.1 패키지를 다운로드하고 설치하기 위한 지침이 포함되어 있습니다. 저는 우분투가 아닌 데비안을 실행 중이므로 직접 테스트하지는 않았지만 페이지에서는 이것이 Ubuntu 12.04, 12.10 및 13.10에서 작동한다고 주장하며 지침이 올바른 것으로 보입니다.

ubuntu.com의 kernel-ppa는 비공식 또는 반공식 저장소입니다. 이 도메인은 Canonical이 소유하고 있지만 비공식 커널 패키지는 지원되지 않을 수 있습니다. 자체 컴파일된 커널도 마찬가지입니다.

결론적으로:

ARCH=$(dpkg --print-architecture)
wget "http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.11.1-saucy/linux-headers-3.11.1-031101-generic_3.11.1-031101.201309141102_$ARCH.deb"

wget "http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.11.1-saucy/linux-headers-3.11.1-031101_3.11.1-031101.201309141102_all.deb"

wget "http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.11.1-saucy/linux-image-3.11.1-031101-generic_3.11.1-031101.201309141102_$ARCH.deb"

sudo dpkg -iBE linux-headers-3.11.1*.deb linux-image-3.11.1*.deb

미리 컴파일된 패키지를 다운로드하는 것보다 자신만의 커널을 컴파일하는 것을 선호한다면 3.11.1용 우분투 소스 패키지를 검색하고, 소스 코드의 압축을 풀고 dpkg-source, 빌드 종속성을 설치하고, 필요한 커널 구성 조정을 수행하여 사용하는 것이 좋습니다. 또는 유사한 도구를 사용하여 자신만의 패키지를 만들 수 있습니다 dpkg-builpackage.

다른 소프트웨어와 마찬가지로 패키지로 컴파일된 커널은 패키지되지 않은 커널보다 문제와 고통이 훨씬 적습니다. make && make install소스에서 수행하려는 경우에도 패키지를 설치하는 것보다 패키지를 설치하는 것이 거의 항상 더 좋습니다. 코드 작성의 경우 패키지 소스를 컴파일하는 것이 가장 좋습니다.

관련 정보