Embedded : : Linux 48

디바이스 트리의 구조와 장치 표현

1.  디바이스 트리 전체 구조 소개    1.1  확장자 .dtsi, .dts​  확장자가 dtsi인 파일은 SoC(System-on-Chip : 단일 칩에 모든 기능이 직접된 직접회로)를 표현하며 dts인 경우는 하위 보드를 표현한다.​   1.2  상속 및 include​  계층구조를 유지하기 위해 하위보드는 상위보드 혹은 SoC의 dts를 상속 받을 수 있으며, include문 (혹은 C의 #include 도 가능)을 사용하여 상위보드 혹은 SoC를 위한 dts 파일을 포함 시킬 수 있다.​   1.3  중복 시​  하위보드에서 정의한 내용 중, 상위보드의 내용과 중복되는 내용은 하위보드에서 정의한 내용이 최종적으로 반영되며, 중복되지 않은 내용은 새로 추가(역시 반영) 된다.​   1.4  So..

Embedded : : Linux 2024.11.01

확장자 별 파일 역할 (.mk .xml .prop .rc .dts .dtsi)

확장자 명 역할 .mkmake에게 어떤 프로그램을 컴파일하고 링크하는 방법을 설명한 파일.xml데이터들을 쉽게 구조화 해서 전달하기 위해 만들어진 문서 형식 cs) 엑셀 , .prop Android 장치에서 사용하는 빌드 속성 파일 모델, 브랜드 및 버전, 휴대전화의 작동 방식과 같은 정보 포함 ​ 파일을 편집하여 인터넷 속도, LCD 밀도, 배터리 사용량 및 성능을 비롯하여 장치 동작을 변경.rc 리소스 파일.dts HW 장치에 대한 정보를 기술한 파일 .dtsidts에서 include하는 파일​ ※  DTS 파일과 DTSI 파일을 이용하여 컴파일  →  DTB 파일 생성

Embedded : : Linux 2024.10.31

[Linux Kernel] configuration file

1.  configuration file    1.1  introLinux kernel에 관계된 directory들에는 Kconfig와 makefile이 함께 존재한다. ※  Makefile : 파일을 생성하는 스크립트.obj-변수(CONFIG_XX_*) 의 값이 y라면 해당 *.o 파일을 오브젝트 파일로 만들겠다.변수 위치 : 최상위 디렉터리 안 (Kconfig를 참고해 .config 파일은 자동으로 생성됨)obj-$(CONFIG_FOO) += foo.o # CONFIG_FOO의 값이 y라면 해당 *.o 파일을 오브젝트 파일로 만들겠다는 뜻임​​   1.2  Kconfig​Kconfig: kernel에 대한 설정에 대해 정의되어있는 파일을 의미 make menuconfig를 했을 때, 보이는 화면은 K..

커널 로그 분석: WARN 매크로

1.  커널 로그 분석 방법    1.1  커널 로그 분석 순서  1. 오류 메시지를 커널 어느 코드에서 출력했는지 확인한다.  2. 소스코드에서 에러 메시지를 출력한 이유를 살펴본다.   3. 필요에 따라 디버깅 코드를 작성해 다시 문제가 발생했을 때 추가 커널 로그 확보를 시도한다.      1.2  WARN 매크로​WARN(1, KERN_WARNING "Unbalanced enable for IRQ %d\n", irq_desc_get_irq(desc));WARN 매크로를 어떤 함수에서 실행되면 시스템 정보를 커널 로그로 출력한다.1. 콜스택2. 현재 수행중인 프로세스 정보 : CPU 번호, 프로세스 이름, pid3. 함수 이름과 라인 정보 ​ WARN 매크로는 시스템에 뭔가 논리적 오류가 있을 경우..

dump_stack()

1. dump_stack() 함수   1.1  dump_stack() 함수 기능​커널 로그를 통해 커널 동작 중 call stack을 보여주는 기능을 한다. 스택트레이스를 커널 로그를 통해 출력한다.​즉, 오류가 나는 부분에 dump_stack() 함수를 추가하여 오류가 나기전 콜스택을 볼 수 있다.​   1.2  dump_stack() 함수 위치​dump_stack() 선언부asmlinkage __visible void dump_stack(void);- 인자와 반환 값이 모두 void 인것을 확인 할 수 있다. ​​※ 콜스택의 흐름은 밑에서 위로 가장 최신이 출력된다.       1.3  dump_stack() 사용예외처리나 심각한 오류가 발생한 경우 사용한다. ​#include 헤더를 추가한 후, 커..

