전체 글 290

강력한 리눅스 커널 디버깅 툴 , ftrace 개론 - 작성중-

printk 또는 dump_stack 을 사용하면서 불편하답니다. 저는 많이 안써봤습니다. 그래서 ftrace 를 많이 현업에서도 사용한다고 합니다. 주요 특징은 함수 호출 흐름을 소스코드 수정하지 않고도 보고싶다. 커널의 세부 실행 정보를 출력해줬으면 좋겠다. 1초에 수십번 호출해도 성능에 부담을 주지 않는다. 커널 로그도 함께 본다. 인터럽트, 스케쥴링, 커널 타이머 등의 커널 동작 상세히 추적 함수 필터를 지정하면 지정한 함수를 호출한 함수와 전체 콜 스택까지 출력 함수를 어느 프로세스가 실행하는지 알 수 있다. 함수가 실행된 시각 정보를 알 수 있다. ftrace 로그 활성화해도 시스템 동작에 부하를 거의 주지 않는다. 과연 그럴까 생각들정도로 강력한 것은 사실입니다. How to do confi..

Unix & Linux/ftrace 2022.07.11

리눅스 커널 소스의 구조 ( Linux Kernel Structure )

arch 아키텍처별로 동작하는 커널 코드가 있음 - arm : 32bit 계열 arm 아키텍쳐 - arm64 : 64bit 계열 Arm 아키텍쳐 - x86 : 인텔 x86 아키텍쳐 include 커널 코드 빌드에 필요한 헤더 Documentation 커널 기술문서 kernel 커널의 핵심 코드가 있는 폴더 다음과 같은 하위 디렉토리 irq 인터럽트 관련 sched 스케쥴링 코드 power 커널 파워매니지먼트 locking 커널 동기화 관련코드 printk 커널 콘솔 관련 코드 trace ftrace 관련 코드 위 디렉토리에는 아키텍처와 무관한 커널 공통 코드가 있고, 아키텍쳐 별로 동작하는 커널 코드는 arch/*/kernel 에 있습니다. 라즈비안의 경우 ARMv7 아키텍쳐 관련 코드는 arch/arm..

Unix & Linux/Kernel 2022.07.07

커널 컴파일 디버깅 노트 (2) - 전처리 코드 생성

리눅스 커널을 빌드하는 과정에서 전처리 코드를 생성하는 방법은 아래와 같다. 리눅스 커널 소스를 분석하다보면 수많은 매크로를 만난다. 이러한 이 매크로가 소스 분석의 걸림돌 중하나이다. 전처리 코드는 이러한 매크로를 모두 풀어서 표현한다. 따라서 훨씬 편하게 소스코드로 분석할 수 있으며, 리눅스 커널 코드 를 분석할 때는 전처리 코드를 함께 봐야한다. 전체 전처리 파일을 추출 linux 폴더의 makefile 수정 -save-temps=obj \ 을 위와 같이 Makefile 을 수정하면된다. 그리고 다시 커널 빌드하면 전처리코드가 out폴더에 생성됩니다. /out/kernel/sched 에 들어가보면 *.i 뿐만아니라 *.s 파일도 생성되어있습니다. 용량은 5G 정도 늘어납니다.

Unix & Linux/Kernel 2022.07.07

라즈베리파이3, BCM2709 ? 뭘까?

BCM2709 커널 컴파일하다보면 BCM2709 라는 뭔가 칩셋명같은 것이 보인다. 무엇일까? 구글에서 뭔가 실마리가 될만한 표를 찾았다. 하드웨어칸에 BCM2709 라고있다 . CPU 명일지도 몰랐다고 생각했는데 CPU 는 브로드컴 BCM2837 을 사용한다. 쿼드코어 64bit 그러면 BCM2709 는 어떤칩일까? 찾았다. 바로 Base 가 되는 칩? 이라는 것이다. BCM2709 에 살을 붙여서 2837 이 나왔다는 이야기 실제로 불일치는 실리콘 및 칩 패키지의 지정 때문입니다. 원래 BCM2708로 알려진 실리콘 다이가 있었고 모든 초기 개발은 이를 중심으로 이루어졌습니다. 256MB DRAM이 있는 스택형 9x9 패키지에서는 BCM2763으로 알려져 있습니다. (스택은 말 그대로 프로세서 상단에..

커널 컴파일 디버깅 노트 (1) - O=$OUTPUT 추가시 error

아래와 같이 O=$OUTPUT 을 추가하면 아래와 같이 Error 가 발생 왜그럴까? O=$OUTPUT 만 빼면 괜찮다 echo "kernel build" make O=$OUTPUT -j4 zImage modules dtbs -j4 2>&1 | tee $BUILD_LOG 위에 설명한대로 linux 폴더에서 make mrproper하면된다 make mrproper : 이전의 컴파일시 설정되었던 설정을 제거 (최초 커널 컴파일시나 이전 설정한 컴파일 환경을 재사용한다면 생략 가능 ) make menuconfig : 텍스트 환경 혹은 make xconfig : x윈도우 환경 혹은 make oldconfig : 기존의 환경을 불러와서 새로운 것만 설정 make dep : 설정한 영역의 의존성 검사 make cl..

Unix & Linux/Kernel 2022.07.05

리눅스 커널 용어 정리 (1) - zImage , modules , dtbs

zImage Kernel Image 커널 바이너리, 보통 make 명령어로 커널을 빌드하면 만들어진다. 자동 압축 해제되는 Linux 커널 이미지의 압축된 버전 커널이 하나의 파일로 디스크에 저장되어 있는 것 커널은 원래 파일에 저장되어있는 것이 아니라 컴퓨터가 꺼지기 전까지는 메모리에 존재 부트로더에 의해 로드될 최종적인 복합 커널 이미지 Modules 커널에서 사용되는 네트워크 드라이브를 모두 가지고있으면 발생하는 비효율적인 문제를 해결하기위해 모듈이라는 파일로 커널 외부에 별도로 가지고있음으로써 새로운 장치 추가시 커널 바꿀필요없이 해당모듈만 적재후 제거한 후 사용 가능 모듈 관련 명령어 리눅스 커널에 적재된 모듈 정보 출력 lsmod 모듈에 대한 정보 출력 modinfo [module name] ..

Unix & Linux/Kernel 2022.07.04