태그>리눅스커널(총 198개의 글)
'리눅스커널' 관련 최근글
-
- [리눅스커널] ftrace: boottime-trace(부트타임 ftrace)
-
Arm Linux Kernel Hacks by AustinKim|04/21 10:07
Overview 이번 포스트에서는 커널 v5.10에 반영된 boottime-trace를 소개합니다. 관련 문서는 아래 링크에서 확인할 수 있습니다. 강의 동영상 링크는 다음과 같습니다. boottime-trace는 커멘드 라인을 통해 ftrace 설정을 해서 부팅 과정에서 ftrace의 주요 기능을 enabl..
- [리눅스커널] ftrace: boottime-trace(부트타임 ftrace)
-
- [리눅스커널] IPI Call 요청: SGI(Software Generated Interrupt) 요..
-
Arm Linux Kernel Hacks by AustinKim|03/21 09:57
저번 포스트에서는 아래 실행 흐름으로 IPI Call을 요청하는 함수를 알아봤습니다. [리눅스커널] IPI(Inter Processor Interrupt) Call 요청 루틴(하이 레벨 뷰) 이어서 Arm 아키텍처에서 제공하는 SGI를 이용해 IPI Call을 처리하는 아키텍처에 의존적인 루틴을 분석하겠습..
- [리눅스커널] IPI Call 요청: SGI(Software Generated Interrupt) 요..
-
- [리눅스커널] IPI(Inter Processor Interrupt) Call 요청 루틴(하이..
-
Arm Linux Kernel Hacks by AustinKim|03/21 09:56
IPI(Inter Processor Interrupt)의 약자로 지정한 CPU 코어를 타겟으로 인터럽트(소프트웨어적)를 유발하는 매커니즘입니다. 이번 포스트에서는 리눅스 커널에서 IPI Call을 요청하는 루틴을 리뷰하겠습니다. IPI Call은 아키텍처에 의존적으로 처리되므로 하이 레벨과 로우..
- [리눅스커널] IPI(Inter Processor Interrupt) Call 요청 루틴(하이..
-
- [커널크래시] 인터럽트 컨텍스트에서 wake_up_interruptible 대신 wa..
-
Arm Linux Kernel Hacks by AustinKim|01/05 16:15
인터럽트 컨텍스트에서 슬립을 지원하는 커널 함수를 호출하면 어떻게 동작할까요? 커널 패닉이 유발됩니다.이번에는 인터럽트 컨텍스트에서 발생한 커널 패닉 이슈를 소개합니다. 먼저 커널 로그를 소개합니다. [1.538173] BUG: sleeping function called from invalid contex..
리눅스커널, 크래시, linuxkernel, crash
- [커널크래시] 인터럽트 컨텍스트에서 wake_up_interruptible 대신 wa..
-
- [리눅스커널] 메모리 매니지먼트: 존(struct zone) 구조체에 접근하기
-
Arm Linux Kernel Hacks by AustinKim|2021/08/25 12:15
< v5.10: 커널 버전 > 많은 분들은 리눅스 메모리 시스템은 다음과 같은 구조로 구성돼 있다고 알고 있습니다. 메모리 뱅크 - 노드 - 존 #1 - 존 #2 존은 'struct zone' 구조체로 확인할 수 있습니다. 그런데 zone 구조체의 필드는 어떻게 접근할 수 있을까요? 이번 포스트는 ..
- [리눅스커널] 메모리 매니지먼트: 존(struct zone) 구조체에 접근하기
-
- [리눅스커널][Arm64] 유저 공간(EL0)에서 ..
-
Arm Linux Kernel Hacks by AustinKim|2021/08/21 09:43
이번에는 64비트 기반 리눅스 커널에서 구동되는 라즈비안에서 시스템 콜 번호를 확인해 보겠습니다. 이를 위해 바이너리 유틸리티를 활용해 libc 라이브러리를 어셈블리 명령어로 분석할 필요가 있습니다. root@..
- [리눅스커널][Arm64] 유저 공간(EL0)에서 ..
-
- [리눅스커널] Arm64: VMEMMAP_START, vmemmap, PAGE_OFFSE..
-
Arm Linux Kernel Hacks by AustinKim|2021/08/08 21:36
리눅스 커널 v5.4 버전부터 가상 주소 맵이 약간 변경됐습니다.그 중 대표적인 속성은 아래 정보입니다. VMEMMAP_START: 0xfffffffeffe00000PAGE_OFFSET: 0xffffff8000000000 이 정보를 직접 어셈블리 코드로 확인해보겠습니다. 관련 코드는 참고로 다음과 같습니다. vmemmap ((..
- [리눅스커널] Arm64: VMEMMAP_START, vmemmap, PAGE_OFFSE..
-
- [리눅스커널] 메모리: kcalloc() 함수와 kmalloc_array() 함수의..
-
Arm Linux Kernel Hacks by AustinKim|2021/06/09 10:27
kcalloc() 함수는 어떤 역할을 수행할까요? 구현부를 보겠습니다. inline void *kcalloc(size_t n, size_t size, gfp_t flags){ return kmalloc_array(n, size, flags | _GFP_ZERO);} kcalloc() 함수를 보니 자신에게 전달된 인자를 kmalloc_arra..
- [리눅스커널] 메모리: kcalloc() 함수와 kmalloc_array() 함수의..
-
- [리눅스커널] 슬럽 메모리: set_track() 함수에 전달되는 addr인자의..
-
ARM Linux Kernel Hacks by AustinKim|2020/12/10 16:23
리눅스 커널의 슬럽 관련 디버깅 피쳐를 켜 놓으면, struct track 구조체로 슬럽 오브젝트를 할당하거나 해제할 때의 콜 스택 정보를 저장합니다. 이를 처리하는 핵심 함수는 set_track() 함수인데, 이 함수에 마지막으로 전달되는 인자는 addr입니다. 다음은 set_track()..
리눅스커널, 슬럽, linuxkernel, slub
- [리눅스커널] 슬럽 메모리: set_track() 함수에 전달되는 addr인자의..
-
- [RISC-V] RISC-V 툴체인으로 리눅스 커널 빌드하기
-
ARM Linux Kernel Hacks by AustinKim|2020/09/28 14:20
이번 포스트에서는 RISC-V 툴체인을 설치해 리눅스 커널을 빌드하는 방법을 소개합니다. 먼저 RISC-V 툴체인을 설치하는 명령어를 입력합시다. RISC-V 툴체인 소스를 내려받기 다음 명령어를 입력해 RISC-V 툴체인 소스를 내려받습니다. $ git clone -recursive 아래는 ..
- [RISC-V] RISC-V 툴체인으로 리눅스 커널 빌드하기
-
- [RISC-V] 익셉션 벡터 핸들러 코드 산책 - 리눅스 커널
-
ARM Linux Kernel Hacks by AustinKim|2020/09/28 07:11
이번 시간에는 RISC-V 기반 리눅스 커널에 구현된 익셉션 벡터 테이블과 익셉션 벡터 핸들러를 분석하겠습니다. 익셉션 벡터 핸들러를 호출하는 코드 확인하기 다음은 익셉션 벡터 핸들러의 구현부입니다. RISCV_PTR do_trap_insn_misaligned RISCV_PTR do_trap_in..
- [RISC-V] 익셉션 벡터 핸들러 코드 산책 - 리눅스 커널
-
- [ARM] ARM 프로세서의 특징을 활용한 최적화는 왜 중요할까?
-
Linux Kernel(4.19) Hacks by AustinKim|2020/07/04 17:59
이번 포스팅에서는 'ARM 프로세서의 특징을 활용한 최적화는 왜 중요할까?'에 대해서 이야기하려고 합니다.본론에 들어가기 앞서 일반적인 SW 개발자들이 최적화에 대해 어떻게 생각하는지 짚어 보겠습니다. 생각보다 성능과 최적화는 중요하다 대부분 SW 개발자들은 주어진 스팩..
- [ARM] ARM 프로세서의 특징을 활용한 최적화는 왜 중요할까?
-
- [ARM64] GCC: 특정 함수를 최적화하지 않기 - optimize("O0") 옵션
-
Linux Kernel(4.19) Hacks by AustinKim|2020/06/30 15:57
코드를 작성한 후 실행을 하다보면 가끔 자신이 작성한 함수의 심벌이 사라지거나, 가끔 예상을 벗어나는 동작을 할 때가 있습니다.여러 가지 원인 중 하나가, 컴파일러가 최적화를 하면서 코드를 재배치를 하다가 발생합니다. 이번 포스팅에서는 GCC의 최적화 레벨을 각각의 함수..
- [ARM64] GCC: 특정 함수를 최적화하지 않기 - optimize("O0") 옵션
-
- 『2장』 질문: 라즈베리 파이에서 디렉터리에 파일을..
-
Linux Kernel(4.19) Hacks by AustinKim|2020/06/20 14:33
『디버깅을 통해 배우는 리눅스 커널의 구조와 원리』 책의 저자 김동현입니다. 몇몇 독자분들이 실습을 하시면서 질문을 주셨는데요, 한 가지 공유드릴 사항이 있어 글을 남깁니다.먼저 질문을 소개합니다. 질..
- 『2장』 질문: 라즈베리 파이에서 디렉터리에 파일을..
-
- [리눅스커널] 프로세스 스케줄링: struct task_struct의 어느 필드가 ..
-
Linux Kernel(4.19) Hacks by AustinKim|2020/06/05 19:44
블로그 방문자께서 댓글로 다음과 같은 질문을 주셨습니다. * 한 프로세스가 context switching(cpu burst)이 일어난 횟수는 task_struct 구조체에서 어떤 변수로 확인할 수 있나요? 이 질문에 답을 드리면; * task_struct 구조체의 nivcsw 필드가 컨텍스트 스위칭을 한 횟..
- [리눅스커널] 프로세스 스케줄링: struct task_struct의 어느 필드가 ..