망고100 보드로 놀아보자 -10

Similar documents
지난시간에... 우리는 kernel compile을위하여 cross compile 환경을구축했음. UBUNTU 12.04에서 arm-2009q3를사용하여 간단한 c source를빌드함. 한번은 intel CPU를위한 gcc로, 한번은 ARM CPU를위한 gcc로. AR

슬라이드 제목 없음

망고100 보드로 놀아보자-5


PowerPoint 프레젠테이션

Tizen

Microsoft PowerPoint - em8-리눅스설치.ppt

PowerPoint 프레젠테이션

교육지원 IT시스템 선진화

Chap 10 안드로이드커널 (Kernel)

ARM-Linux Makefile

Mango220 Android How to compile and Transfer image to Target

Microsoft PowerPoint - 03-Development-Environment-2.ppt

untitled

YUM(Yellowdog Updater,Modified) : RPM 패키지가저장된서버 ( 저장소 ) 로부터원하는패키지를자동으로설치한다. : YUM 도구는 RPM 의패키지의존성문제를해결

LXR 설치 및 사용법.doc

Microsoft PowerPoint - e7.pptx

망고100 메뉴얼

[ 컴퓨터시스템 ] 3 주차 1 차시. 디렉토리사이의이동 3 주차 1 차시디렉토리사이의이동 학습목표 1. pwd 명령을사용하여현재디렉토리를확인할수있다. 2. cd 명령을사용하여다른디렉토리로이동할수있다. 3. ls 명령을사용하여디렉토리내의파일목록을옵션에따라다양하게확인할수

Sena Technologies, Inc. HelloDevice Super 1.1.0

슬라이드 1

슬라이드 1

Microsoft Word - 3부A windows 환경 IVF + visual studio.doc

Abstract View of System Components

untitled

PowerPoint 프레젠테이션

1. 안드로이드개발환경설정 안드로이드개발을위해선툴체인을비롯한다양한소프트웨어패키지가필요합니다 툴체인 (Cross-Compiler) 설치 안드로이드 2.2 프로요부터는소스에기본툴체인이 prebuilt 라는이름으로포함되어있지만, 리눅스 나부트로더 (U-boot)

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap01-C언어개요.pptx

PowerPoint 프레젠테이션

Mango-AM335x LCD Type 커널 Module Parameter에서 변경하기

Adding a New Dev file

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

PowerPoint 프레젠테이션

4S 1차년도 평가 발표자료

PowerPoint 프레젠테이션

유니티 변수-함수.key

PowerPoint 프레젠테이션

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

Chapter. 5 Embedded System I Bootloader, Kernel, Ramdisk Professor. Jaeheung, Lee

Microsoft PowerPoint - 06-CompSys-11-System.ppt

Microsoft PowerPoint UNIX Shell.pptx

Adobe Flash 취약점 분석 (CVE )

임베디드시스템설계강의자료 4 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

망고100 보드로 놀아보자-4

Microsoft PowerPoint 통신 및 압축 명령어.ppt

PowerPoint 프레젠테이션

Microsoft PowerPoint - 김창수 v2.pptx

MV6410 Linux 마이크로비젼 MV6410-LCD Linux 활용가이드 마이크로비젼 MV6410 Linux 1

임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

PART II 커널의시작 start_kernel 은어떻게호출될까? 커널의실제시작함수는 start_kernel() 함수다. 이함수는다시 100여개의함수들을호출하면서부팅을진행한다. 하지만 startk_kernel() 함수가호출되기전에커널컴파일을통해얻어진 zimage의압축해

Microsoft PowerPoint - Install Guide[ ].ppt [호환 모드]

슬라이드 1

<4D F736F F D20B1B9B0A1BAB020BEC6C0CCC7C720C2F7B4DC20B0A1C0CCB5E5>

1. 리눅스커널컴파일하기 리눅스일반 왜리눅스인가? 리눅스소스디렉토리구조 LXR 소스코드얻기 소스코드풀기 컴파일준비 커널설정 커널컴파일 14

Abstract View of System Components

PowerPoint 프레젠테이션

Microsoft Word - PA1_Hints.doc

Secure Programming Lecture1 : Introduction

PRO1_04E [읽기 전용]

Microsoft PowerPoint UNIX Shell.ppt

Ä¡¿ì³»ÁöÃÖÁ¾