Embedded : : Linux 2024.10.31

Debugging the kernel using Ftrace

Debugging the kernel using Ftrace 이 기사는 Steven Rostedt가 기고했습니다.Ftrace는 Linux 커널에 직접 내장된 추적 유틸리티입니다. 많은 배포판은 이미 최신 릴리스에서 다양한 Ftrace 구성을 활성화했습니다. Ftrace가 Linux에 제공하는 이점 중 하나는 커널 내부에서 무슨 일이 일어나고 있는지 볼 수 있다는 것입니다. 따라서 문제 영역을 찾거나 이상한 버그를 추적하는 것이 더 쉬워집니다.Ftrace는 충돌로 이어지는 이벤트를 보여주는 기능을 통해 충돌의 정확한 원인을 찾을 수 있는 가능성이 높아지고 개발자가 올바른 솔루션을 만드는 데 도움이 될 수 있습니다. 이 기사는 Linux 커널을 디버깅하는 데 Ftrace를 사용하는 다양한 방법을 다루는 2부..

리눅스가 널리 채택된 요인들

0.  Intro   리눅스가 널리 보급된 이유는 뭘까? 그리고, 왜 TV처럼 단순한 것이 리눅스와 같은 것을 실행해야 할까?   TV는 이제 옛날의 아날로그 TV처럼 영상만 보여주지 않는다. Video Stream은 디지털이고, 암호화가 가능하며, 인터넷에 연결되어 스마트폰, 태블릿, 홈미디어 서버로부터 콘텐츠를 받을 수 있다.   대부분의 임베디드 디바이스의 심장부에는 하나 이상의 프로세서 코어를 포함하고 주메모리, 대량 저장공간, 여러 종류의 주변 기기와 연결되는 고도로 집적된 SoC가 있어 TV로 게임을 할 수 있는 등 활용의 폭이 넓다.   이정도로 복잡함을 다루려면 제대로 된 운영체제가 필요하다.    1.  리눅스가 널리 채택된 요인들    1.  리눅스는 필요한 기능을 갖고있다.  좋은 스..

Embedded : : Linux 2024.10.13

[shell script] "$*" 과 "$@"의 차이

흔히 $*와 $@를 구분 없이 많이 사용하고 있는데, 사실 약간은 다르다. 레퍼런스에 보면 아래와 같이 정의되어 있다."$*" All the positional parameters (as a single word) *"$@" All the positional parameters (as separate strings)무슨 뜻이냐면, $*는 모든 parameter를 하나의 단어로 취급한다는 의미고, $@는 별도의 문자로 취급한다는 의미다. (응?) 다시말해, $*는 입력되는 모든 parameter를 한개의 단어로 취급한다는 뜻. $@는 공백으로 구분된 별도의 문자열로 취급한다는 의미다. 아래와 같은 스크립트 코드가 있다.#!/bin/shecho "================="echo "\$@ sectio..

태스크 디스크립터: 프로세스 간 관계

1.  태스크 디스크립터: 프로세스 사이간의 관계   1.1  프로세스의 부모-자식 관계​유저 공간에서 생성한 모든 프로세스의 부모 프로세스는 init 이고 커널 공간에서 생성한 커널 스레드(프로세스)의 부모 프로세스는 kthreadd라고 했습니다. 태스크 디스크립터에서는 프로세스의 부모와 자식 관계를 상세히 알 수 있습니다. struct task_struct  *real_parent; 프로세스를 생성한 부모 프로세스의 태스크 디스크립터 주소를 저장합니다. struct task_struct *parent; 부모 프로세스를 의미합니다. real_parent 란 멤버는 해당 프로세스를 생성해준 프로세스를 의미합니다. 그런데 자식 프로세스 입장에서 부모 프로세스가 소멸된 경우 부모 프로세스를 다른 프로세스로 ..