임베디드/리눅스 커널

중간정리..

twoweeks-within 2025. 2. 24. 19:10

0. SD card -> 이미지 (.img)를 구워서 넣었음

     :  uboot 부트로더 , kernel8.img 

 

1. git -> 소스코드 다운

 

// build.sh

2-1. bcm2711_defconfig : mcu마다 컴파일에 필요한 옵션들이 다름

2-2. Image Module dtbs(HW) : build

// makefile 이용

// make menuconfig

// /out 에 conf 설정들을 바꾸기위한 ui제공

    : out : 결과물들 ( .o 들)

>> install.sh  > 하나의 파일로 합쳐짐

>

cp /arch/arm64/boot/Image  /arch/arm64/boot/Image

kernel8.img v2, v3, v4, v5....

<>

bootloader 도 바꾸고싶다면..

: 컴파일은 내pc, 프로그램은  라즈베리에서 동작하는

  크로스컴파일러 이용해야함 

  (+ 컴파일 속도 향상을 위해)

 

ftrace : 커널 디버깅 tool .. ~= prinf  // + 커널 덤프 (로그) 도 많이씀

            // 가장 cpu 적게씀

> trace_printfk()

 

1. .config : CONFIG_FTRACE = y 확인 후 컴파일

2. debugfs 마운트

3. 추적함수 지정 // 다 하기에는 너무 많으니깐

    : echo 추적함수 > /kernel/debug/tracing/set_ftrace_filter

    // '>' : 앞에 쓴걸 뒤에 있는 파일로 보냄

   // 추적함수를 비우고 echo > 만 하면 초기화

4. 추적기 설정

      : echo funtion > /tracing/current_tracer

     // 여러 추적기 중 함수 추적기를 쓰겠다

5. 추적 시작

      : echo 1 > /tracing/trace_on 

     //1 : on, 0: off  

     // 그냥 규칙임 ftrace 만든사람의

6. 추적 데이터 확인

     : /tracing/trace 

// cat /proc/interrupts : 인터럽트 확인

 

로그 보는법

 로그란? 커널 부팅,동작 하면서 남겨두는 메시지

   > 문제 발생시 이걸 따라가며 디버깅

 보통 개발자가 만든 코드가아니라 그 Device Driver 가 호출한 커널 내부함수에서 문제 발생!

 : dmesg

 

grep 명령어

 

  • -r (recursive) : 하위 디렉토리까지 재귀적으로 검색
  • -n (line number) : 해당 줄 번호도 출력

> grep -rn 찾고싶은함수

// 띄어쓰기 하려면 > " 함수"

// 현재 디렉토리의 모든 파일 : 뒤에 *

    <> *.c, *.s, *.o .., hi.c, yu.s : 특정 파일

 

grep시 주의사항!!

 

로그 : usbcore: registerd interface driver

코드 : pr_info("%s: registerd interface driver \n", usbcore_name);

>

이때 grep -rn "ubscore: registerd" * 를 아무리해도 안나옴

  : 코드로 추적하는거라 로그 대로 하면 안됨

     > 눈치껏 뭔가뭔가 한건 빼고 검색

     > grep -rn "registerd new" * 이런식으로..

 

printk(상위), pr_info(하위)
: pr_info가 printk 를 호출해서 출력

// printk 는 표준출력 보다는 커널 내부 로그만 남김

 

WARN : 오류 문구 출력 + 로그 까지 보여줌

 

 

 

+ vi(vim) 작성시 tip

 

1. :set (no)number : 줄 수 보이게 

    // :set (no)nu

 

2. set mouse = n : xshell 마우스 기능 사용 가능 // 복붙 // i 누른뒤

                    <> a

>> home 폴더 > vi .vimrc 여기에 1,2 번 작성 

    +

    filetype plugin indent on

    syntax on

    > 문법에 맞춰 들여쓰기, 색 조절 

 

 

+

make config          : ui 없이

make menuconfig : ui 있이

// apt-get install libncurses5d-dev 설치해줘야함

'임베디드 > 리눅스 커널' 카테고리의 다른 글

Process-2  (0) 2025.03.22
Process  (0) 2025.03.13
trace32, Driver분석  (0) 2025.03.13
ftrace  (0) 2025.02.26
1. 커널  (0) 2025.02.17