문서 대제목

교육지원 IT시스템 선진화

Microsoft PowerPoint - 02-Development-Environment-1.ppt

KEY 디바이스 드라이버

슬라이드 1

Mango-IMX6Q mfgtool을 이용한 이미지 Write하기

슬라이드 1


Microsoft PowerPoint - 알고리즘_5주차_1차시.pptx

LN_5_Rootfs

Microsoft PowerPoint - comp_prac_081223_2.pptx

Microsoft PowerPoint - Building.pptx

Discrete Mathematics

작성자 : 기술지원부 김 삼 수

2007_2_project4

DE1-SoC Board

Microsoft PowerPoint - ARM 개발 환경.ppt

PowerPoint 프레젠테이션

<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

28 THE ASIAN JOURNAL OF TEX [2] ko.tex [5]

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

로봇SW교육원 강의자료

s SINUMERIK 840C Service and User Manual DATA SAVING & LOADING & & /

슬라이드 1

Microsoft Word doc

한백전자교육사업부 AndroX Studio 로배우는임베디드프로그래밍 - 한백전자 - 본문서의저작권은 한백전자에있으며, 허락없이무단복제및전제를불허합니다.

MPLAB C18 C

Microsoft Word ARM_ver2_0a.docx

Microsoft Word - FunctionCall

Data Sync Manager(DSM) Example Guide Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager

tut_modelsim(student).hwp

EWAVR 5.1x 프로젝트 옵션 설정(1_2) 2. Project -> > Option -> > General Option -> > Output / Library Configuration Library Configuration 은 사용하게 될 Library file을

목차 운영체제운영체제종류실시간시스템임베디드운영체제임베디드운영체제의개념임베디드리눅스리눅스리눅스부팅과정리눅스디렉토리구조리눅스디렉토리설명리눅스파일시스템리눅스소프트웨어패키지리눅스컴파일러 1

1217 WebTrafMon II

ISP and CodeVisionAVR C Compiler.hwp

BMP 파일 처리

Transcription:

망고 100 보드로놀아보자 -10 Kernel build 분석 http:// http://www.mangoboard.com

커널 build 환경분석 >(Top Dir)/Makefile 첫번째라인에위치 > 커널 2.6.29 버전사용 >ARCH?=arm 의미는 ARCH 의값으로 arm 있느냐묻고, 없으면, arm 문자를대입 >.cross_compile 이있으면,.cross_compile 내용을 CROSS_COMPILE 로사용

커널 build 환경분석 (Conf) #make mango100_android_defconfig 실행시 Scripts/kconfig/Makefile 에서아래코드수행 %_defconfig: $(obj)/conf $(Q)$< -D arch/$(srcarch)/configs/$@ $(Kconfig) make D arch/arm/configs/mango100_android_defconfig.config 파일생성

커널 build 환경분석 (Conf) #make menu_config 명령실행시 #make scripts/kconfig menuconfig 이실행됨 menuconfig: $(obj)/mconf $< $(Kconfig).config 저장

커널 build 환경분석 (Conf) #make xconfig (QT3 Package 필요 ) #yum install qt* 명령으로설치 cannot find lxi 에러발생시 #yum install libxi 실행

커널 build 실행분석 $(TOP)/Makefile 최상위 Makefile vmlinux 와 modules 생성.config 커널설정파일 make [config menuconfig xconfig] 를통해생성. arch/$(arch)/makefile - 아키텍처별 makefile scripts/makefile.* - 모든 kbuild Makefile 에사용되는규칙이들어있는파일 kbuild Makefiles 약 500 개정도가있다.

커널 build 실행분석 1. 커널설정 (make config menuconfig xconfig).config 를만듬 2. 커널버전을 include/linux/version.h 에저장 3. include/asm-$(arch) 에대한심볼릭링크만듬 4. arch/$(arch)/makefile 에서정의된, 그외의타겟빌딩을위한모든종속리스트를준비 5. init-*, core-*, driver-*, net-* 등의타겟등을만듬 6. 모든오브젝트들이링크되고, 소스트리의루트디렉토리에 vmlinux 를만듬. 7. 최종부트이미지 (zimage) 를만들기위한아키텍처에따른부분이실행됨

