Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

83112
549
416223


[라즈베리파이] 커널 살펴보기 - 섹션 정보 dev utility

아래 명령어로 라즈베리파이 소스 다운로드를 하고,
git clone --depth=1 https://github.com/raspberrypi/linux.git

크로스 컴파일러 툴을 설치한 다음에,
git clone https://github.com/raspberrypi/tools

커널 빌드를 하면 vmlinux을 추출할 수 있습니다.
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs  -j12

아래 명령어로 라즈베리파이 섹션 정보를 파악할 수 있는데요. 조금 더 짚어 보겠습니다.
./objdump -x vmlinux  | more

섹션이란 용어에 대해서 설명을 하겠습니다. 섹션은 임베디드 소스 빌드 시 쓰이는 개념인데, 비슷한 속성의 코드들을 묶어서 처리하면 용이하기 때문에 리눅스 커널서도 활용합니다. 각 섹션 정보를 리눅스 lds 파일에서 정의합니다만, 일단 이 페이지에서는 라즈베리파이 리눅스 커널의 섹션 정보 리뷰를 하겠습니다.

[1]: 스타트업 코드: .head.text 섹션에 위치하고 실행 시작 주소는 0x80008000입니다.
                        리눅스 커널 코드를 정해진 메모리 공간에 로딩해 놓으면 0x80008000 주소부터 실행됩니다.  
[2]: 커널 함수: 우리가 볼 수 있는 대부분 커널 함수들은 .text 영역에 위치해 있습니다.

[3]: __init 이란 매크로를 드라이버 실행 함수에 많이 붙힙니다. 이 함수들이 위치한 섹션이 .init.data입니다.
     커널이 부팅할 때 do_initcall 함수를 호출할 때 .init.data 섹션에 있는 함수들을 차례 차례 실행합니다.

[4]: per-cpu 타입 데이터들은 모두 data..percpu 섹션에 위치합니다.
Sections:
Idx Name          Size      VMA       LMA       File off  Algn
0 .head.text    0000026c  80008000  80008000  00008000  2**2  //<<--[1]
                CONTENTS, ALLOC, LOAD, READONLY, CODE
.text         00607618  80100000  80100000  00010000  2**6  //<<--[2]
                CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .fixup        0000001c  80707618  80707618  00617618  2**2
                CONTENTS, ALLOC, LOAD, READONLY, CODE
3 .rodata       001b8c84  80800000  80800000  00618000  2**12
                CONTENTS, ALLOC, LOAD, DATA
4 __bug_table   00006534  809b8c88  809b8c88  007d0c88  2**2
                CONTENTS, ALLOC, LOAD, DATA
5 __ksymtab     00007918  809bf1bc  809bf1bc  007d71bc  2**2
                CONTENTS, ALLOC, LOAD, READONLY, DATA
6 __ksymtab_gpl 00006738  809c6ad4  809c6ad4  007dead4  2**2
                CONTENTS, ALLOC, LOAD, READONLY, DATA
7 __kcrctab     00003c8c  809cd20c  809cd20c  007e520c  2**2
                CONTENTS, ALLOC, LOAD, READONLY, DATA
8 __kcrctab_gpl 0000339c  809d0e98  809d0e98  007e8e98  2**2
                CONTENTS, ALLOC, LOAD, READONLY, DATA
9 __ksymtab_strings 0002120e  809d4234  809d4234  007ec234  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
10 __param       00001374  809f5444  809f5444  0080d444  2**2
                 CONTENTS, ALLOC, LOAD, READONLY, DATA
11 __modver      00000848  809f67b8  809f67b8  0080e7b8  2**2
                 CONTENTS, ALLOC, LOAD, READONLY, DATA
12 __ex_table    00000f20  809f7000  809f7000  0080f000  2**3
                 CONTENTS, ALLOC, LOAD, READONLY, DATA
13 .ARM.unwind_idx 00034f70  809f7f20  809f7f20  0080ff20  2**2
                 CONTENTS, ALLOC, LOAD, READONLY, DATA
14 .ARM.unwind_tab 0004f58c  80a2ce90  80a2ce90  00844e90  2**2
                 CONTENTS, ALLOC, LOAD, READONLY, DATA
15 .notes        00000024  80a7c41c  80a7c41c  0089441c  2**2
                 CONTENTS, ALLOC, LOAD, READONLY, CODE
16 .vectors      00000020  ffff0000  80b00000  00898000  2**2
                 CONTENTS, ALLOC, LOAD, READONLY, CODE
17 .stubs        000002c0  ffff1000  80b00020  00899000  2**5
                 CONTENTS, ALLOC, LOAD, READONLY, CODE
18 .init.text    0004274c  80b002e0  80b002e0  008a02e0  2**5 //<<--[3]
                 CONTENTS, ALLOC, LOAD, READONLY, CODE
19 .exit.text    000014bc  80b42a2c  80b42a2c  008e2a2c  2**2
                 CONTENTS, ALLOC, LOAD, READONLY, CODE
20 .init.proc.info 0000023c  80b43ee8  80b43ee8  008e3ee8  2**0
                 CONTENTS, ALLOC, LOAD, READONLY, DATA
21 .init.arch.info 000000d0  80b44124  80b44124  008e4124  2**2
                 CONTENTS, ALLOC, LOAD, READONLY, DATA
22 .init.tagtable 00000010  80b441f4  80b441f4  008e41f4  2**2
                 CONTENTS, ALLOC, LOAD, READONLY, DATA
23 .init.smpalt  0000ede8  80b44204  80b44204  008e4204  2**2
                 CONTENTS, ALLOC, LOAD, READONLY, DATA
24 .init.pv_table 000008a8  80b52fec  80b52fec  008f2fec  2**0
                 CONTENTS, ALLOC, LOAD, READONLY, DATA
25 .init.data    00022b74  80b54000  80b54000  008f4000  2**12
                 CONTENTS, ALLOC, LOAD, DATA
26 .data..percpu 00006400  80b77000  80b77000  00917000  2**6 //<<--[4]
                 CONTENTS, ALLOC, LOAD, DATA
27 .data         000798e4  80c00000  80c00000  00920000  2**6
                 CONTENTS, ALLOC, LOAD, DATA
28 .data..page_aligned 00001000  80c7a000  80c7a000  0099a000  2**12
                 CONTENTS, ALLOC, LOAD, DATA
29 .bss          000c09a4  80c7b000  80c7b000  0099b000  2**6
                 ALLOC
30 .comment      0000005b  00000000  00000000  0099b000  2**0
                 CONTENTS, READONLY
31 .ARM.attributes 0000002f  00000000  00000000  0099b05b  2**0
                 CONTENTS, READONLY

덧글

댓글 입력 영역