임베디드를 좋아하는 조금 특이한 개발자?

[Yocto Project] Linux kernel module 개발 본문

Embedded/Yocto Project

[Yocto Project] Linux kernel module 개발

Gordon_ 2025. 4. 8. 05:58

- 개발 환경

개발 보드 : Raspberrypi 4

WSL2 (Ubuntu 22.04 LTS)

Yocto Project : Scarthgap


0. 사전 작업 (리눅스 이미지 빌드)

https://littlebitodd-developer.tistory.com/27

 

[Yocto Project] RaspberryPI4를 위한 리눅스 이미지 빌드

1. 개발 환경WSL2 (Ubuntu 22.04 LTS)개발 보드 : Raspberrypi 4 2. 필요 패키지 설치sudo apt install build-essential chrpath cpio debianutils diffstat file gawk gcc git iputils-ping libacl1 liblz4-tool locales python3 python3-git python3-jinja2

littlebitodd-developer.tistory.com

 

1. 새로운 레이어 생성

반드시 build 폴더 안에서 명령어를 입력해주세요.!

만약 bitbake-layers 명령어가 없다면 "source oe-init-build-env (build folder)"를 했는지 확인해보세요.

# Poky 폴더에 meta-modules 레이어 생성
bitbake-layers create-layer ../meta-modules

# meta-modules 레이어 추가
bitbake-layers add-layer ../meta-modules

 

2. 예제 레시피를 새로 생성한 레이어에 추가

  Yocto는 친절하게 기본적으로 제공하는 meta-skeleton 안에 예제 레시피를 작성해놨습니다. 우린 그걸 단순히 새로 생성한 레이어에 붙여넣어 사용하도록 하겠습니다.

cp ../meta-skeleton/recipes-kernel ../meta-modules/

새로 생성한 레이어에 예제 레시피 붙여넣기

위 사진에서 보이는 hello-mod가 우리가 사용할 레시피입니다.

 

3. 레시피 내 파일 확인

hello-mod 레시피 파일 구조

 

여기서 files 폴더 내 hello.c의 내용을 확인해보면 가장 기본적인 모듈 구조를 미리 작성해두었습니다.

hello.c의 파일 내용

4. 리눅스 이미지 빌드

local.conf 파일 내 "hello-mod" 레시피를 추가합니다.

IMAGE_INSTALL:append = " hello-mod"

 

이제 리눅스 이미지를 빌드합니다.

bitbake core-image-base

 

이제 빌드한 이미지를 SD카드에 설치하고 라즈베리파이를 부팅합니다.

 

5. 모듈 설치 및 삭제 실습

라즈베리파이에서 모듈을 설치 및 삭제를 하여 정상작동하는지 실행합니다.

# hello 모듈 설치
modprobe hello

# hello 모듈 삭제
rmmod hello

정상적으로 설치 및 삭제된 모듈

 

6. 참고 사항

6.1. 단순히 모듈만 빌드

 모듈을 개발하면서 에러가 없는지 해당 모듈만 빌드하고 싶은 경우가 있을 것입니다. 하지만 매번 이미지를 빌드하면 시간이 오래 걸리기 때문에 해당 모듈만 빌드하고 싶을 것입니다. 그런 경우 hello-mod 만 빌드를 하면 됩니다.

bitbake hello-mod

 

 

단, 단순히 모듈만 빌드 한 것이므로 실제 이미지에 적용하기 위해서는 이미지를 빌드하여야 합니다.

6.2. 리눅스 부팅시 자동적으로 module 설치

해당 내용은 사용하고 있는 Init manager에 따라 적용 방법이 달라지기 때문에 따로 포스트로 작성하도록 하겠습니다.