Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

45107
469
422677


태그 : linuxkernel 요약보기전체보기목록닫기

1 2 3 4 5

[커널크래시] 인터럽트 컨텍스트에서 wake_up_interruptible 대신 wake_up_locked 사용!

인터럽트 컨텍스트에서 슬립을 지원하는 커널 함수를 호출하면 어떻게 동작할까요? 커널 패닉이 유발됩니다.이번에는 인터럽트 컨텍스트에서 발생한 커널 패닉 이슈를 소개합니다.먼저 커널 로그를 소개합니다. [1.538173] BUG: sleeping function called from invalid context at kernel/locking/rt...

[리눅스커널][Arm64] 유저 공간(EL0)에서 시스템 콜 번호는 어떻게 지정할까?

이번에는 64비트 기반 리눅스 커널에서 구동되는 라즈비안에서 시스템 콜 번호를 확인해 보겠습니다.이를 위해 바이너리 유틸리티를 활용해 libc 라이브러리를 어셈블리 명령어로 분석할 필요가 있습니다.root@raspberrypi:/usr# find . -name libc.a./lib/aarch64-linux-gnu/libc.aroot@raspberrypi...

[리눅스커널] 메모리: kcalloc() 함수와 kmalloc_array() 함수의 차이점

kcalloc() 함수는 어떤 역할을 수행할까요? 구현부를 보겠습니다.https://elixir.bootlin.com/linux/v5.12/source/include/linux/slab.hstatic inline void *kcalloc(size_t n, size_t size, gfp_t flags){ return kmalloc_array(n, size...

[리눅스커널] 슬럽 메모리: set_track() 함수에 전달되는 addr인자의 정체

리눅스 커널의 슬럽 관련 디버깅 피쳐를 켜 놓으면, struct track 구조체로 슬럽 오브젝트를 할당하거나 해제할 때의 콜 스택 정보를 저장합니다. 이를 처리하는 핵심 함수는 set_track() 함수인데, 이 함수에 마지막으로 전달되는 인자는 addr입니다.다음은 set_track() 함수의 구현부인데, 볼드체로 표기된 부분을 봅시다.https:/...

[리눅스커널] 프로세스 스케줄링: struct task_struct의 어느 필드가 컨텍스트 스위칭 횟수를 저장할까?

블로그 방문자께서 댓글로 다음과 같은 질문을 주셨습니다.    * 한 프로세스가 context switching(cpu burst)이 일어난 횟수는 task_struct 구조체에서 어떤 변수로 확인할 수 있나요?이 질문에 답을 드리면;    * task_struct 구조체의 nivcsw 필드가 컨텍스트 스위칭을 한 횟...

[리눅스커널] 프로세스 별로 파일 디스크립터(파일 객체)는 어떻게 관리하나?

아래 포스팅을 읽은 방문자님께서 댓글로 남겨 주신 질문에 대답하려고 합니다.http://rousalome.egloos.com/9993265  [리눅스커널][가상파일시스템] 파일 객체: write 연산 세부 동작 분석질문서로 다른 프로세스에서 f1파일을 열었으니 fd가 가르키는 시스템 파일 테이블의 파일이 다를텐데어떻게 내용이 삭제되거나 섞이지도...

[리눅스커널] GCC 지시어

[부록-A] GCC 지시어리눅스 커널 코드를 읽다 보면 낯선 구문을 만날 가능성이 높습니다. 이 중 하나가 GCC 컴파일러 지시어입니다. 이번 시간에는 리눅스 커널에서 자주 쓰는 GCC 지시어를 소개합니다.1. __init과 __section()__init 키워드가 함수 선언부에 있으면 해당 함수는 init.text 섹션에 위치합니다. 이해를 돕기 위해...

[리눅스커널] 커널 동적 타이머를 사용해 실행 시각을 측정해보기!

이번에는 조금 더 재미있는 패치 코드를 같이 볼까요? 다음은 패치 코드의 내용입니다.diff --git a/kernel/workqueue.c b/kernel/workqueue.cindex cd8b61b..128c998 100644--- a/kernel/workqueue.c+++ b/kernel/workqueue.c@@ -49,7 +49,7 @@ ...

[LinuxKernel] What is critical section and race condition?

Kernel synchronization is a technique for designing or maintaining code that behaves as follows:1. Only one process is accessed when executing a function or a specific code segment.2. Run the code i...

[Crash-Utility] Radix Tree 디버깅: 'tree -t radix -N (struct radix_tree_node *) 구조체 주소'!

이번 시간에는 크래시 유틸리티로 라덱스 트리를 디버깅하는 방법을 소개합니다.라딕스 트리(Radix Tree)를 보기 위한 명령어크래시 유틸리티로 라덱스 트리 노드를 보기 위한 명령어 포멧은 다음과 같습니다.tree -t radix -N (struct radix_tree_node *) 구조체 주소예제 명령어 및 결과 ( struct radix_tree_n...
1 2 3 4 5