Ubuntu 12.04(커널 3.2.0-53)가 설치된 시스템에서 3.11.1 커널 이미지로 부팅하려고 합니다.
그런 다음 컴파일 make defconfig
하고 이미지를 넣은 다음 /boot
GRUB를 업데이트하고 재부팅합니다.
다시 시작하면 다음 메시지가 나타납니다.
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
소스에서 수행하려는 경우에도 패키지를 설치하는 것보다 패키지를 설치하는 것이 거의 항상 더 좋습니다. 코드 작성의 경우 패키지 소스를 컴파일하는 것이 가장 좋습니다.