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 설치해줘야함