Built-in object goals (obj-y) specifying object files for vmlinux $(LD) r : to merge $(obj-y) files into one built-in.o file ex. $(TOP)/kernel/Makefile./arch/arm/xxx/built-in.o /drivers/built-in.o /drivers/xxx/built-in.o vmlinux./firmware/built-in.o./fs/built-in.o./kernel/built-in.o./fs/xxx/built-in.o 컴파일후 #find. name built-in.o 명령으로확인./lib/built-in.o

Built-in object goals (obj-y) echo "(patsubst pattern,replacement,text)" vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \ $(core-y) $(core-m) $(drivers-y) $(drivers-m) \ $(net-y) $(net-m) $(libs-y) $(libs-m))) vmlinux-alldirs := $(sort $(vmlinux-dirs) $(patsubst %/,%,$(filter %/, \ $(init-n) $(init-) \ $(core-n) $(core-) $(drivers-n) $(drivers-) \ $(net-n) $(net-) $(libs-n) $(libs-)))) init-y core-y drivers-y net-y libs-y1 libs-y2 libs-y := $(patsubst %/, %/built-in.o, $(init-y)) := $(patsubst %/, %/built-in.o, $(core-y)) := $(patsubst %/, %/built-in.o, $(drivers-y)) := $(patsubst %/, %/built-in.o, $(net-y)) := $(patsubst %/, %/lib.a, $(libs-y)) := $(patsubst %/, %/built-in.o, $(libs-y)) := $(libs-y1) $(libs-y2)

Loadable module goals (obj-m) object files which are built as loadable kernel modules. ex. $(TOP)/driver/scsi/Makefile ex. $(TOP)/.config 참고!! 커널에포함되지않은 external module 을컴파일하기위해서는 Documentation/kbuild/modules.txt 를참조 디바이스드라이버 개발

Environment Variables variable value Description V 0 빌드시에, 현재컴파일되는파일명만을보여줌. (default) V 1 빌드시에실행되는모든명령및메시지를보여 줌. O dir 컴파일되는모든 output file들을 dir에저장되게 지정 C 1 빌드과정에서 sparse tool이컴파일된파일을체 크하게끔한다. sparse은커널소스파일의프로 그래밍에러를찾는툴이다. C 2 sparse tool은컴파일에관계없이모든파일을 체크하게끔한다. Example :# make V=1 ARCH=arm

커널빌드시, 명령및메시지출력옵션 $(top)/makefile 커널빌드시, 소스코드체크옵션 빌드된파일의출력디렉토리지정

How to build vmlinux?? -Makefile : 아키텍처독립적인부분 - arch/arm/makefile : 아키텍처종속적인부분

Building vmlinux vmlinux는 $(vmlinux-init) 와 $(vmlinux-main) 에서정의된오브젝트로만들어진다. 링커스크립트지정 각오브젝트의 linking 순서가중요. ld [ 옵션 ] 오브젝트파일.. -m : 어떤포맷으로출력물을만들것인가?? -T: 링커스크립트지정 --start-group ~ --end-group : ~ 에지정된오브젝트들서로간에변수나함수참조를가능하게함. -o : 출력파일명지정 $(vmlinux-init) $(head-y) $(init-y) vmlinux $(vmlinux-main) $(core-y) $(libs-y) $(drivers-y) $(net-y) kallsyms.o

Building zimage (1/3) 1. arch/arm/boot/compressed/image $(topdir)/vmlinux 에서.note 섹션,.comment 섹션및모든심볼들과재배치정보들을제거한후, 인스트럭션데이터만을뽑아, arch/arm/boot/compressed/image 라는바이너리파일을만든다. arm-linux-objcopy -O binary -R.note -R.note.gnu.build-id -R.comment -S vmlinux arch/arm/boot/image objcopy [ 옵션 ] 입력파일 [ 출력파일 ] -O오브젝트형식: 어떤오브젝트형식으로출력파일을만들것인지지정 ( 예 : elf32-i386, binary) -R 섹션 : 출력파일에서해당섹션을지운다. -S : 입력파일의재배치정보와심볼정보를출력파일에복사하지않는다. 2. arch/arm/boot/compressed/piggy.gz 1 단계에서만든, Image 을가장압축률이좋은방법으로압축해서 (-9), piggy.gz 을만듬 gzip -f -9 < arch/arm/boot/compressed/../image > arch/arm/boot/compressed/piggy.gz

