2024/10/10 7

dump_stack() 함수

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

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 : []    lr : []    ps..

(2) 디버깅과 코드 학습 능력

2.  디버깅과 코드 학습 능력 ​디버깅을 하며 리눅스 커널 코드를 함께 분석하면, 다음과 같은 정보를 더 얻을 수 있습니다.   분석하는 코드가 동작하는 콜 스택  함수가 실행될 때 변경되는 자료구조  함수가 실행되는 빈도와 실행 시각  분석 대상 코드를 실행하는 프로세스​커널 소스코드 분석과 함수의 실행흐름과 실행 빈도를 함께 알아두면 좋습니다.       ex.  리눅스 커널 코드 분석의 예​ $ cat /proc/interrupts 명령어를 입력하면 인터럽트의 세부 속성을 알 수 있습니다. show_interrupts() 함수가 이 정보를 터미널로 출력합니다. 만약, 아래와 같은 정보를 확인하고싶다면?  인터럽트 디스크립터인 irq_desc 구조체의 action 필드에 저장된 인터럽트의 속성 정보..

(1) 디버깅은 문제 해결 능력의 지름길

디버깅 : 오류 해결   1.  디버깅이 중요한 이유 이번 절에서 디버깅 방법을 소개하기 전 디버깅이 중요한 이유를 다음 관점으로 알아보겠습니다. - 문제 해결 능력 - 커널 코드 학습 능력 필자는 디버깅을 단지 버그를 잡는 과정으로만 보지 않습니다. 리눅스 커널과 드라이버가 정상 동작할 때 자료구조와 함수 호출까지 파악하는 과정을 디버깅이라고 생각합니다. 그 이유를 더 알아볼까요?  신입 개발자들은 실전 리눅스 개발에서 어떤 업무를 하는지 궁금해합니다. 임베디드 리눅스는 ‘클라우드 서버’, ‘휴대폰’, ‘자동차’ 까지 다양한 분야에서 쓰고 있습니다. 따라서 실전 개발 업무가 어떻다고 설명하긴 어렵습니다. 그런데 임베디드 리눅스 프로젝트 개발 중 다양한 문제를 겪습니다. 임베디드 리눅스는 활용 분야가 다..

Kernel Source 구조

리눅스 커널 소스 구조   1.  common sourceArchitecture와 무관하게 공통으로 사용하는 소스들 kernel/irq : 인터럽트kernel/sched : OS 스케줄링kernel/power : 전원관리 소스kernel/locking : OS의 동시성 지원 - Mutex, Semaphore 등kernel/printk : log 출력 함수kernel/trace : ftrace 등 추적 프로그램    2.  Archecture 종속 코드,  linux linux/arch : Architecture별로 다른, CPU 종속성을 띄는 코드linux/mm : memory management - 가상메모리 등linux/drivers : I2C, I3C, GPIO, GPU 등 드라이버 코드linux/..

무엇을 배워야 임베디드 리눅스 개발을 잘 할 수 있을까

무엇을 배워야 임베디드 리눅스 개발을 잘 할수 있을까    좁게 보면 임베디드 리눅스 개발자가 알아야 할 지식은 다음과 같습니다.    - 리눅스 디바이스 드라이버    - 리눅스 커널     - CPU 아키텍처     - SoC ​  조금 넓게 보면 다음 내용도 알면 좋습니다.     - 유저 공간 HAL(Hardware Adaption Layer) 코드 구현     - 빌드 스크립트 구현     - 테스트용 디바이스 드라이버 구현     - git 과 형상 관리​  숙련된 임베디드 리눅스 개발자가 되려면 배워야 할 내용이 많습니다.  문제는 이런 내용을 쉽게 설명한 자료가 부족합니다. 고수 개발자들은 모두 바쁘며 다른 개발자를 위한 개발 문서를 작성하기도 벅찬 것이 현실입니다.​​  신입 임베디드 리..

기기별 운영체제 점유율

기기별 운영체제 점유율 우리가 인지하지 못하는 사이 리눅스는 우리 생활을 이루고 있습니다.이번 시간에는 전 세계에서 IT 각 기기별로 리눅스 운영체제를 얼마나 쓰는지 알아보겠습니다. - 데스크탑(PC)- 휴대폰 - 슈퍼컴퓨터​​  1.  데스크탑 PC 운영체제 점유율 먼저 다음 그림을 보면서 데스크탑 PC 운영체제 점유율을 확인해봅시다.[출처: http://gs.statcounter.com/os-market-share/desktop/worldwide]   위 그래프 가장 윗부분에 Microsoft ‘윈도우 NT 계열’ 운영체제가 73.31% 점유율로 부동의 1위를 지키고 있습니다. 그다음으로 iOS가 15.45% 그리고 리눅스는 4.5% 점유율을 보입니다. 유닉스 계열 운영체제로 분류되는 iOS와 리눅스..