Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

17312
2027
233850


[라즈베리 파이] 라즈비안 커널 소스코드 내려받기 2. 라즈베리 파이 설정

이번에는 라즈비안 리눅스 커널 소스코드를 내려받고 빌드 및 설치하는 과정을 다룹니다. 이 내용은 아래 라즈베리 파이 커뮤니티에서 소개한 내용을 참고했습니다.

https://www.raspberrypi.org/documentation/linux/kernel/building.md


리눅스 유틸리티 프로그램을 설치하기

라즈비안 리눅스 커널 소스코드를 내려받기에 앞서 리눅스 유틸리티 프로그램을 설치해야 합니다. 이를 위해 다음 명령어를 입력합니다.

$ apt-get install git bc bison flex libssl-dev

이 책에서 사용한 라즈베리 파이에서 이 명령어를 입력했을 때 나오는 화면은 다음과 같습니다. 

 
그림 2.39 리눅스 필수 유틸리티 프로그램 설치

유틸리티 프로그램을 설치하는 데 약 1분 정도 시간이 걸립니다.

라즈비안 리눅스 커널 소스 코드 내려받기

이어서 리눅스 커널 소스코드를 다운로드하는 방법을 소개합니다. 다음 명령어를 입력하면 라즈비안 최신 커널 소스를 내려받을 수 있습니다.

$ git clone --depth=1 https://github.com/raspberrypi/linux

이 명령어를 라즈베리 파이 터미널에서 입력한 후 출력되는 화면은 다음과 같습니다.

root@raspberrypi:/home/pi/rpi_kernel_src# git clone --depth=1 https://github.com/raspberrypi/linux
Cloning into 'linux'...
remote: Enumerating objects: 85646, done.
remote: Counting objects: 100% (85646/85646), done.
remote: Compressing objects: 100% (65774/65774), done.
Receiving objects:  33% (28569/85646), 41.45 MiB | 1.22 MiB/s    

소스코드를 내려받는 데 약 10분 정도가 걸립니다. 커널 소스를 다 내려받고 나서 브랜치를 확인하니 rpi-4.19.y입니다.

root@raspberrypi:/home/pi/rpi_kernel_src# git branch
* rpi-4.19.y

linux 폴더에 생성되는 .git/config 파일을 열어보면 기본적으로 rpi-4.19.y 브랜치로 설정돼 있습니다. 

root@raspberrypi:/home/pi/rpi_kernel_src/linux# vi .git/config
.git/config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = https://github.com/raspberrypi/linux
    fetch = +refs/heads/rpi-4.19.y:refs/remotes/origin/rpi-4.19.y
[branch "rpi-4.19.y"]
    remote = origin
    merge = refs/heads/rpi-4.19.y

이렇게 git clone 명령어를 써서 라즈비안 리눅스 커널 소스코드를 내려받으면 최신 버전의 브랜치를 선택합니다.


리눅스 커널은 git을 통해 소스코드를 관리합니다. 브랜치(branch)는 git에서 자주 쓰는 개념으로, 프로젝트 소스코드의 큰 줄기라고 볼 수 있습니다. 라즈비안은 리눅스 커널 버전에 따라 각기 다른 브랜치를 운영합니다.


이 책에서는 리눅스 커널 4.19.60 버전을 기준으로 빌드 및 테스트를 마쳤습니다. 이 책에서 다루는 리눅스 커널 버전에 맞춰 커널 코드를 내려받기를 권장합니다. 이를 위해 rpi-4.19.y 브랜치를 선택해야 합니다.

다음은 브랜치를 rpi-4.19.y로 지정해 라즈비안 리눅스 커널 코드를 다운로드하는 명령어입니다.

$ git clone --depth=1 --branch rpi-4.19.y https://github.com/raspberrypi/linux

root@raspberrypi:/home/pi/rpi_kernel_src# git clone --depth=1 --branch rpi-4.19.y https://github.com/raspberrypi/linux
Cloning into 'linux'...
remote: Enumerating objects: 122739, done.
remote: Counting objects: 100% (122739/122739), done.
remote: Compressing objects: 100% (74357/74357), done.
remote: Total 122739 (delta 54284), reused 72109 (delta 47307), pack-reused 0
Receiving objects: 100% (122739/122739), 185.97 MiB | 1.17 MiB/s, done.
Resolving deltas: 100% (54284/54284), done.
Checking connectivity... done.
Checking out files: 100% (61885/61885), done.

다시 반복하지만 가급적이면 이 책에서 사용하는 4.19 버전에 맞춰 라즈비안 리눅스 커널 소스코드를 다운로드하길 바랍니다. 2021년이 되면 라즈비안 기본 브랜치가 아마 새로운 버전으로 설정될 수 있습니다. 즉, git clone 명령어로 브랜치 이름을 지정하지 않으면 최신 브랜치 소스코드를 다운로드하게 됩니다.

* 유튜브 강의 동영상도 있으니 같이 들으시면 더 많은 걸 배울 수 있습니다. 






 
라즈베리 파이 설정 

라즈베리 파이 설치하기
라즈베리 파이 기본 설정하기 
라즈비안 리눅스 커널 빌드

"혹시 궁금한 점이 있으면 댓글로 질문 남겨주세요. 아는 한 성실히 답변 올려드리겠습니다!" 

Thanks,
Austin Kim(austindh.kim@gmail.com)


# Reference: 리눅스 커널

디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 1

디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 2




핑백

