본문 바로가기
반응형

Linux BSP47

[Linux Kernel] 디바이스 드라이버 커널에 모듈로 포함하기 [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형.. 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 raspberrypi-gpiomem.ko agp misc.o raspberrypi-gpiomem.mod apm-emulation.c modules.order raspberrypi-gpiomem.mod.c applicom.c mspec.c raspberrypi-gpiomem.mod.o applicom.h mwave raspberrypi-gpiomem.o broadco.. 2024. 2. 29.
[Linux Device Driver] 입출력 다중화(Poll)과 Blocking I/O를 구현한 디바이스 드라이버 지금까지 디바이스 드라이버에서 했던 모든 걸 종합해서 한번 만들어볼게유 사용한 기술: 입출력 다중화 Poll Blocking I/O ioctl 함수 커널 타이머 코드임다. ubuntu@ubuntu8:~/pi_bsp/drivers/keyled_wcm$ cat Makefile APP := keyled_app MOD := keyled_dev OBJ := $(APP).o obj-m := $(MOD).o CROSS = ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- CC := arm-linux-gnueabihf-gcc KDIR := /home/ubuntu/pi_bsp/kernel/linux PWD := $(shell pwd) default:$(OBJ) $(MAKE) -C $(KDIR.. 2024. 2. 28.
[Device Driver] 커널 타이머 GPIO제어하는 모듈 프로그램 디바이스 드라이버 프로그램으로 바꾸기 [Device Driver] 어플리케이션 없이 insmod만으로 동작하는 모듈 프로그램으로 커널 타이머 GPIO제어 이전 글에서 코드를 향상시켜봅니다. [Device Driver] 어플리케이션 없이 insmod만으로 동작하는 모듈 프로그램으로 커널 타이머 인터럽트 어플리케이션 없이 insmod만으로 동작하는 모듈 프로그램으 program-developers-story.tistory.com 이전 두 글에서 진행한 kernel timer와 모듈 프로그램을 합쳐서 device file 위에 kernel timer로 진행한 모듈프로그램을 device file로 바꿔보자구~ Makefile APP := kerneltimer_app MOD := kerneltimer_dev SRC := $(APP).c obj-m :.. 2024. 2. 28.
[Linux Device Driver] 입출력 다중화 [Linux Device Driver] 블록 IO ㅇ program-developers-story.tistory.com 이전 코드의 문제점은 led를 켜고 싶으나, 잠들어 있어서 값을 읽어오지 못하는 상황이 발생하는거임. 즉, led를 켜고 싶어도 키가 안눌리면 led를 못키는 상황임. 리눅스에서 여러 장치를 open해서 어떤 data가 먼저 들어올 지 아무도 모름. 그래서 입출력 다중화를 해주는 거임. 어떨때는 키보드 값, 어떨 때는 키 값이 들어올 수 있기 때문에, 첫번째 프로세스에서 영원히 잠들지 않도록 다중 입출력을 구현해주는거임. app.c부터 살펴보자. polling에 사용되는 구조체의 생김새는 저렇고 44번 라인 - 폴링 구조체 Events의 사이즈만큼 메모리를 할당하면서 0으로 초기화 45.. 2024. 2. 28.
[Linux Device Driver] Blocking I/O [Linux Device Driver] 커널 메모리 동적 할당 및 irq매개변수를 통한 인터럽트 데이터 전달 [Linux Device Driver] Interrupt 처리 실습 [Linux Device Driver] Device Driver와 application으로 led, 버튼 제어 폴더 새로 만들고 그 안에 c코드 추가 ubuntu@ubuntu8:~/pi_bsp/drivers/p238_ledkey$ vi ledkey_app.c 일단 application부 program-developers-story.tistory.com 이전 글에서의 문제점은 잠들지 않고 지속적으로 폴링을 하고 있는 프로세스 때문에 top을 쳤을 때 cpu 점유율이 100%라는 점인데, 프로세스를 sleep 상태로 만들어서 cpu .. 2024. 2. 28.
[Linux Device Driver] 커널 메모리 동적 할당 및 irq매개변수를 통한 인터럽트 데이터 전달 [Linux Device Driver] Interrupt 처리 실습 [Linux Device Driver] Device Driver와 application으로 led, 버튼 제어 폴더 새로 만들고 그 안에 c코드 추가 ubuntu@ubuntu8:~/pi_bsp/drivers/p238_ledkey$ vi ledkey_app.c 일단 application부터 만들어봅시다. system call 함 program-developers-story.tistory.com 이전 글 코드를 그대로 복사하겠슴다 두개 하겠소 1. kmalloc(kernel memory allocate) 2. irq 전역변수->매개변수를 넣어주기 위한 지역변수로 변경 ubuntu@ubuntu8:~/pi_bsp/drivers$ cp -r p3.. 2024. 2. 27.
[Linux Device Driver] Interrupt 처리 실습 [Linux Device Driver] Device Driver와 application으로 led, 버튼 제어 폴더 새로 만들고 그 안에 c코드 추가 ubuntu@ubuntu8:~/pi_bsp/drivers/p238_ledkey$ vi ledkey_app.c 일단 application부터 만들어봅시다. system call 함수 만들 때 썼던 코드 재활용합시다. #include #include #include #include program-developers-story.tistory.com 윗 코드 재사용 하겠으~ make pi@pi08:/mnt/ubuntu_nfs $ sudo mknod /dev/ledkey c 230 0 pi@pi08:/mnt/ubuntu_nfs $ sudo insmod ledk.. 2024. 2. 27.
반응형