Guillermo Austin Kim

Sources

Posts

998 posts

[리눅스커널] 안드로이드/라즈베리 파이 부팅 실패 100% 해결하는 디버깅 패치

Guillermo Austin Kim|2019년 12월 1일

Overview 많은 개발자들은 '브링업'이란 개발 업무를 맡고 있습니다. 이 과정에서 다음과 같은 어려움을 많이 겪습니다. * 보드 브링업을 하다 보니 컴퓨터의 시작 화면까지 보이지 않는다. * 부팅 과정에서 출력하는 화면이 계속 출력된다. 이런 이슈를 겪은 적이 있나요? 보통 이런 상황을 겪으면 굉장히 답답하고 짜증이 납니다. 그 이유는 무엇일까요? * 뭔가 문제가 생겨서 부팅이 안되는 상황인데 그 원인을 파악하기 어렵기 때문입니다. 달리 말씀을 드리면 정확히 어디에 문제가 생겨서 부팅이 안되는지 알 수 없기 때문입니다. 이번 포스팅에서는 이런 상황에서 사용하면 아주 유용한 커널 패치를 소개합니다. 아이디어 안드로이드나 라즈비안 타겟 부팅 과정에서 init이나 systemd

[리눅스] 모듈 방식 드라이버를 설치할 때 커널 코드 분석(sys_init_module)

Guillermo Austin Kim|2019년 11월 26일

터미널에서 'insmod module.ko' 명령어를 입력하면 모듈 형식 드라이버를 설치할 수 있습니다. 이번 포스팅에서는 이 과정에서 호출되는 함수를 분석합니다. TRACE32로 콜스택 확인 먼저 콜스택을 보겠습니다. -000|NSR:0xBF03B114(asm) // <<---001|do_one_initcall_debug(inline)-001|do_one_initcall(fn = 0xBF03B000)-002|do_init_module(inline)-003|load_module(info = 0xDE895F48, ?, ?)-004|sys_init_module(umod = -1227014136, len = 284732, uargs = -1097475832)-005|ret_fast_syscall

[Trace32][ARMv7-32비트] MMU CP15 레지스터 파악하기 - 리눅스 커널 디버깅

Guillermo Austin Kim|2019년 11월 23일

이전 포스팅[Trace32][ARMv7-32비트] MMU 설정 하기 - 리눅스 커널 디버깅 이전 포스팅에서 Trace32에서 유저 공간의 콜스택을 볼 수 있는 설정 방법을 소개했습니다. 요약하면 다음과 같이 가상 메모리를 관리하는 MMU CP15 레지스터의 주소를 지정해야 합니다. * 레지스터 종류System Control Register Translation Table Base Register 1Translation Table Base Register 0 Translation Table Base Control Register * 명령어PER.Set.simple C15:0x1 %Long 0x30c0383d // System Control RegisterPER.Set.simple C15:0x10

[리눅스] 디바이스 드라이버(Device Driver)란 무엇인가

Guillermo Austin Kim|2019년 11월 23일

디바이스 드라이버란 무엇인가 디바이스 드라이버가 무엇인지 들어본 적이 있나요? 여러분이 어떤 전자 회사에 개발자로 취업을 했다고 가정해 봅시다. 개발하는 제품은 텔레비젼의 센터 박스, 휴대폰, 클라우드 서버, 자동차 내비게이션 등과 같이 다양할 것입니다. 그런데 여러분이 어떤 개발 업무를 맡아도 디바이스 드라이버란 용어는 반드시 듣게 될 것입니다. 제품을 개발하는 소프트웨어의 핵심요소가 디바이스 드라이버이기 때문입니다 여러분이 개발 부서에서 개발을 시작했다고 가정해 봅시다. 처음에 제품의 스팩을 정할겁니다. 이 과정에서 어떤 부품을 쓸 것인지 선택해야 합니다. 제품 스펙에 따라 마우스, 키보드 혹은 LCD 혹은 터치와 같은 하드웨어 입출력 장치를 추가할 수도 있습니다. 그런데 이런 하드웨어 부품을

[Trace32][ARMv7-32비트] MMU 설정 하기 - 리눅스 커널 디버깅

Guillermo Austin Kim|2019년 11월 20일

Trace32로 리눅스 커널을 디버깅할 때 유저 공간의 콜스택을 함께 보면 더 유용한 정보를 얻을 수 있다. 아래 콜스택에서 볼드체로 된 부분을 눈으로 따라가 보자.유저 공간에서 어떤 동작을 했는지 함수 호출 흐름을 알 수 있다. -000|context_switch(inline)-000|__schedule()-001|schedule_preempt_disabled()-002|spin_lock(inline)-002|__mutex_lock_common(inline)-002|__mutex_lock_slowpath(lock_count = 0xC1327164)-003|current_thread_info(inline)-003|mutex_set_owner(inline)-003|mutex_lock(lock = 0xC1