이전 글에서 한 거는 디바이스 드라이버를 커널에 빌트인 해서 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
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
다 해주면 됨.
'Linux BSP' 카테고리의 다른 글
[Linux Kernel] 디바이스 드라이버 커널에 빌트인으로 포함하기 (0) | 2024.02.29 |
---|---|
[Linux Device Driver] 입출력 다중화(Poll)과 Blocking I/O를 구현한 디바이스 드라이버 (1) | 2024.02.28 |
[Device Driver] 커널 타이머 GPIO제어하는 모듈 프로그램 디바이스 드라이버 프로그램으로 바꾸기 (0) | 2024.02.28 |
[Linux Device Driver] 입출력 다중화 (1) | 2024.02.28 |
[Linux Device Driver] Blocking I/O (0) | 2024.02.28 |