8.3.1. 커널의 설치
커널 빌드는 설정,
컴파일, 설치 등 몇
단계를 거쳐야 한다.
이 책의 커널을
구성하는 다른
방법은 커널 소스
트리의 README
파일을 참고하라.
다음 명령을
실행하여 컴파일을
준비한다:
make mrproper
이는 기존 컴파일
설정을 제거하여
커널 트리를 완전히
깨끗하게 한다. 커널
팀은 커널 컴파일
전에 매번 이 명령을
실행할 것을
권장한다. tar
아카이브를 이제 막
해제했다고 해서
깨끗한 상태인
것으로 믿어선 안
된다.
메뉴 기반
인터페이스를 통해
커널을 구성하라.
커널 구성에 대한
일반적인 정보는
http://www.linuxfromscratch.org/hints/downloads/files/kernel-configuration.txt를
참고하라. BLFS는
http://www.linuxfromscratch.org/blfs/view/9.1/longindex.html#kernel-config-index에서
LFS 외부 패키지의
특정 커널 구성 요구
사항에 대한 정보를
제공한다. 커널 구성
및 빌드에 대한 추가
정보는 http://www.kroah.com/lkn/에서
찾을 수 있다.
참고
make
defconfig를
실행하여 커널
구성을 시작하는
것이 좋다. 이렇게
하면 기본 구성이
현재 시스템
아키텍쳐를
고려해서 양호한
상태로 설정된다.
다음 기능을
활성화/비활성화/설정하라.
그렇지 않으면
시스템이 제대로
작동하지 않거나
전혀 부팅되지
않을 수 있다:
Device Drivers --->
Generic Driver Options --->
[ ] Support for uevent helper [CONFIG_UEVENT_HELPER]
[*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS]
Kernel hacking --->
Choose kernel unwinder (Frame pointer unwinder) ---> [CONFIG_UNWINDER_FRAME_POINTER]
시스템 요건에 따라
몇 가지 다른 옵션이
필요할 수도 있다. BLFS
패키지에 필요한
옵션 목록은
BLFS Index of Kernel Settings
(http://www.linuxfromscratch.org/blfs/view/9.1/longindex.html#kernel-config-index)를
참고하라.
참고
호스트 컴퓨터가
UEFI를 사용 중이라면,
위의 'make defconfig'는 일부 EFI
관련 커널 옵션을
자동으로 추가할
것이다.
호스트의 UEFI 부팅
환경 내에서 LFS
커널을 부팅하려면
커널에 다음
옵션이 선택되어
있어야 한다:
Processor type and features --->
[*] EFI stub support [CONFIG_EFI_STUB]
LFS 내에서 UEFI 환경을
관리을 관리하는
법에 관한 더
자세한 설명은
http://www.linuxfromscratch.org/hints/downloads/files/lfs-uefi.txt의
lfs-uefi.txt에서 다룬다.
위 설정 항목에
대한 해석:
-
support for
uevent helper
-
Udev/Eudev을 사용할 때 이
옵션을 설정하면
장치 관리에
방해가 될 수 있다.
-
Maintain a
devtmpfs
-
이렇게 하면 Udev
실행 없이도
커널에 의해
설정되는
자동화된 장치
노드가 생성된다.
그러면 Udev는 이
위에서 실행되어
권한을 관리하고
심볼릭 링크를
추가한다. 이
설정은 모든 Udev/Eudev
사용자에게
필요하다.
make menuconfig
선택적 make 환경
변수들의 의미:
-
LANG=<host_LANG_value>
LC_ALL=
-
로케일을
호스트와
동일하게
설정한다. 이는 UTF-8
리눅스 텍스트
콘솔에서 적절한
menuconfig ncurses 인터페이스
행을 출력하는
데에 필요할 수
있다.
사용할 경우,
반드시 <host_LANG_value>
를
호스트의 $LANG
변수의
값으로 대체하라.
또는 호스트의
$LC_ALL
이나
$LC_CTYPE
값을
대신 사용할 수도
있다.
또 어떤 상황에서는
make
oldconfig가 더 적절할
수 있다. 자세한
정보는 README
파일을 참고하라.
원한다면 커널 구성
파일인 .config
를 호스트
시스템(해당 파일이
호스트에
존재한다고
가정한다)에서 압축
해제된 linux-5.5.3
디렉토리로
복사하여 커널
설정을 건너 뛰어도
좋다. 그러나 이
옵션은 권장하지는
않는다. 모든 설정
메뉴를 탐색하고
처음부터 커널
구성을 만드는 것이
더 좋다.
커널 이미지와
모듈들을
컴파일한다:
make
커널 모듈을
사용한다면, /etc/modprobe.d
의 모듈
설정이 필요하다.
모듈 및 커널 설정에
관련된 정보는
7.3절. “장치 및 모듈
핸들링 개요”와
linux-5.5.3/Documentation
디렉토리의 커널
문서에 수록되어
있다. 또 modprobe.d(5)
도 유용할
것이다.
커널 설정에서 모듈
지원이
비활성화되지
않았다면 다음과
같이 모듈을
설치하라:
make modules_install
커널 컴파일이
완료된 후, 설치를
완료하기 위해선
추가 절차가
필요하다. 일부
파일을 /boot
디렉토리에
복사해야 한다.
경고
호스트 시스템에
별도의 /boot 파티션이
있다면 아래
지침에서 복사할
파일을 그 곳에
넣어야 한다. 가장
쉬운 방법은
호스트(chroot 외부)에서
/boot를 /mnt/lfs/boot에
바인딩하는
것이다. 호스트
시스템에서 root
유저로 다음을
실행하라:
mount --bind /boot /mnt/lfs/boot
커널 이미지의
경로는 사용 중인
플랫폼에 따라
달라질 수 있다.
아래 파일 이름은
취향껏 변경할 수
있지만, 파일 이름의
어근은 다음 절에서
설명할 부팅 절차의
자동 설정과
호환되도록 vmlinuz여야
한다. 다음 명령은 x86
아키텍쳐를
가정한다:
cp -iv arch/x86/boot/bzImage /boot/vmlinuz-5.5.3-lfs-9.1
System.map
은
커널을 위한 심볼
파일이다. 실행 중인
커널에 대한 커널
데이터 구조의
주소뿐만 아니라
커널 API에 있는 모든
함수의 엔트리
포인트를 매핑한다.
이는 커널 문제를
조사할 때 자료로
사용된다. 다음
명령을 실행하여 맵
파일을 설치하라:
cp -iv System.map /boot/System.map-5.5.3
위의 make
menuconfig 단계에서
생성된 커널 설정
파일 .config
에는 방금
컴파일된 커널에
대한 모든 설정
사항이 포함되어
있다. 나중에 참고할
수 있도록 이 파일을
보관하는 것이 좋다:
cp -iv .config /boot/config-5.5.3
리눅스 커널에 대한
문서를 설치한다:
install -d /usr/share/doc/linux-5.5.3
cp -r Documentation/* /usr/share/doc/linux-5.5.3
커널 소스
디렉토리의 파일은
root에
의해 소유되지
않는다는 점에
주의해야 한다.
패키지가 root 유저에
의해 압축 해제될
때는(우리가 chroot
안에서 그랬듯이),
그 파일들은
패키지를 압축한
사람의 컴퓨터에
있던 사용자 및 그룹
ID를 갖는다. 이는
다른 모든
패키지들에 대해선
설치 후 소스 트리가
제거되기 때문에
문제가 되지 않지만,
리눅스 소스 트리는
보통 오랫동안
보존한다. 때문에
패키징을 한
사용자의 ID 번호가
시스템의
누군가에게 할당 될
가능성이 있다.
그러면 그 사람은
커널 소스에 대한
쓰기 권한을 갖게
된다.
참고
대부분의 경우
나중에 BLFS에서
설치될 패키지에
맞게 커널 구성을
업데이트해야
한다. 다른
패키지와 달리
새로 빌드된
커널을 설치한
후에는 커널 소스
트리를 제거할
필요가 없다.
커널 소스 트리를
보존하려면 linux-5.5.3
디렉토리에서 chown -R 0:0을
실행하여 모든
파일이 root 유저에
의해 소유되도록
하라.
주의
일부 커널
문서에서는 /usr/src/linux
에 커널
소스 디렉토리를
가리키는 심볼릭
링크를 생성할
것을 권장한다.
이는 2.6 버전 이전의
커널에 한정되며,
기본 LFS 시스템이
완성되면
구축하고자 하는
패키지에 문제를
일으킬 수
있으므로 LFS
시스템에서
생성해서는 안 된다.
주의
시스템의 include
디렉토리(/usr/include
)의
헤더들은 항상 Glibc가
컴파일된 헤더, 즉
6.7절.
“리눅스-5.5.3 API
헤더”에서
설치된 수정 헤더(the
sanitised headers)여야 한다.
따라서 원시 커널
헤더나 다른 커널
수정 헤더로
대체해서는 안 된다.
8.3.2.
리눅스 모듈 로드
순서 설정
리눅스 모듈은
대부분 자동으로
로드되지만, 때로는
특별한 방법이
필요할 때도 있다.
modprobe나
insmod와
같이 모듈을
로드하는
프로그램들은 /etc/modprobe.d/usb.conf
를
이러한 목적으로
사용한다. USB
드라이버 (ehci_hcd, ohci_hcd 및
uhci_hcd)가 모듈로 빌드된
경우 올바른 순서로
로드되도록 하기
위해선 이 파일을
생성해야 한다; 부팅
시 경고 출력을
피하려면 ehci_hcd가 ohci_hcd와
uhci_hcd보다 먼저
로드되어야 한다.
다음을 실행하여 새
/etc/modprobe.d/usb.conf
파일을 생성하라:
install -v -m755 -d /etc/modprobe.d
cat > /etc/modprobe.d/usb.conf << "EOF"
# Begin /etc/modprobe.d/usb.conf
install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true
install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true
# End /etc/modprobe.d/usb.conf
EOF