[RISC-V] 익셉션 벡터 핸들러 코드 산책 - 리눅스 커널
By Guillermo Austin Kim | 2020년 9월 27일 |
이번 시간에는 RISC-V 기반 리눅스 커널에 구현된 익셉션 벡터 테이블과 익셉션 벡터 핸들러를 분석하겠습니다. 익셉션 벡터 핸들러를 호출하는 코드 확인하기 다음은 익셉션 벡터 핸들러의 구현부입니다. RISCV_PTR do_trap_insn_misaligned RISCV_PTR do_trap_insn_fault RISCV_PTR do_trap_insn_illegal RISCV_PTR do_trap_break RISCV_PTR do_trap_load_misaligned RISCV_PTR do_trap_load_fault RISCV_PTR do_trap_store_misaligned RISCV_PTR do_trap_store_fault RISCV_PTR do_trap_ecall_u /* system cal
리눅스 커널 기여(Contribution) - 패치 작성 및 패치 반영(Contribution) 확인하기
By Guillermo Austin Kim | 2019년 9월 4일 |
이전 시간에는 리눅스 커널 기여(Contribution) 하기 전에 준비해야 할 사항을 소개했습니다.- gmail 계정 생성- mutt 설치 및 설정 이번 시간에는 커널 패치를 작성해보고 패치를 리눅스 매인테이너(Maintainer)에게 보내는 과정을 소개합니다.그리고 업스트림(Upstream)된 패치를 확인하는 방법도 말씀드리겠습니다. 오류 코드 확인하기 먼저 패치를 작성하기 전 커널 코드를 볼까요?참고로 다음 함수는 AMD/PowerPlay 드라이버입니다.[drivers/gpu/drm/amd/powerplay/smumgr/smu8_smumgr.c]01 static int smu8_start_smu(struct pp_hwmgr *hwmgr)02 {03struct amdgpu_device *adev
[리눅스커널] 스핀락 플러그인 함수: spin_lock_irq()/spin_unlock_irq()
By Guillermo Austin Kim | 2019년 6월 10일 |
리눅스 커널 코드를 조금만 분석하면 spin_lock() 함수뿐만 아니라 spin_lock_irq() 함수를 써서 임계 영역을 보호하는 동작을 많이 볼 수 있습니다. 이번 소절에서는 spin_lock() 함수 기능을 확장한 스핀락 플러그인 함수를 소개합니다. - spin_lock_irq()/spin_unlock_irq() 먼저 spin_lock_irq()/spin_unlock_irq() 함수를 리눅스 커널에서 지원하는 이유를 알아보고 세부 코드를 분석하겠습니다. spin_lock_irq()/spin_unlock_irq() 함수가 생겨난 이유는 무엇일까?spin_lock_irq()/spin_unlock_irq() 함수의 원리를 살펴보기 앞서 spin_lock_irq()/spin_unlock_irq()
[ARM프로세서] ARMv7 익셉션(Exception)을 이루는 주요 개념
By Guillermo Austin Kim | 2020년 11월 18일 |
처음에 ARM 아키텍처의 익셉션을 공부할 때 익셉션 벡터 테이블을 이해하는데만 집중하는 분들이 많습니다. "ARMv7 아키텍처의 익셉션 동작 원리를 파악하려면 익셉션 벡터 테이블만 제대로 이해하면 된다"라고 생각하기 때문입니다. 하지만 익셉션 벡터 테이블의 내용만 익히면 배운 내용을 실전 프로젝트에 활용하기 어렵습니다. 왜냐면, 익셉션 벡터 테이블의 내용보다도 다음과 같은 사실을 파악하는게 더 중요하기 때문입니다. ❑ 익셉션은 소프웨어적으로 어떤 명령어가 실행될 때 유발될까? ❑ ARM 프로세서가 익셉션을 감지한 후 소프트웨어적으로 어떤 처리를 수행할까? 위에서 소개한 질문에 답을 하려면 다음 그림에서 소개한 익셉션을 구성하는 주요 개념에 대해 파악할 필요가 있습니