본문 바로가기

Core BSP 분석

(123)
[리눅스] insmod 명령어로 드라이버 설치 시 커널 내부 동작 디버깅해보기(ftrace) - (v6.6, Aarch64) 이전에 다음 글에서 insmod 명령어를 통해 모듈 타입 디바이스 드라이버가 설치될 때,커널 내부 함수가 어떤 흐름으로 작동하는지 코드를 리뷰했습니다.[리눅스] 드라이버: module_init 키워드로 지정한 함수가 호출되는 원리 - sys_finit_module()이어서 이번 시간에는 ftrace를 통해 hello_module_init() 함수가 어떻게 호출되는지 살펴보겠습니다.insmod 명령어로 디바이스 드라이버를 설치할 때의 전체 흐름먼저 다음 그림은 insmod 명령어로 디바이스 드라이버를 설치할 때의 전체 흐름을 나타냅니다.그림의 윗 부분에서 '유저 공간'으로 표기된 부분을 봅시다. insmod가 실행되어 시스템 콜이 발생되는 흐름을 확인할 수 있습니다. 이어서 그림 아랫 부분을 따라가 보면 ..
[리눅스] 커널 모듈 타입 디바이스 드라이버 설치해보기 (v6.6, Aarch64) Overview리눅스는 2가지 타입의 디바이스 드라이버를 지원합니다.   * 모듈식   * 빌트인 식모듈 타입의 디바이스 드라이버는 리눅스 시스템이 부팅한 다음 드라이버를 설치하듯 시스템에 동적으로 적재됩니다. 빌트인 타입 디바이스 드라이버는 커널 이미지에 디바이스 드라이버 코드가 포함되는 방식이죠.사실, 많은 리눅스 시스템에서는 모듈 타입 디바이스 드라이버를 적용합니다. 리눅스 서버와 같이 항상 켜져서 동작해야 하는 경우 동적으로 디바이스 드라이버를 적재할 수 있기 때문입니다.이번 시간에는 라즈베리 파이에서 모듈 타입 디바이스 드라이버를 설치하는 방법을 소개합니다.환경 설정모듈 타입 디바이스 드라이버를 컴파일하려면 리눅스 시스템은 이를 빌드할 수 있는 환경이 구축돼 있어야 합니다.그런데, 아래 포스팅에..
[리눅스] 드라이버: module_init 키워드로 지정한 함수가 호출되는 원리 - sys_finit_module() 리눅스에서 실행 중인 디바이스 드라이버는 2가지 타입 중 하나입니다.     ● 모듈 식 디바이스 드라이버     ● 빌트인 식 디바이스 드라이버 모듈식 디바이스 드라이버가 설치 될 때 리눅스 내부에서 어떤 방식으로 동작하는지 살펴보겠습니다. 이 중에 모듈 형태의 디바이스 드라이버는 다음과 같은 명령어를 사용하면 리눅스에 설치할 수 있습니다. 가장 간단한 모듈식 디바이스 드라이버 코드  먼저 가장 간단한 형태의 모듈식 디바이스 드라이버의 소스를 봅시다. #include  #include  #include  MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) {   printk(" Hello world!\n");     return 0; } stati..
[리눅스] insmod 명령어로 드라이버 설치 시 커널 내부 동작 디버깅해보기(ftrace) - (Aarch32, v5.4) 이전에 다음 글에서 insmod 명령어를 통해 모듈 타입 디바이스 드라이버가 설치될 때, 커널 내부 함수가 어떤 흐름으로 작동하는지 코드를 리뷰했습니다. 유저 공간에서 insmod가 실행되면 시스템 콜이 발생합니다. 커널 내부에서 다음과 같은 함수들이 호출됩니다.    ● sys_finit_module() 함수     ● load_module() 함수     ● do_init_module() 함수     ● do_one_initcall() 함수 위 함수 흐름을 보면 do_one_initcall() 함수에서 다음과 같이 module_init 키워드로 정의한 hello_module_init() 함수를 호출한다는 사실을 알 수 있습니다. static int hello_module_init(void) { pri..
[patch] Sample code to fix crash when unloading drivers diff --git a/sound/soc/codecs/wcd-kdt_sample-v2.c b/sound/soc/codecs/wcd-kdt_sample-v2.c index dba66e5..22b38ec 100644 --- a/sound/soc/codecs/wcd-kdt_sample-v2.c +++ b/sound/soc/codecs/wcd-kdt_sample-v2.c @@ -2484,9 +2484,6 @@ { struct snd_soc_codec *codec = kdt_sample->codec; -#ifdef CONFIG_KDT_RPI_SAMPLE - switch_dev_unregister(&kdt_sample->sdev); -#endif //CONFIG_KDT_RPI_SAMPLE kdt_sample->kd..
[라즈베리 파이] 'RT 리눅스 커널'을 라즈베리 파이에서 빌드하기 command $ git clone --branch rpi-4.19.y-rt https://github.com/raspberrypi/linux .config 79 CONFIG_PREEMPT=y 80 CONFIG_PREEMPT_RT_BASE=y 81 CONFIG_HAVE_PREEMPT_LAZY=y 82 CONFIG_PREEMPT_LAZY=y 83 # CONFIG_PREEMPT_NONE is not set 84 # CONFIG_PREEMPT_VOLUNTARY is not set 85 # CONFIG_PREEMPT__LL is not set 86 # CONFIG_PREEMPT_RTB is not set 87 CONFIG_PREEMPT_RT_FULL=y 88 CONFIG_PREEMPT_COUNT=y Ftrace..
[Share] RT(Real-time) 리눅스 커널 관련 콘텐츠 RT App 개발 관련 발표자료 * A Checklist for Writing Linux Real-Time Applications (ELC 2020 발표자료 및 유튜브 동영상) https://ogness.net/ese2020/ese2020_johnogness_rtchecklist.pdf https://www.youtube.com/watch?v=NrjXEaTSyrw * Real-time programming with Linux (2022) - good! https://shuhaowu.com/blogseries.html#rt-linux-programming * Raspberry Pi Realtime Linux 개발 관련 link https://lemariva.com/blog/2019/09/raspberry-..
[리눅스] 메인라인 리눅스 커널 소스 받는 방법 아래 명령어 입력 $ git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git $ git clone https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git $ git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next.git