본문 바로가기

전체 글

(484)
ARMv7: 메모리 어보트 타입 익셉션의 실행 흐름 메모리 어보트 타입 익셉션이 발생하면 익셉션 핸들러에서 디버깅 정보를 출력하고 시스템을 리셋시킵니다. 소프트웨어적으로 시스템이 치명적인 오류가 있는 상태로 판단하기 때문입니다. 다음 그림을 보면서 메모리 어보트 타입 익셉션의 전체 실행 흐름을 알아봅시다.  대표사진 삭제사진 설명을 입력하세요. 그림 8.2 메모리 어보트 타입 익셉션이 발생할 때 전체 흐름 익셉션의 전체 실행 흐름도는 4단계로 분류할 수 있는데, 각 단계 별로 어떤 동작을 수행하는지 알아봅시다.  1단계: 프로세스가 실행하는 도중에 익셉션을 유발하는 명령어 실행  먼저 ①로 표시된 부분을 눈으로 따라가 봅시다. 프로세스가 메모리 어보트를 유발하는 명령어를 실행하는 부분입니다. 2단계: ARM 프로세서가 익셉션을 감지  ② 로 표시된 부분은..
ARMv7 익셉션(Exception)을 이루는 주요 개념 처음에 ARM 아키텍처의 익셉션을 공부할 때 익셉션 벡터 테이블을 이해하는데만 집중하는 분들이 많습니다. "ARMv7 아키텍처의 익셉션 동작 원리를 파악하려면 익셉션 벡터 테이블만 제대로 이해하면 된다"라고 생각하기 때문입니다. 하지만 익셉션 벡터 테이블의 내용만 익히면 배운 내용을 실전 프로젝트에 활용하기 어렵습니다. 왜냐면, 익셉션 벡터 테이블의 내용보다도 다음과 같은 사실을 파악하는게 더 중요하기 때문입니다.  ❑ 익셉션은 소프웨어적으로 어떤 명령어가 실행될 때 유발될까? ❑ ARM 프로세서가 익셉션을 감지한 후 소프트웨어적으로 어떤 처리를 수행할까? 위에서 소개한 질문에 답을 하려면 다음 그림에서 소개한 익셉션을 구성하는 주요 개념에 대해 파악할 필요가 있습니다. 그림 8.1 ARMv7 익셉션을 ..
[리눅스커널] 인터럽트 후반부 처리 기법 종류 및 소개 리눅스 커널이 Bottom Half을 처리하는 대표적인 기법으로 IRQ 스레드와 Soft IRQ이 있습니다. 워크큐는 워크큐를 다루는 포스트에서 살펴볼 예정입니다. 세 가지 기법 인터럽트 후반부 처리하는 방식이 조금씩 다릅니다. 하지만 인터럽트 핸들러에서 해야 할 일을 2 단계로 나눈다는 점은 같습니다.  이 세 가지 기법의 특징이 뭔지 알아보겠습니다.  IRQ 스레드   인터럽트를 처리하는 전용 IRQ 스레드에서 인터럽트 후속 처리를 합니다. 만약 rasp란 24번 인터럽트가 있으면 “irq/24-rasp”란 IRQ 스레드가 24번 인터럽트 후반부를 전담해서 처리합니다. Soft IRQ   인터럽트 핸들러 실행이 끝나면 바로 일을 시작합니다. 인터럽트 핸들러 바로 처리해야 할 일을 마무리한 후 인터럽트..
RISC-V IPI Call: Code walkthrough RISC-V IPI Call: Code walkthroughvoid smp_call_function_many(const struct cpumask *mask, smp_call_func_t func, void *info, bool wait){ smp_call_function_many_cond(mask, func, info, wait * SCF_WAIT, NULL);}EXPORT_SYMBOL(smp_call_function_many);void send_call_function_single_ipi(int cpu){ struct rq *rq = cpu_rq(cpu); if (!set_nr_if_polling(rq->idle)) arch_send_call_function_single_ipi(cpu);..
Useful material for RISC-V AMD: https://docs.amd.com/r/en-US/ug1629-microblaze-v-user-guide/Machine-Cause-Register-mcause SBI specification: https://www.scs.stanford.edu/~zyedidia/docs/riscv/riscv-sbi.pdfSBI Reference: https://docs.rs/sbi/latest/sbi/legacy/index.htmlThe RISC-V Advanced Interrupt Architecture: https://github.com/riscv/riscv-aia/releases
[리눅스커널] 인터럽트 후반부 - Top Half/Bottom Half 란 무엇일까? 이전 포스트에서 인터럽트 컨택스트에서 인터럽트 핸들링을 빠른 시간에 마무리해야 한다고 설명을 드렸습니다. 또한 시간이 오래 걸리는 함수를 호출하면 시스템은 커널 패닉과 같이 시스템이 오동작 할 수 있다고 소개했습니다. 여기서 한 가지 의문이 생깁니다.인터럽트가 발생하면 인터럽트 핸들러에서 처리할 일이 많을 때는 어떻게 해야 할까?    이럴 때 해야 할 일을 2가지로 나누면 됩니다. 빨리 처리해야 하는 일과 조금 있다가 처리해도 되는 일입니다. 임베디드 용어로,인터럽트가 발생 후 빨리 처리해야 하는 일은 Top Half조금 있다가 처리해도 되는 일은 Bottom Half라고 말합니다.  인터럽트 핸들러가 하는 일은 Top Half라고 할 수 있습니다. Bottom Half는 인터럽트에 대한 처리를 프로세..
[RISC-V] How to run QEMU (Window) 윈도우  WSL 2 환경에서 아래 툴들을 설치하자. virt-edit 에서 Fedora 이미지의 /boot/extlinux/extlinux.conf 를 수정하기 위해 필요하다.  더 자세한 자료는 아래 링크를 참고하자.https://fedoraproject.org/wiki/Architectures/RISC-V/Installing#Boot_under_QEMU
[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..