Building zimage (2/3) 3. arch/arm/boot/compressed/piggy.o arm-linux-gcc -Wp,-MD,arch/arm/boot/compressed/.piggy.o.d -nostdinc -isystem /usr/local/arm/4.2.2-eabi/usr/bin-ccache/../lib/gcc/arm-unknown-linux-gnueabi/4.2.2/include -Iinclude -I/home/icanjji/work/mango100/mango100_kernel_2010_06_30/arch/arm/include -include include/linux/autoconf.h -D KERNEL -mlittle-endian -Iarch/arm/mach-s5pc100/include -Iarch/arm/plat-s5pc1xx/include -Iarch/arm/plat-s3c/include -D ASSEMBLY -mabi=aapcs-linux -mno-thumb-interwork -D LINUX_ARM_ARCH =7 -march=armv5t -Wa,-march=armv7-a -msoft-float -gdwarf-2 -Wa,-march=all -c -o arch/arm/boot/compressed/piggy.o arch/arm/boot/compressed/piggy.s 4. arch/arm/boot/compressed/vmlinux head.o + misc.o + piggy.o 를링킹해서, vmlinux 를만듬, 이때.text 섹션은 0x20008000 위치부터, 엔트리포인트는 startup_32 로지정한다. ld [ 옵션 ] 오브젝트파일.. -m emulation : 링커에게해당타겟 emulation 에맞는정보를제공 ( 예. 링커스크립트등 ) -r : 재할당가능한출력파일을생성. 즉, ld 의입력오브젝트로쓰일수있는출력파일을생성. ( 실제로 piggy.o 는 ld 로다시링킹됨 ) --format input-format : 입력오브젝트파일의형식지정 --oformat output-format : 출력오브젝트파일의형식지정. -o : 출력파일명지정 -Ttext org : text 섹션의시작주소를 org로지정 -e entry : 엔트리포인트를지정한다.

Building zimage (3/3) 5. arch/arm/boot/zimage 4 단계에서만든 vmlinux 에서.note 섹션,.comment 섹션및모든심볼들과재배치정보들을제거한후, 인스트럭션데이터만을뽑아, arch/arm/boot/zimage 라는바이너리파일을만든다. arm-linux-objcopy -O binary -R.note -R.note.gnu.build-id -R.comment -S arch/arm/boot/compressed/vmlinux arch/arm/boot/zimage

결론 - Kernel Build Process arch/arm/boot/compressed arch/arm/boot 45M head.o misc.o 5M objcopy gzip 압축 3M piggy.o linking 3M objcopy 3M vmlinux 인스트럭션과데이터부분외의기타섹션은모두삭제 Image Piggy.gz ELF Object Binary Object vmlinux 인스트럭션과데이터부분외의기타섹션은모두삭제 zimage

참고 : kernel Makefile 계층도 all make silentoldconfig vmlinux zimage arch/arm/boot/makefile 에서 make zimage 를다시수행 $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsysms.o) $(obj) = arch/arm/boot zimage $(vmlinux-dirs) init usr kernel mm fs ipc security crypto block drivers sound net lib prepare prepare0 archpare arch/arm/kernel arch/arm/mm arch/arm/crypto include/config/auto.conf include/config/kernel.release prepare1 prepare2 prepare3 scripts_basic include/linux/version.h include/linux/utsrelease.h include/asm $(obj) = arch/arm/boot/compressed $(obj)/compressed/vmlinux $(obj)/head.o $(obj)/misc.o $(obj)/piggy.o $(obj)/piggy.gz $(obj)/image vmlinux 여기에서 vmlinux 는커널소스최상위디렉토리에서만들어진 vmlinux 를말한다.

vmlinux.lds 첫부분. OUTPUT_ARCH(arm) ENTRY(_start) SECTIONS {. = 0; _text =.;.text : { _start =.; *(.start) *(.text) *(.text.*) *(.fixup) *(.gnu.warning) *(.rodata) *(.rodata.*) *(.glue_7) *(.glue_7t) *(.piggydata). = ALIGN(4); } Start entry 포인트는 _start

( 예제 ) readelf -l arch/arm/boot/compressed/vmlinux

참고 : 커널빌드시, Log 남기기 make V=1 ARCH=arm 2>&1 tee log-kernel.txt