덧글

  • 컴친구 2019/10/15 16:57 # 삭제 답글

    커널 설정이나 빌드할때 "make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig, make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j4" 처럼
    ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 를 넣어줘야 하는데 셀 스크립터 작성시에는 어떻게 넣어줘야 할까요
  • AustinKim 2019/10/21 09:07 #

    아래는 라즈비안을 빌드할 때 shell script 코드입니다. 참고하세요.
    #!/bin/bash

    export PATH=$PATH:~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
    KERNEL=kernel7

    echo "configure build output path"
    TOP_PATH=$( cd "$(dirname "$0")" ; pwd )
    OUTPUT="$TOP_PATH/out"

    BUILD_LOG="$TOP_PATH/rpi_build_log.txt"

    rpi_build_start_time=`date +%s`

    OUTPUT_PATH=$( cd "$(dirname "$0")" ; pwd )
    OUTPUT="$OUTPUT_PATH/out"

    pushd linux > /dev/null

    # make config
    make ARCH=arm O=$OUTPUT CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig -j16 2>&1

    # build kernel source
    make ARCH=arm O=$OUTPUT CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j16 2>&1 | tee $BUILD_LOG
  • AustinKim 2019/10/21 09:07 # 답글

    아래는 라즈비안을 빌드할 때 shell script 코드입니다. 참고하세요.
    #!/bin/bash

    export PATH=$PATH:~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
    KERNEL=kernel7

    echo "configure build output path"
    TOP_PATH=$( cd "$(dirname "$0")" ; pwd )
    OUTPUT="$TOP_PATH/out"

    BUILD_LOG="$TOP_PATH/rpi_build_log.txt"

    rpi_build_start_time=`date +%s`

    OUTPUT_PATH=$( cd "$(dirname "$0")" ; pwd )
    OUTPUT="$OUTPUT_PATH/out"

    pushd linux > /dev/null

    # make config
    make ARCH=arm O=$OUTPUT CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig -j16 2>&1

    # build kernel source
    make ARCH=arm O=$OUTPUT CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j16 2>&1 | tee $BUILD_LOG
  • 뉴비 2020/04/07 00:01 # 삭제 답글

    임베디드 시스템에 관심을 갖게되어 여기까지 오게된 공대생 4학년 학생입니다
    좋은 자료 감사합니다~~
  • AustinKim 2020/04/07 07:37 #

    보신 자료가 많은 도움이 됐으면 좋겠습니다. 즐거운 하루 되세요.

    Thanks,
    Austin Kim
  • 견정 2021/03/14 02:17 # 삭제 답글

    안녕하세요.


    커널을 빌드 후 설치하고 있는데
    에러가 발생하여 문의드립니다.

    사용하는 상태는 아래와 같습니다.
    1. 기존에 사용하던 라즈비안을 재설치하지 않음
    2. 리눅스 소스 삭제 후 다시 책의 내용대로 받음
    3. 빌드는 완료되어 out 디렉토리에 저장되어있음

    ./install_rpi_kernel_img.sh
    /out
    make[1]: Entering directory '/out'

    ERROR: Kernel configuration is invalid.
    include/generated/autoconf.h or include/config/auto.conf are missing.
    Run 'make oldconfig && make prepare' on kernel src to fix it.

    /home/serum/linux/Makefile:590: include/config/auto.conf: No such file or directory
    make[1]: *** [/home/serum/linux/Makefile:641: include/config/auto.conf] Error 1
    make[1]: Leaving directory '/out'
    make: *** [Makefile:146: sub-make] Error 2
    cp: cannot stat '/out/arch/arm/boot/dts/*.dtb': No such file or directory
    cp: cannot stat '/out/arch/arm/boot/dts/overlays/*.dtb': No such file or directory
    cp: cannot stat '/out/arch/arm/boot/dts/overlays/README': No such file or directory
    cp: cannot stat '/out/arch/arm/boot/zImage': No such file or directory

    감사합니다
  • AustinKim 2021/03/14 10:25 #

    라즈비안 커널이 설치되지 않아 고생이 많으십니다.
    다른 독자 분들께서도 유사한 문제를 겪었는데, 대부분 빌드 스크립트를 입력하시다가 오타를 입력해 이런 어려움을 겪는 것 같습니다.

    아래 링크에 빌드 스크립트를 올려 놨으니, 빌드 스크립트를 내려 받으신 다음에,
    http://rousalome.egloos.com/10024852

    내려받은 빌드 스크립트를 실행해 라즈비안 커널을 빌드해보시겠어요? 여기서 주의해야 할 점은 이미 빌드한 out 디렉터리를 반드시 지우시고 다시 빌드를 하셔야 합니다.

    실전 프로젝트를 하다보면 누구나 겪는 현상(저도 이런 문제를 만난 적이 있어요)이니 스트레스를 너무 받지 마시고 차근 차근 진행하셨으면 좋겠습니다.

    감사합니다.
  • 견정 2021/03/14 13:05 # 삭제 답글

    답변 주셔서 감사합니다.

    안그래도 Make O를 숫자 0으로 입력해 버리는 대참사를 겪어서
    아... 이럴때도 있지...라는 생각과 함께 '내탓이오'를 외치고 있습니다

    주말임에도 불구하고 빠르게 답변 주신 점 감사드리며, 문제 발생 시 다시 글을 올리겠습니다.

    감사합니다.
  • AustinKim 2021/03/14 22:31 #

    커널을 빌드할 때 누구나 겪을 수 있는 시행착오인 것 같네요.
    공유 드린 빌드 스크립트로 아마 잘 빌드가 될 것이니 너무 걱정하지 마세요.

    감사합니다.
댓글 입력 영역