LINUXKERNEL

포스트: 40|조회수: 0|ORGANIZATION
Items

Posts

40 posts

[리눅스커널][디버깅] 유저공간 High Memory Zone 페이지 할당 과정

Guillermo Austin Kim|2019년 3월 18일

커널 크래시가 발생한 콜스택은 다음과 같습니다.프로세스는 이름은 Debugger인데 유저 프로세스입니다.-001|__dabt_svc(asm)-->|exception-002|__list_del(inline)-002|list_del(inline)-002|buffered_rmqueue(inline)-002|get_page_from_freelist(?, ?, order = 0, ?, high_zoneidx = 0, alloc_flags = 449, pref-003|__alloc_pages_nodemask(gfp_mask = 33685722, order = 0, zonelist = 0xC1731380, nodema-004|__alloc_zeroed_user_highpage(inline)-004|alloc_zer

[리눅스커널][디버깅] T32(Trace32)로 vmlinux 로딩해 시스템 구경하기

Guillermo Austin Kim|2019년 3월 13일

T32 시작 명령어 T32 시뮬레이터를 열고 다음 명령어를 입력합시다.sys.cpu cortexa7sys.up 대부분 ARM32 아키텍처는 위 명령어로 T32가 초기화됩니다. T32 명령어로 시스템 점검하기 먼저 커널 섹션 정보를 보겠습니다.y.l.sec__________address________|path\section___________________________|acc|init|physical P:00000000--0000001F|\\vmlinux\.vectors |R-X|L- | P:00001000--000012BF|\\vmlinux\.stubs |R-X|L- | P:C0008000--C

[리눅스커널][디버깅] dump_stack() 함수

Guillermo Austin Kim|2019년 3월 13일

dump_stack() 함수 dump_stack() 함수는 콜스택을 커널 로그로 출력합니다. 커널 로그로 콜스택을 보고 싶은 코드에 삽입하면 됩니다. 이 함수를 호출하려면 C 코드 윗부분에 다음과 같이 "linux/kernel.h" 해더 파일을 추가해야 합니다. #include dump_stack() 함수 선언부를 봅시다.asmlinkage __visible void dump_stack(void); 인자와 반환값 타입이 모두 void입니다. 커널 소스 코드 어디든 dump_stack() 함수만 추가하면 됩니다. dump_stack() 함수로 커널 로그에서 콜스택 확인하기이번엔 dump_stack() 함수를 써서 커널 로그로 콜스택을 볼 수 있는 패치 코드를 소

[리눅스커널][디버깅] printk에 대해서

Guillermo Austin Kim|2019년 3월 11일

printk printk는 printf와 유사한 기능입니다. printf는 윈도우 콘솔 프로그램이나 리눅스 시스템 프로그램에서 로그를 출력합니다. 마찬가지로 printk() 함수를 호출하면 커널 로그를 볼 수 있습니다. printk 를 커널 함수에 적절히 추가하면 유용한 디버깅 정보를 얻을 수 있습니다. 리눅스 커널 핵심 함수도 printk를 이용해 시스템 정보를 출력합니다. 커널 핵심 코드에서 printk를 쓰는 예시 코드를 소개합니다.[https://elixir.bootlin.com/linux/v4.14.70/source/arch/arm/kernel/process.c]01 void __show_regs(struct pt_regs *regs)02 {...03 printk("pc : [<%08l