티스토리 뷰
지난 게시물에서는 라즈베리파이로 부팅을 해보았다.
https://today-is-hoho.tistory.com/73
라즈베리파이 부트스크립트 만들기
라즈베리파이에서 부트스크립트를 만들어보자. 필요한 준비물은 라즈베리파이와 Window와 WIndow 안에 vm 안에 ubuntu 그리고 USB to Serial 케이블이 필요하다. 우선 Window에 USB to Serial을 포트에 연결하
today-is-hoho.tistory.com
이번에는 라즈베리파이의 리눅스 커널을 빌드하는 방법을 알아보자.
빌드 업
~/pi_bsp$ mkdir kerenl; cd kerenl
~/pi_bsp/kerenl$ sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev
~/pi_bsp/kerenl$ sudo apt install crossbuild-essential-armhf
~/pi_bsp/kerenlgit clone --depth=1 -b rpi-6.1.y https://github.com/raspberrypi/linux
~/pi_bsp/kerenlcd linux ; pwd
kernel 빌드에 필요한 툴을 다운받고 kernel 디렉터리를 만들어서 해당 주소를 git clone하자.
크로스 컴파일, 리눅스 커널 소스 빌드, 커널 모듈설치
//크로스컴파일하는 명령어
~/pi_bsp/kerenl/linux$make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
bcm2711_defconfig
//리눅스 커널 소스를 빌드하는 명령어
~/pi_bsp/kerenl/linux$make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j4
//커널 모듈을 설치하는 명령어
~/pi_bsp/kerenl/linux$sudo env PATH=$PATH make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/media/ubuntu/rootfs modules_install
크로스컴파일하는 명령어인 경우 라즈베리4 버전 명령어이다. 라즈베리파이가 다른 버전인 경우 아래 링크를 참조
https://wikidocs.net/3243
그런다음 라즈베리 SD카드를 리더기로 읽어서 Ubuntu로 아래 파일들을 복사하자.
~/pi_bsp/kernel/linux$ sudo cp /media/ubuntu/bootfs/kernel7l.img /media/ubuntu/bootfs/$kernel7l-backup.img //기존커널 백업
~/pi_bsp/kernel/linux$ sudo cp arch/arm/boot/zImage /media/ubuntu/bootfs/kernel7l.img
~/pi_bsp/kernel/linux$ sudo cp arch/arm/boot/dts/*.dtb /media/ubuntu/bootfs/
~/pi_bsp/kernel/linux$ sudo cp arch/arm/boot/dts/overlays/*.dtb* /media/ubuntu/bootfs/overlays/
~/pi_bsp/kernel/linux$ sudo cp arch/arm/boot/dts/overlays/README /media/ubuntu/bootfs/overlays/
그리고
~/pi_bsp/kernel/linux$ sudo vi /media/ubuntu/bootfs/config.txt 에서 제일 마지막 줄에 아래 명령어를 추가해주자.
arm_64bit=0
빌드 확인
그러면 SD카드를 라즈베리파이에 읽어와서 uname -a로 잘 빌드되었는지 확인하자
현재 시간으로 커널이 업데이트 된 것을 확인할 수 있다.

그리고 lsmod 명령어를 통해 커널 모듈도 잘 설치되었는지 확인하자.
참조
책 - 사물인터넷을 위한 리눅스 프로그래밍 with 라즈베리파이
라즈베리 파이 문서(2021.7 이전) (2) 커널 빌드하기
'프로그래밍 정보 > Linux' 카테고리의 다른 글
| Ubuntu 20.04 커널 버전 수정해보기 (0) | 2023.10.09 |
|---|---|
| [linux kernel] 커널 시스템 콜 함수 구현하기 (0) | 2023.09.28 |
| 라즈베리파이 부트스크립트 만들기 (0) | 2023.09.06 |
| [리눅스] 저수준 파일 입출력과 파일 디스크립터 (0) | 2023.06.05 |
| 리눅스 따라잡기 - 디렉토리(폴더) 이동 (0) | 2022.09.17 |
- Total
- Today
- Yesterday
- 모닝독서
- SQL
- 오늘의 공부
- Linux
- CSS
- yocto
- C
- 라즈베리파이
- 초아
- Python
- var
- raspberrypi
- opencv
- Kernel
- NestJS
- 미라클모닝
- JS
- js syntax
- tailwindcss
- 스타벅스
- 재미있는
- QT
- 20.03.11.(목)
- Til
- JavaScript
- variable
- 포인터
- tailwind
- JSON
- 자바스크립트
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
