Guillermo Austin Kim

Sources

Posts

998 posts

[리눅스커널] 인터럽트 핸들러 실행 시각 측정 디버깅 패치

Guillermo Austin Kim|2019년 12월 7일

가끔 인터럽트 핸들러의 처리 시간이 조금 더 정확히 보고 싶을 때가 있습니다.이때, 다음과 같은 패치 코드를 적용하면 인터럽트 핸들러의 실행 시간을 측정할 수 있습니다. 패치 코드는 다음과 같습니다. diff --git a/drivers/mailbox/bcm2835-mailbox.c b/drivers/mailbox/bcm2835-mailbox.cindex a03aeed..e353beb 100644--- a/drivers/mailbox/bcm2835-mailbox.c+++ b/drivers/mailbox/bcm2835-mailbox.c@@ -72,17 +72,29 @@ static struct bcm2835_mbox *bcm2835_link_mbox(struct mbox_chan *link)

[TRACE32] 유저 공간 콜스택 복원하기 - ARMv8(Aarch64)

Guillermo Austin Kim|2019년 12월 7일

Overview 커널 크래시가 발생해 덤프를 TRACE32로 분석할 때 유저 공간에서 실행 중인 함수들의 콜스택을 보고 싶을 때가 있습니다. 그 이유는 아래와 같은 디버깅 정보를 얻기 위해서 입니다.; * 유저 공간에서 어떤 함수가 실행한 후 시스템 콜을 통해 커널 공간으로 실행 흐름이 바뀌었나? * 유저 공간에서 어떤 파라미터를 전달했을까? 그런데 대부분 리눅스 시스템 개발자들은 TRACE32로 커널 공간의 콜스택만을 보면서 디버깅을 합니다. 이번 포스팅에서는 커널 패닉이 발생했을 때 유저 공간의 콜스택을 TRACE32으로 보는 방법을 소개합니다. 패치 코드를 활용하면 커널의 특정 함수에 브레이크 포인트를 걸었을 때도 유저 공간의 콜스택을 볼 수 있습니다. 조건 이번에 소개하는 패치

[임베디드] 관리자들이 가장 많이 하는 거짓말(1) - 문제를 넓게 봐라

Guillermo Austin Kim|2019년 12월 4일

임베디드 개발 업체의 관리자가 가끔 이런 소리를 합니다. * 문제를 보는 시야가 좁아. 문과장은 조금 더 시야를 넓히는 게 좋을 것 같아. 이 글을 읽는 임베디드 개발자(드라이버, BSP) 여러분. 여러분도 혹시 이런 소리를 들어 본 적이 있나요? 관리자들이 무슨 소리를 하는지 모르겠다고요? 그렇다면 이런 말을 하는 관리자의 속마음을 컴파일을 해볼까요? (소스 코드)문제를 보는 시야가 좁아. 서과장은 조금 더 시야를 넓히는 게 좋을 것 같아. (컴파일러)난 체계적을 관리하기 싫고 문제가 나오면 그냥 너한테 던지고 싶어. 그러니 개발자인 네가 문제를 분류해주고 알아서 관리까지 해 줬으면 좋겠어. 그러니 내가 문제를 던지면 내가 다 받았으면 좋겠어. 따라서 문제를 보는 시야를 넓혔으면 좋겠어.

[ARM] ARM 프로세서 소개 - RISC와 CISC란 무엇인가?

Guillermo Austin Kim|2019년 12월 3일

이 세상에는 다양한 종류의 프로세서들이 있습니다. 예를 들어 봅시다. * x86 * MIPS * Power PC * ARM 이제부터 ARM 프로세서에 대해 이야기를 하겠습니다. 자, 여기서 한 가지 의문이 생깁니다. * 임베디드 개발자들은 왜 ARM 프로세서를 배워야 할까? 간단히 답을 드리면 임베디드 개발에서 ARM 프로세서가 아주 많이 쓰이기 때문입니다. 가장 큰 이유는 ARM 프로세서는 전력을 조금 소모한다는 사실입니다. 그렇다면 ARM이 저전력 프로세서인 이유는 무엇이며 임베디드 시스템에 적합한 이유는 무엇일까요? 그 이유에 대해 조금 더 자세히 알아 보겠습니다. 보통 마이크로 프로세스는 크게 2 가지 범주로 나눌 수 있습니다. * CISC (Complex In

[리눅스] 디바이스 파일이란?

Guillermo Austin Kim|2019년 12월 2일

앞서 리눅스 디바이스 드라이버를 구성하는 세 가지 요소를 소개했습니다. 이 중에 먼저 디바이스 파일에 대해 살펴봅시다. 디바이스 파일은 우리가 제어하려는 하드웨어를 추상화한 대상입니다. 그렇다면 디바이스 파일은 어디에서 확인할 수 있을까요? 리눅스 시스템에서는 디바이스 파일은 "/dev" 디렉토리에 있으며 커널은 이 디렉토리에 있는 각 파일을 하드웨어라고 간주합니다. 또한 리눅스 애플리케이션은 이 디바이스 파일을 통해 하드웨어를 콘트롤합니다. 디바이스 파일 생성하기 자, 여기서 한 가지 의문이 생깁니다. 디바이스 파일은 어떻게 생성할까요? 일반 파일을 생성하듯이 create() 함수를 호출하면 될까요? 디바이스 파일은 일반 파일과 달리 디바이스 장치를 표현하는 기능입니다. 따라서 리눅스에서 제공하는