본문 바로가기
Linux BSP

[Linux Kernel] 디바이스 드라이버 커널에 모듈로 포함하기

by TYB 2024. 2. 29.
반응형
 

[Linux Kernel] 디바이스 드라이버 커널에 빌트인으로 포함하기

3가지가 있어야 커널의 빌트인 시스템을 이용해서 컴파일 할 수 있음. 1source 2kconfig 3makefile ubuntu@ubuntu8:~/pi_bsp/kernel/linux/drivers/char$ ls Kconfig mem.c random.o Makefile mem.o raspberrypi-gpiomem.c adi.c misc.c raspberry

program-developers-story.tistory.com

이전 글에서 한 거는 디바이스 드라이버를 커널에 빌트인 해서 application을 작동시키는 거였고


 

make menuconfig로 driver -> char devices로 가서 스페이스바를 눌러 module형태로 바꿔준다.

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules

커널이랑 디바이스 드라이버 모듈도 다시 빌드

 

아까 커널에 빌트인한 거는 빠져야 함. 커널 빌드를 디바이스를 뺀걸 다시 안올리면 insmod가 될수가 없음. 이미 gpio 등록되있잖아!

 

독특한 건 .ko를 컴파일 해주고 넘겨줘야된다는 점.

 

 

 

그럼 이제 컴파일 된 커널 이미지를 라즈베리로 옮겨줘야겠죠?

 

ubuntu@ubuntu8:~/pi_bsp/kernel/linux$ cp arch/arm/boot/zImage /srv/nfs/zImage

 

라즈베리파이 켜주고 커널 업그레이드

sudo cp zImage /boot/firmware/kernel7l.img

sync
sudo reboot

 

 

 

 

pi@pi08:/lib/modules/6.1.77-v7l+/kernel/drivers/char $ sudo mkdir kcci_ledkey
pi@pi08:/lib/modules/6.1.77-v7l+/kernel/drivers/char $ cd kcci_ledkey/
pi@pi08:/lib/modules/6.1.77-v7l+/kernel/drivers/char/kcci_ledkey $ sudo cp /mnt/ubuntu_nfs/ledkey_dev.ko

 

 

pi@pi08:/lib/modules/6.1.77-v7l+ $ vi modules.dep

dep파일을 보면 의존성을 가진 코드가 1757라인 있다는 걸 보여줌

pi@pi08:/lib/modules/6.1.77-v7l+/kernel $ sudo depmod -a

커널 밑에 있는 모든 파일을 dev 파일로 만들어 주는거임.

 

cat modules 

 

sudo modprobe ledkey_dev

 

lsmod, cat /proc/devices          둘 중 아무거나 쳐도 디바이스 드라이버 등록된거 확인가능

 

sudo mknod /dev/ledkey c 230 0

sudo chmod 666 /dev/ledkey

 

./ledkey_app         application 실행

 

 

 


백업 받아주고~

ubuntu@ubuntu8:~/pi_bsp/kernel/linux$ vi /config arch/arm/configs/bcm2711_defconfig bcm2711_kccidefconfig

용량한번봐주고

ubuntu@ubuntu8:~/pi_bsp/kernel/linux$ du -h 1 ../linux

 

make clean해서 .o와 .ko파일 다 지워주고~
ubuntu@ubuntu8:~/pi_bsp/kernel/linux$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- clean mrproper

용량한번봐주고

ubuntu@ubuntu8:~/pi_bsp/kernel/linux$ du -h 1 ../linux

용량 다시 봐보면 0.8G정도 차이남 ㄷㄷ

 

.config같은 걸 다 지워줌. 필요하면 백업을 받아놔야함.

ubuntu@ubuntu8:~/pi_bsp/kernel/linux$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mrproper

 

tags 파일도 지워주자.

ubuntu@ubuntu8:~/pi_bsp/kernel/linux$ rm tags

ubuntu@ubuntu8:~/pi_bsp/kernel/linux$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- clean mrproper

용량한번봐주면 1.6G 정도

 

git이나 필요없는 패키지들도 다 삭제해줘야함. 어쨋든 일단 압축한다.

 

배포를 하려고 하면 linux폴더를 압축해서 배포해야됨.    bz2 -> j 옵션

ubuntu@ubuntu8:~/pi_bsp/kernel/linux$ tar cvfj linux_new.tar.bz2 linux

 

 

나중에 압축을 다시 풀면, 동일한 위치에 넣고 해주면 되겠죠?

압축을 풀면 다시 컴파일 해야되니까 

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2711_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j4

다 해주면 됨.

 


 

반응형