[리눅스 디바이스드라이버] module_init 키워드로 지정한 함수가 호출되는 원리 - sys_init_module()
By Guillermo Austin Kim | 2020년 6월 9일 |
리눅스에서 실행 중인 디바이스 드라이버는 2가지 타입 중 하나입니다. ● 모듈 식 디바이스 드라이버 ● 빌트인 식 디바이스 드라이버 모듈식 디바이스 드라이버가 설치 될 때 리눅스 내부에서 어떤 방식으로 동작하는지 살펴보겠습니다. 이 중에 모듈 형태의 디바이스 드라이버는 다음과 같은 명령어를 사용하면 리눅스에 설치할 수 있습니다. 가장 간단한 모듈식 디바이스 드라이버 코드 먼저 가장 간단한 형태의 모듈식 디바이스 드라이버의 소스를 봅시다. #include <linux/init.h>#include <linux/module.h>#include <linux/kernel.h> MODULE_LICENSE("Dual BSD/GPL"); s
anbox 안드로이드 에뮬레이터에 구글 플레이 추가
By 반달가면 | 2019년 11월 20일 |
리눅스용 안드로이드 에뮬레이터 anbox 설치에 대한 내용은 이전 게시물을 참고하자. 여기로. anbox에 앱을 설치하려면 x86_64 버전의 apk 파일을 다운로드해서 안드로이드 디버그 브리지(adb)를 통해서 설치를 진행하도록 되어 있다. 그런데 이러한 과정을 거치지 않고 구글 플레이를 추가해서 일반 안드로이드 기기처럼 앱을 설치할 수 있는 스크립트를 발견. 이 스크립트를 제공하는 깃허브(github) 페이지는 아래와 같다. 깃허브 페이지에 가 보면 install-playstore.sh라는 스크립트가 있는데, 이 스크립트를 받아서 실행하면 된다. # 스크립트 다운로드(wget) wget # 스크립트 실행 sudo bash install-playstore.sh 스
[라즈베리파이] 시그널 - 시그널 번호와 동작 알아보기
By Guillermo Austin Kim | 2018년 11월 27일 |
책을 읽다가 발생하는 여러 비동기적인 이벤트(인터폰, 전화)가 있듯이, 유저 레벨 프로세스 동작 중에 발생할 수 있는 시그널도 여러 가지가 있습니다. 유닉스나 리눅스 커널 버전이 달라도 시그널 종류는 비슷합니다. 시그널은 POSIX 규약으로 정의된 표준이며 이제 맞게 리눅스 시스템 개발자가 구현하기 때문입니다. 다음은 라즈베리파이 리눅스 커널 4.14.70 버전에서 지원하는 시그널 번호를 확인한 결과입니다.pi@raspberrypi:~ $ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR111) SIGSEGV 12) SIGUSR2 13) SIGP
[리눅스커널] 워크큐: 워커 스레드 핸들 worker_thread() 함수 분석하기 (1/2)
By Guillermo Austin Kim | 2019년 9월 29일 |
커널 스레드를 처음 분석하려고 할 때 다음과 같은 의문이 생길 때가 있습니다. 새로운 커널 스레드 코드 분석을 시작할 때 어느 코드부터 분석해야 할까? 먼저 커널 스레드 핸들 함수를 열어봐야 합니다. 그 이유는 커널 스레드 세부 동작은 커널 스레드 핸들 함수에 구현됐기 때문입니다. 마찬가지로 워커 스레드 세부 동작을 알려면 먼저 스레드 핸들 함수인 worker_thread() 함수를 봐야 합니다. 이번 시간에는 worker_thread() 함수를 분석하면서 세부 동작 원리를 배워보겠습니다. 먼저 worker_thread() 함수의 주요 동작은 다음과 같습니다. 워크 실행필요 시 워커 스레드 생성 요청워커 스레드 종료 위 항목 중 핵심 동작은 워크를 실행하는 것이며 나머지는 워커를