커널 소스 분석 환경 준비
커널
- 하드웨어 자원을 효율적으로 사용하게 해주는 소프트웨어
- 리눅스는 커널이 오픈소스로 무료로 사용 변경 수정 가능
- 리눅스 커널은 리눅스 재단에서 버전 관리
리눅스 커널 다운로드하는곳
- 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
'컴퓨터과학 > 임베디드' 카테고리의 다른 글
임베디드 SW 엔지니어링 - 8 운영체제 이식 (0) | 2020.05.27 |
---|---|
임베디드 SW 엔지니어링 - 6 펌웨어 구현 (1) | 2020.05.27 |
임베디드 SW 엔지니어링 - 5 펌웨어 구현 환경 구축 (0) | 2020.05.25 |
임베디드 SW 엔지니어링 - 4 펌웨어 설계 (0) | 2020.05.25 |
임베디드 SW 엔지니어링 - 3 펌웨어 분석 (0) | 2020.05.25 |