안녕하세요.
이전 시간에 Kernel 4.19 버전을 설치하기 위해서 몇 가지 사항을 확인했습니다.
이번에는 책에 나온 몇 가지를 추가 설정과 커널 빌디와 설치까지 해보겠습니다.
작업은 SSH Terminal로 접속해서 진행했습니다.
1. 추가 설정
(1) 언어 설정
Chrome과 한글문제를 해결하기 위해서 설치와 설정 몇 가지를 합니다.
$ sudo raspi-config
"4. Localisation Option->I1 Change Locale"에서 en_GB.UTF-8, en_US.UTF-8, ko_kr.UTF8(선택되어 있음)을 스페이스 바를 눌러 선택하고 확인 누르면 설정이 완료됩니다.
< Interesting story >
Localisation 철자가 틀렸다고 생각하시는 분이 있지 않나요? Localization 아닌가? 하신 분이 있을 것 같아서 찾아보면 아래와 갔습니다. 영국과 미국 언어의 차이
Firstly, let's tackle the spelling conundrum. The term localization is generally associated with U.S. English, while localisation is tied to British English and International English. The difference lies in the number of letters used in the words, with “z” (American English) and “s” (British and International English) being the key distinction. This is a common difference found in many words, such as globalization/globalisation and internationalization/internationalisation.
<참고자료 2>
라즈비안 업데이트를 먼저 하고 폰트 프로그램을 설치합니다.
$ sudo apt-get update
$ sudo apt-get upgrade
그런데 라즈베리 파이 OS가 오래된 버전이다 보니 에러가 발생합니다.
아래 명령어를 넣어서 리포지터리 변경을 수락하고 update와 upgrade를 수행합니다.
바로 upgrade를 하면 커널 버전도 업그레이드되기 때문에 이를 방지하기 위해서 kernel과 bootloader hold 명령어를 사용해서 업그레이드가 되지 않도록 설정합니다.
upgrade 진행하면 다운로드와 설치를 많이 하기 때문에 시간이 오래 걸립니다.
$ sudo apt update --allow-releaseinfo-change
$ sudo apt-mark hold raspberrypi-kernel raspberrypi-bootloader
$ apt-mark showhold
$ sudo apt-get update
$ sudo apt-get upgrade -y
커널을 버전을 변경하지 않으면서, 업그레이드까지 끝났다면 다시 폰트프로그램 설치합니다. 설치를 완료하면 재부팅을 해줍니다. 그리고 브라우저 실행해서 한글 관련 웹페이지를 보면 정상적 나타나는 것을 알 수 있습니다.
$ sudo apt-get install ibus ibus-hangul fonts-unfonts-core
$ sudo reboot
참고) 터미널에서 desktop 화면에 브라우저를 실행하려면 아래와 같이 실행하면 라즈베리 파이와 연결된 모니터 화면에서 실행됩니다.
터미널 프로그램에서 원격실행을 지원한다면 Host PC에서 chromium-brower가 나타납니다.
$ chromium-browser https://ko.wikipedia.org/
2. 라즈베리파이 커널 빌드
1) 라즈베리파이 리눅스 커널 다운로드
책에서 이야기한 것처럼 빌드하기 할 때 불필요한 권한 설정을 줄이기 위해서 sudo 명령으로 root 권한을 먼저 획득한 후 진행합니다. '$' 프롬프트에서 '#' 변경됩니다.
$ sudo su
라즈베리 파이 리눅스 커널을 받기 위해서 디렉터리를 생성합니다.
# mkdir rpi_kernel_src; cd rpi_kernel_src
라즈베리파이 리눅스 커널 소스를 받기 위해 유틸리티 프로그램을 몇 가지 설치합니다.
# apt-get install git bc bison flex libssl-dev vim -y
git 소스원본을 통째로 받으면 좋겠지만 용량과 시간을 줄이기 위해서, depth=1 옵션으로 최신 커밋된 내용만 가져옵니다.
# git clone --depth=1 --branch rpi-4.19.y https://github.com/raspberrypi/linux
2) 라즈베리파이 리눅스 커널 빌드
빌드할 때 매번 선언과 설정하는 것을 줄이기 위해서 스크립트로 만들어 진행합니다. 책 내용은 Raspberry pi 3 환경이라 저자 블로그의 Raspberry Pi 4 내용을 사용합니다.
rpi_kernel_src# vim build_rpi_kernel.sh
<build_rpi_kernel.sh 내용>
#!/bin/bash
echo "configure build output path"
KERNEL_TOP_PATH="$( cd "$(dirname "$0")" ; pwd -P )"
OUTPUT="$KERNEL_TOP_PATH/out"
echo "$OUTPUT"
KERNEL=kernel7l
BUILD_LOG="$KERNEL_TOP_PATH/rpi_build_log.txt"
echo "move kernel source"
cd linux
echo "make defconfig"
make O=$OUTPUT bcm2711_defconfig
echo "kernel build"
make O=$OUTPUT zImage modules dtbs -j4 2>&1 | tee $BUILD_LOG
스크립트 내용을 요약하자면,
커널 빌드했을 때 만들어지는 오브젝트와 커널 이미지를 저장할 out디렉터리를 선언하고 스크립트 변수에 저장합니다.
커널 컨피그 파일(bcm2711_defconfig) 생성하고 이를 통해 .config 파일을 생성합니다.
마지막으로 커널 소스를 빌드하고 tee 명령어로 빌드 로그를 파일에 저장합니다.
스크립트 파일 저장 후, 스크립트 파일에 실행권한을 부여하고 빌드합니다. 라즈베리 파이 내에서 빌드가 되다 보니 -j4 병렬처리를 하더라도 시간이 오래 걸립니다.
rpi_kernel_src# chmod +x build_rpi_kernel.sh
rpi_kernel_src# ./build_rpi_kernel.sh
위의 내용으로 빌드할 경우, 현재시점에서는 에러가 발생하지 않았습니다.
만약 에러가 발생한다면 rpi_build_log.txt 파일을 확인하고 커널 소스를 수정한 다음 다시 빌드해야 정상 작동합니다.
3) 라즈베리파이 리눅스 커널 설치
컴파일해서 생성한 이미지를 라즈베리 파이에 설치해야 적용된 커널을 사용할 수 있습니다. 빌드 스크립트처럼 반복하는 것을 줄이기 위해서 설치용 스크립트를 생성합니다. 이번에도 저자의 블로그의 Raspberry Pi 4 내용을 사용합니다.
rpi_kernel_src# vim install_rpi_kernel_img.sh
<install_rpi_kernel_img.sh 내용>
#!/bin/bash
KERNEL_TOP_PATH="$( cd "$(dirname "$0")" ; pwd -P )"
OUTPUT="$KERNEL_TOP_PATH/out"
echo "$OUTPUT"
cd linux
make O=$OUTPUT modules_install
cp $OUTPUT/arch/arm/boot/dts/*.dtb /boot/
cp $OUTPUT/arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
cp $OUTPUT/arch/arm/boot/zImage /boot/kernel7l.img
설치 스크립트 내용을 요약하자면, 완료한 이미지와 드라이버 파일을 boot 디렉터리와 있어야 할 곳으로 복사하는 작업을 합니다.
빌드때와 같이 스크립트 파일에 실행권한을 부여하고 실행합니다.
rpi_kernel_src# chmod +x install_rpi_kernel_img.sh
rpi_kernel_src# ./install_rpi_kernel_img.sh
재부팅하고 커널 버전을 확인하면 정상적으로 동작하고 기존의 4.19.118에서 4.19.127로 patch 번호만 바뀐 것을 확인할 수 있습니다.
이후 전처리 코드 생성 부분이 있는데 이번 글을 정리하는데 apt 업데이트와 커널 빌드하는데 시간이 오래 걸리고 내용도 조금 있다 보니 다음 글에서 정리하도록 하겠습니다.
감사합니다.
<참고 자료>
1. [도서] 디버깅을 통해 배우는 리눅스 커널의 구조와 원리, wikibook
2. U.S. English spelling vs. international English spelling
https://speechify.com/blog/localization-vs-localisation/
3. [공지] 라즈베리 파이4 에서 책의 실습을 하는 방법
https://blog.naver.com/crushhh/222041562126
'IT > Operation System' 카테고리의 다른 글
디버깅을 통해 배우는 리눅스 커널의 구조와 원리, 도서 공부하기 2 - Raspberry 4 설치(kernel 4.19) (3) | 2025.02.14 |
---|---|
디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 학습 1 - 시작 준비 (5) | 2025.02.12 |