본문 바로가기

RISC-V

(31)
[RISC-V] 리눅스 커널 - local_irq_enable() 함수의 역할과 sstatus.sie (로컬 인터럽트 설정) 리눅스 커널에서는 로컬 인터럽트(local interrupt)를 활성화하거나 비활성화할 때 사용하는 API 함수들이 있습니다:  - local_irq_enable()  -  local_irq_disable() 코드 분석: preempt_schedule_irq() 함수이제 preempt_schedule_irq() 함수의 일부 코드를 살펴보겠습니다:asmlinkage __visible void __sched preempt_schedule_irq(void){ enum ctx_state prev_state; /* Catch callers which need to be fixed */ BUG_ON(preempt_count() || !irqs_disabled()); prev_state = exception_ente..
[RISC-V] 가상 메모리 시스템: satp 레지스터 (멀티 레벨 페이지 테이블, 강의 영상) RISC-V 아키텍처에서는 MMU를 지원하며, 멀티 레벨 페이지 변환을 지원합니다. 리눅스와 같은 Rich한 운영체제는 가상 메모리 시스템에서 실행되며, 소프트웨어가 바라보는 주소는 가상 주소입니다. 이 중에 1st lookup page table의 베이스 주소는 satp 레지스터를 사용해서 관리합니다. 상세한 동작 방식은 아래 강의 영상을 참고하세요:
[RISC-V] 인터럽트 콘트롤러(Interrupt Controller)의 구조 - PLIC, CLIC RISC-V 아키텍처에서는 2가지 타입의 인터럽트 콘트롤러가 있다:PLIC (Platform-level Interrupt Controller)CLIC (Core-local Interrupt Controller)아래 그림을 보면서 전체 구조를 확인하자:PLIC는 외부 퍼리퍼럴 디바이스에서 유발되는 인터럽트를 받아서, RISC-V Hart에 전달(Routing)하는 역할을 한다. RISC-V Hart(Core)는 인터럽트가 유발됐다는 사실을 확인한 후, 익셉션을 유발한다. CLIC는 RISC-V Hart 내부에 존재한다. 타이머나 Software generated interrupt를 유발하는데 주로 사용된다. CLIC를 통해서 인터럽트가 유발되면 RISC-V Hart는 역시 익셉션을 유발한다. 퍼리퍼럴에서 ..
[RISC-V] tp 레지스터 (Register)의 핵심 정보 - task_struct Background리눅스 커널은 함수와 자료 구조로 구성되어 있다. 자료 구조 중에서 가장 중요한 것은 무엇일까? 정답은 없지만, 많은 커널 개발자들은 task_struct 구조체라고 답할 것이다. task_struct는 프로세스의 속성 정보를 나타내는 구조체이다. task_struct 구조체의 주소만 알면 커널의 대부분의 정보를 확인할 수 있다. 예를 들면: -모든 프로세스의 task_struct 구조체 주소 -모든 프로세스의 콜 스택 -모든 프로세스별로 오픈한 파일 디스크립터 정보그런데 이러한 task_struct 구조체가 범용 레지스터에서 확인될 수 있다면 어떤 생각이 들까? 아마 다음과 같을 것이다: 디버깅 관점: 디버깅을 매우 효율적으로 할 수 있겠다. 보안 관점: 시스템의 중요한 정보를 레지스..
[Linux Kernel] RISC-V: swapper_pg_dir 변수를 이용한 satp 주소 찾기 배경RISC-V 아키텍처에는 여러 가지 CSR(Control and Status Register) 레지스터가 있습니다. 그중 하나가 satp 레지스터입니다. satp 레지스터의 역할은 무엇일까요? 첫 번째(1st) 페이지 테이블 엔트리의 주소를 저장하는 역할을 합니다. 만약 TRACE32 같은 디버깅 장비를 사용하면 satp 레지스터 값을 직접 확인할 수 있습니다. 하지만 TRACE32 없이 리눅스 커널 내부에서 satp 값을 확인하는 방법은 무엇일까요? 이 글에서는 그 방법에 대해서 상세히 다룹니다. 리눅스 커널: swapper_pg_dirsatp 값(첫 번째 페이지 테이블의 엔트리 주소)을 확인하려면 swapper_pg_dir 전역 변수의 가상 주소를 먼저 알아야 합니다. 왜 swapper_pg_di..
[RISC-V][리눅스] 커널 크래시 발생 - 실행 흐름 - Part.1 (강의) RISC-V 프로세서 기반 위에서 리눅스 커널이 실행될 때, 리눅스 커널 크래시가 발생하는 과정을 상세히 설명하는 강의 컨텐츠입니다. 보드를 브링업하는 과정에서 가장 고생하는 이슈가 크래시입니다. 이 영상을 보시고 고생을 덜 하시길 바랍니다. 강의 링크:
[RISC-V] 익셉션 코드(Exception codes)란 (RISC-V 강의) RISC-V 아키텍처에서 익셉션 코드(Exception codes)는 익셉션을 식별하는데 사용되는 중요한 정보입니다. 이번 강의 영상에서는 RISC-V 아키텍처의 익셉션 코드를 설명합니다. 강의 링크:
[RISC-V] 메모리 어보트 익셉션(Exception)의 실행 흐름 (RISC-V 강의) 실전 프로젝트에서는 익셉션은 메모리 어보트라고 간주합니다. RISC-V 아키텍처에서 메모리 어보트 성 익셉션의 실행 흐름에 대해 설명하는 컨텐츠입니다. 강의 링크: