Guillermo Austin Kim

Sources

Posts

998 posts

[Arm프로세서] AAPCS를 효율적으로 배우는 방법

Guillermo Austin Kim|2021년 2월 20일

저는 특히 AAPCS를 제대로 공부하는 방법을 몰라서, 공부를 아무리 해도 AAPCS에 대한 내용이 머릿 속에 남지 않았습니다. AAPCS는 볼 때 마다 새로웠습니다. 이후 실전 프로젝트에 투입된 후, AAPCS를 제대로 배우지 못한 댓가를 톡톡히 치뤘습니다. 이 후 AAPCS를 제대로 배우기 위한 방법과 기반 지식의 중요성을 깨달았습니다. 이제부터 AAPCS를 효율적으로 배우는 방법을 소개합니다. 배운 내용을 반드시 실습해본다 소프트웨어 개발자 입장에서 AAPCS는 실습하지 않으면 배운 내용을 기억하기 어렵습니다. 공부를 안 한 것과 거의 마찬가지입니다. AAPCS의 대부분의 내용은 Arm 아키텍처 관점으로 추상적인 스팩을 담고 있기 때문이기도 합니다. 그래서 배운 내용은 반드시 실습을 통해

[Arm프로세서] AAPCS를 배우기 어려운 이유

Guillermo Austin Kim|2021년 2월 20일

많은 시스템 소프트웨어 개발자들은 Arm 프로세서를 열심히 공부합니다. 그런데 잘못된 방법으로 공부를 해 배운 내용을 활용하기 어려운 수준에 그치는 경우가 많습니다. 특히 AAPCS를 배울 때는 공부 방법이 중요한 것 같습니다. 이번 절에서는 AAPCS를 공부하는 방법의 문제점과 AAPCS를 효율적으로 배우는 방법을 소개합니다. AAPCS를 이론을 이해하는 방식으로 공부한다 AAPCS와 관련된 스팩을 읽고 머리를 끄덕입니다. "아, Arm 아키텍처의 AAPCS의 규칙은 이렇구나"라고 지나가듯이 읽습니다. 하지만 AAPCS를 이론으로 이해하면, 실전 프로젝트에서 배운 내용을 거의 활용하지 못합니다. 실습을 거치지 않고 배운 내용은 금방 머릿 속에서 사라지기 때문입니다. 그래서 AAPCS의 스팩은 볼 때 마

[Arm프로세서] AAPCS: 실전 프로젝트에서 많이 활용됨

Guillermo Austin Kim|2021년 2월 17일

실전 프로젝트에 투입되면 다양한 버그를 만나는데, 다음과 같은 현상을 겪을 수 있습니다. ❑ 예상치 못하게 함수 호출 흐름이 깨짐 ❑ 코드가 아닌 데이터 영역에 있는 주소로 프로그램 카운터가 브랜치 대부분의 운영체제에서 위와 같은 현상은 '스택이 오염됐다'라고 설명되는데, 그 결과 크래시가 발생합니다. 크래시의 종류는 여러가지가 있는데, 대부분 크래시가 발생하면 시스템은 다음과 같이 동작합니다. ❑ 실행되는 애플리케이션이 종료 ❑ 시스템 전체가 리셋됨 실전 프로젝트에서 '스택 오염' 문제를 처음 겪으면 굉장히 당황할 가능성이 높습니다. 저도 '스택 오염'으로 크래시가 발생하는 이슈를 처음 만났던 순간이 아직도 생생합니다. 그 당시 어

[Arm프로세서] AAPCS: 소프트웨어 개발자는 AAPCS를 왜 알아야 할까

Guillermo Austin Kim|2021년 2월 17일

뛰어난 시스템 프로그래머가 되려면 반드시 익혀야 하는 지식 중 하나가 AAPCS입니다. 이번 절에서는 그 이유에 대해 설명하고, AAPCS를 효율적으로 배우는 방법을 소개합니다. 프로그래밍의 근본 동작 원리 파악 많은 고수 프로그래머들은 "뛰어난 프로그래머가 되려면 프로그램을 실행하는 CPU의 동작 원리를 잘 이해해야 한다"라고 말합니다. 이 의견은 Arm 코어가 탑재된 환경에 그대로 적용될 수 있습니다. 이 생각을 조금 더 풀어서 "여러분이 작성한 C 코드를 실제 Arm 코어가 어떻게 실행하는지 아는 게 중요하다"라고 말할 수 있습니다. 이를 조금 더 확장해서 다음과 같이 말씀드리고 싶습니다. "뛰어난 프로그래머가 되기 위해서는 Arm 코어의 핵심 동작 원리 중 하나인, AAPCS를 잘

[리눅스] 디바이스 드라이버: struct device와 커널 오브젝트(kobj)

Guillermo Austin Kim|2021년 2월 15일

디바이스 드라이버는 플렛폼 디바이스로 구성돼 있습니다.모든 디바이스는 struct device로 표현되는데, 이를 커널 오브젝트(kobj)로 체계적으로 관리합니다. 그런데 가끔 probe 루틴에서 디바이스 드라이버를 초기화할 때, 디바이스 드라이버의 커널 오브젝트(kobj)의 정체가 무엇인지알고 싶을 때가 있습니다. 이럴 때 다음과 같은 패치를 반영하면 됩니다. diff --git a/drivers/mmc/host/bcm2835-mmc.c b/drivers/mmc/host/bcm2835-mmc.cindex 6b9cb30e9..458300e31 100644--- a/drivers/mmc/host/bcm2835-mmc.c+++ b/drivers/mmc/host/bcm2835-mmc.c@@ -1416,6 +