본문 바로가기
RaspberryPi

[Raspberry Pi Kernel] Kernel menuconfig로 GPIO enable하고 다시 LCD 켜기

by TYB 2024. 2. 16.
반응형

 

 

[RaspberryPi Kernel] Ubuntu에서 Raspberry Pi Kernel system call 함수 구현

시작 전에 배경지식부터 함양 시스템 콜 함수란 user mode process와 kernel간의 interface-> kernel의 자료구조 및 HW에 대한 접근 불가 user mode process가 kernel이 가지고 있는 시스템의 상태 정보를 열람하거

program-developers-story.tistory.com

 

저번 글에서  Kernel menuconfig로 GPIO disable해놔서 GPIO로 전원을 받는 7인치 LCD가 부팅 이후 안켜졌었는데 다시 키도록 하겠다.

 

 

ubuntu@ubuntu8:~/pi_bsp/kernel/linux$ vi build.sh
  1 #make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2711_defconfig
  2 #make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  3 #make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j4
  4 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage

3번줄 가서 yy p 해서 3번줄 4번줄에 복붙하고 3번 주석처리

4번 줄 가서 zImage 뒤에서 D로 커서 뒤로 다 지우기

 

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

 

Device Driver -> GPIO support -> /sys/class/gpio 스페이스바 눌러서 체크다시 해주면 charater device도 같이 enable 될거임.

 

이제 커널, 시스템콜 함수를 빌드

ubuntu@ubuntu8:~/pi_bsp/kernel/linux$ ./build.sh

 

 

파이로 넘겨야겠죠

 

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

 

 


라즈베리파이에서 nfs공유폴더 들어가고 zImage를 kernel 위치에 넣어주고 sync한번 쳐주고 재부팅

pi@pi08:/mnt/ubuntu_nfs$ ls -l zImage
-rwxrwxr-x 1 pi pi 7605312 Feb 15 16:18 zImage

pi@pi08:/mnt/ubuntu_nfs$ sudo cp zImage /boot/firmware/kernel7l.img
pi@pi08:/mnt/ubuntu_nfs$ sync
pi@pi08:/mnt/ubuntu_nfs$ sudo reboot

 

 

uname -a 를 쳐서  커널 시간 확인해주고 09:17 좋아요~

 

LCD 잘 켜져있는지만 확인하쇼!

 

 

이거까지 되면 진짜 끝!

pi@pi08:~$ cd systemcall_test/
pi@pi08:~/systemcall_test$ ./syscall_app
input value = 5
mysyscall return value = 25

 

 

 


 

printk로 출력한 메시지 출력하는 방법

 

한페이지씩 볼 때

pi@pi08:~/systemcall_test$ dmesg | more

f를 누르면 넘어가는 듯

 

 

이건 버퍼라서 한번 출력하면 비워짐. 고로 새로 출력된 내용만 출력되는거임.

pi@pi08:~/systemcall_test$ sudo cat /proc/kmsg

 

 

kmsg의 메모리는 커널에 할당되어 있는 메모리 공간이고 이런식으로 명령어를 치면 마운트해서 출력해주는거임.

 

 

kernel과 boot 시 발생되는 log들을 저장함. 근데 kernel log가 안보임....

 

실행중인 프로세스를 찾아봐도 안보이고

 

apt에서 패키지를 받아야 되겠음.

 

 


만약 패키지를 다운받아야되는데 이름이 어렴풋이 기억나는데 정확하진 않을 때 찾는 방법

 

 

pi@pi08:/var/log $  sudo apt update

pi@pi08:/var/log $ apt-cache search klogd

생각한 명령어가 없다.

 

구글링하겠다.

 

어쨋든 이런식으로 찾을 수 있다는 거~


pi@pi08:/var/log $ sudo apt install rsyslog

 

찾았다. 설치하고 다시 커널 로그가 찍히도록 실행한번 해주고

pi@pi08:~/systemcall_test$ ./syscall_app %
input value = 6
mysyscall return value = 36

 

생겼죠?

pi@pi08:/var/log $ ls kern.log
kern.log



pi@pi08:/var/log $ cat kern.log
2024-02-16T10:52:45.630016+09:00 pi08 kernel: [ 5260.889173] Welcome to WCM's Embedded System!! app value=6

 

 

 

pi@pi08:/var/log $ tail -5 kern.log
2024-02-16T10:52:45.630016+09:00 pi08 kernel: [ 5260.889173] Welcome to WCM's Embedded System!! app value=6
2024-02-16T10:54:50.460025+09:00 pi08 kernel: [ 5385.725203] Welcome to WCM's Embedded System!! app value=5
2024-02-16T10:54:59.890001+09:00 pi08 kernel: [ 5395.149563] Welcome to WCM's Embedded System!! app value=4
pi@pi08:/var/log $ head -5 kern.log
2024-02-16T10:52:45.630016+09:00 pi08 kernel: [ 5260.889173] Welcome to WCM's Embedded System!! app value=6
2024-02-16T10:54:50.460025+09:00 pi08 kernel: [ 5385.725203] Welcome to WCM's Embedded System!! app value=5
2024-02-16T10:54:59.890001+09:00 pi08 kernel: [ 5395.149563] Welcome to WCM's Embedded System!! app value=4

 


우분투에선 설치 안해도 있음

/var/log 디렉터리 들어가면 

 

 


결론:

1.

dmesg 하면 부팅하고 지금까지 쌓여있는게 한번에 다 출력됨. 쌓이면 출력하는데 1~2분 걸림 

dmesg | grep welcome 이런식으로 찾는거도 가능하긴함.

2.

sudo cat /proc/kmsg 를 치면 버퍼에 있는 내용을 비워주면서 출력해줌 고로 한번만 출력이 가능함. 최근 커널 메시지를 볼 때 유용함.

3.

apt에서 rsyslog 패키지를 설치하고

/var/log 디렉터리에서

tail -f kern.log를 치면 명령어를 실행할 때마다 실시간으로 확인이 가능하다.

pi@pi08:/var/log $ tail -5 kern.log를 쓰면 5개만 출력하고 끝남.


 

원하는거 쓰세영 ~

반응형