728x90

커널 소스 분석 환경 준비

커널

- 하드웨어 자원을 효율적으로 사용하게 해주는 소프트웨어

- 리눅스는 커널이 오픈소스로 무료로 사용 변경 수정 가능

- 리눅스 커널은 리눅스 재단에서 버전 관리

 

리눅스 커널 다운로드하는곳

- kernel.org

- tar.xz 압축 파일로 다운로드됨

 

커널 소스

- 압축 파일 안에 대부분 c언어로 작성. 일부는 어셈블리어

 

리눅스 커널 분석에 필요한 환경

- 소스에서 수정이 필요한곳을 찾아 수정해야함

- but 소스코드가 방대하여 함수, 변수, 기능 찾기가 힘듬

- 소스 코드 중 원하는 부분을 찾는 도구를 사용해야함.

- 이클립스의 ctags, cscope, taglist 등 도구 설치 or vim 에디터에 이 도구들 결합하여 사용

 

각 도구별 활용 방법

- 리눅스 터미널에서 vim에 cscope와 plugin 연동해 사용

- vim, cscope, ctags에 taglist.vim, the nerd tree, srcexpl.vim 추가해서 사용

- vim은 기본적인 에디터

- ctags : 프로그램 소스로부터 태그를 생성. 태그는 간단하게 인덱스라 생각하면됨. 함수나 변수, 클래스 맴버, 매크로등 요소들을 인덱스로 생성하여 디비로 만들고. db정보를 이용해 vim 에디터에서 쉽게 변수, 함수 검색

 

ctag 설치 과정

- sudo apt-get install ctags

 

스크립트 존재 확인

- ls -al ./scripts/tags.sh

- make tags ARCH=arm -> 아키텍처를 arm에 국한해서 태그 생성

 

tags 파일 생성 확인

- ls -alh tags

 

 

cscope

- 소스코드 심볼에 대한 인덱스 구성. 이 인덱스를 통해 심볼이 위치한 파일을 찾을 수 있음

- cscope는 ctags가 가진 제약사완 보완해서 같이 사용

 

cscope 설치

- sudo apt-get install cscope

 

arm용 cscope db 생성

- make cscope arch=arm

 

db 파일 생성 확인

- ls -alh cscope.*

 

vim-plug

- 커널 소스분석을 위한 심볼 데이터페이스 생성을 끝낸후 vim에서 쓰면되는데 직관적인 환경 구성을 도움

- vim과 플러그인들을 조합하고 ctag, cscope 연동

- source explorer, nerd tree, tag list 플러그인 등 설치 필요 -> www.vim.org

 

 

설치 방법

- mkdir .vim

- cp download/screxpl.vim .vim

- cp download/nerd_tree.zip .vim

- cp download/taglist_46.zip .vim

- cd .vim

- mkdir plugin

-mv scexpl.vim ./plugin

- unzip nerd_tree.zip

- unzip taglist_46.zip

- ls ./plugin (nerd_tree.vim , scexpl.vim, taglist_46.vim 확인

 

 

 

 

커널 소스 분석하기

커널 소스 다운로드 방법

- 라즈베리파이에 맞는 리눅스 커널 소스

git clone --depth=1 https://github.com/raspberrypi/linux

 

컴파일 방법

- make 명령어 사용

- makefile이라는 파일을 찾아 정의해놓은 소스를 빌드하기 위한 순서대로 수행

- 리눅스 소스 트리 루트에 컴파일러 설정 항목이 있음

- 크로스 컴파일러의 설치 위치가 다를수 있어 변경이 필요할수도 있음

- make 하기전, 아키텍처와 컴파일러 설정. 

export ARCH=arm

export CROSS_COMPILE=aarch64-linux-gnu-

 

 

커널의 부팅과정과 소스코드

- 부트로더에서 커널이 올라올 경우 zImage가 올라와서 압축이 해제됨

- zImage 앞부분 압축 해제 코드/ 뒷부분 :  압축된 커널 내용

 

 

zImage 압축 해제 순서

- 초기화 작업 후 zImage에 내장된 압축 해제 프로그램에서 진행

- piggy.gzip 같은 리눅스 커널을 메모리 상에 압축을 해제해서 올림 

 

압축 해재 후 실행 순서

 

커널의 계층적 구조

 

 

운영체제 커널 분석 - 리눅스 커널 소스 분석

1. 라즈베리파이 커널 소스 다운

- 이후 src 폴더에 옮김

 

2. 운영체제 소스 분석을 위한 도구 다운로드 및 설치

ctag

- 태그 데이터베이스를 만들어 코드에서 찾고자하는 함수가 있을때 함수가 정의된 곳으로 이동시켜줌

 

cscope

- ctags에서 지원하지 않는 함수들을 탐색이 가능

- 일바족으로 ctags, cscope 같이 사용

 

ctag 설치

- sudo apt-get install ctags 

 

 

테크 디비 생성

- 범위 지정 후 메이크

- make tags ARCH=arm

 

cscope 설치

- sudo apt-get install cscopes

 

cscope db 생성

- make scope ARCH=arm

 

vim 플러그인 이용하기

- www.vim.org 서 다운 가능

- source expolorer, nerd tree, taglist 다운

 

 

플러그인 설치

- .vim 디렉토리 생성하여 플러그인 복사

- unzip으로 해제해야함

 

vim과 플러그인 연동 - vim 설정 수정

- vi .vimrc

 

 

라즈베리파이 운영체제 소스 분석

- 커널 소스가 있는 폴더에서 vim 실행

 

- f7, f8, f9 클릭하여 플러그인 켜기

 

- ctrl + h,j,k,l 화면에서 커서 이동

 

커널의 시직 프로그램

init/main.c

 

start_kernel 찾기

- ex mode 진입 : esc + :

- start_kernel 검색

- 왼쪽이 소스 익스플로러, 중간이 소스 에디터, 우측이 함수 목록

 

 

start_kernel로 이동

- start_kernel 엔터

하단 창에 커서가 지정된 함수가 정의 된 곳이 나옴

setup_arch 함수로 이동

- start_kernel 함수 내 setup_arch 함수 위 커서 놓기

- 아래 창으로 이동 후 file path 에서 엔터

이전으로 이동하기

- space

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

300x250

+ Recent posts