라즈베리파이를 위해 새로 컴파일해 본 커널을 이용하여 시스템 콜 추가하는 작업을 해보았습니다.
최초 작성 2014. 10. 15.
최종 업데이트. 2017.11.11.
현재 사용중인 커널 버전입니다.
pi@raspberrypi:~ $ uname -r |
1.시스템 호출 번호 할당
커널 소스 디렉토리의 arch/arm/include/uapi/asm/unistd.h 파일에 새로 생성할 시스템 호출을 위한 고유번호를 할당합니다.
#define __NR_copy_file_range (__NR_SYSCALL_BASE+391) |
arch/arm/include/asm/unistd.h에 정의된 다음 값이 시스템 콜 마지막보다 크므로 변경할 필요는 없어 보입니다.
/* |
2.시스템 호출 테이블에 시스템 호출 처리 함수를 등록
arch/arm/kernel/calls.S에 정의되어 있는데 unistd.h에서 정의했던 시스템 호출 처리함수의 시작 주소들이 들어있습니다.
/* 390 */ CALL(sys_mlock2) |
3.시스템 호출 처리 함수 구현
kernel/helloworld.c라는 파일을 만들고 아래 내용을 작성한다.
#include <linux/unistd.h> |
4.Makefile에 추가
kernel/Makefile파일에 helloworld.o 추가
# |
5.커널을 컴파일한 후, 라즈베리파이로 복사했습니다.
(자세한 커널 컴파일 방법은 다음 포스팅에서 소개하고 있습니다.
Raspberry Pi 3를 위해 커널 크로스 컴파일하기(http://webnautes.tistory.com/547 ) )
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage -j4 $ scp arch/arm/boot/zImage pi@192.168.43.142:/home/pi |
라즈베리파이에서 커널 이미지를 /boot로 복사해줍니다.
pi@raspberrypi:~ $ sudo cp zImage /boot/kernel7.img |
6. 리부팅 후 다음 소스코드를 라즈베리파이에서 직접 컴파일 하여 실행합니다.
#include <stdio.h> |
dmesg명령으로 확인하면 아래와 같은 문구가 보이게 됩니다.
[ 135.364935] [sys_helloworld] Hello World |
'Raspberry Pi > Raspberry Pi 개발환경' 카테고리의 다른 글
Raspberry Pi 3에 LAMP (Linux, Apache, MySQL, PHP) 설치하는 방법 (36) | 2018.09.06 |
---|---|
Raspberry Pi 3에서 커널 모듈(kernel module) 프로그래밍 (3) | 2017.11.13 |
Raspberry Pi 3를 위해 커널 크로스 컴파일하기 (3) | 2017.11.11 |
Visual Studio 2017에서 Raspberry Pi 3를 위한 Windows 10 IoT App 작성하는 방법 (4) | 2017.08.23 |
Raspberry PI와 윈도우 PC간 파일 전송 (10) | 2016.12.04 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!