• 검색 결과가 없습니다.

커널 Image 생성

문서에서 GettingStarted-with-HBE-EMPOSII (페이지 55-61)

4. 커널

4.3. 커널 Image 생성

EMPOSⅡ에서는 linux-2.4.19 버전의 커널을 사용하고 있다. 커널을 보드에 맞게 컴파일 하기 위해서는 먼저 해당 커널 압축파일을 다운로드 받고, Arm 패치, Xscale 패치 와 EMPOSⅡ 보드 패치를 각각 적용해야 한다.

4.3.1 커널 소스 구하기

리눅스 커널 소스는 http://www.kernel.org/pub/linux/kernel/v2.4/ 에서 linux-2.4.19.tar.gz를 받으면 된다.

4.3.2 ARM 패치 구하기

인터넷에서 받은 커널 소스를 EMPOSⅡ에서 사용하기 위해선 ARM 환경에 맞게 패치를 적용하여야 한다. 패치 파일은 EMPOSⅡ 보드와 같이 제공된 CD-ROM에서 포함되어 있 고. 인터넷을 통해 다운 받을 수 있는데 주소는 다음과 같다.

4.3.3 ARM 패치 적용

먼저 제공된 CD안에 커널 소스인 linux-2.4.19.tar.gz를 적당한 디렉토리에 압축을 해제하 고 patch-2.4.19-rmk4.gz를 복사하여 넣는다.

mount /dev/cdrom /mnt/cdrom mkdir /working/kernel

cp /mnt/cdrom/Source/kernel/SRC/linux-2.4.19.tar.gz /working/kernel cd /working/kernel

tar xvfz linux-2.4.19.tar.gz cd /mnt/cdrom/Source

cp patch-2.4.19-rmk4.gz /working/kernel/linux-2.4.19 해제된 커널 소스에 ARM 패치를 적용한다.

cd /working/kernel/linux-2.4.19 zcat patch-2.4.19-rmk4.gz | patch -p1

마지막 patch 옵션의 -p1는 패치 파일이 같은 디렉토리 경로에 존재할 때를 의미하며 한 단계 상위에 존재할 시에는 에는 p0을 입력한다.

패치가 이상 없이 적용이 되면 다음과 같은 메시지가 error없이 보여질 것이다 patching file CREDITS

patching file Documentation/Configure.help patching file Documentation/arm/Booting patching file Documentation/arm/ConfigVars patching file Documentation/arm/MEMC

patching file Documentation/arm/SA1100/SA1100_USB patching file Documentation/arm/SA1100/nanoEngine patching file Documentation/cpufreq

patching file Documentation/l3/structure patching file Documentation/serial/driver patching file MAINTAINERS

patching file Makefile

--- 이하

생략---4.3.4 Xscale 패치 구하기

Arm패치를 하는 동안에 arm 코어에 관련된 패치만 적용되고 xscale관련된 코어는 아직 패치가 되어 있지 않다. 그러므로 xscale cpu를 사용하기위해서는 다시 한번 더 xscale패 치를 해 주어야만 된다.

파일 패치는 ftp://ftp.arm.uk.linux.org/pub/linux/arm/people/nico/v2.4 에서 diff-2.4.19-rmk4-pxa2.gz를 받으면 된다.

4.3.5 Xscale 패치 적용

먼저 제공된 CD안에서 diff-2.4.19-rmk4-pxa2.gz을 위에 커널 패치 된 곳으로 복사하여 넣고 아래와 같이 패치를 적용하자.

cp /mnt/cdrom/Source/diff-2.4.19-rmk4-pxa2.gz /working/kernel/linux-2.4.19

cd /working/kernel/linux-2.4.19

zcat diff-2.4.19-rmk4-pxa2.gz | patch –p1

패치가 이상 없이 적용되면 다음과 같은 메시지가 나타난다.

patching file Documentation/Configure.help

patching file Documentation/arm/XScale/PXA/USB-client patching file Makefile

patching file arch/arm/Makefile patching file arch/arm/boot/Makefile

patching file arch/arm/boot/compressed/Makefile patching file arch/arm/boot/compressed/head-xscale.S patching file arch/arm/boot/compressed/head.S

patching file arch/arm/config.in

patching file arch/arm/def-configs/cerfboard_pxa patching file arch/arm/def-configs/cerfpda_pxa patching file arch/arm/def-configs/lubbock patching file arch/arm/def-configs/pxa_idp

--- 이하

생략---4.3.6 EMPOSⅡ 보드 패치 적용

제공된 CD에서 EMPOSⅡ에 대한 패치 파일을 ARM 패치가 이루어진 커널 소스가 있는 디렉토리에 복사 후 패치를 적용 시킨다.

mount /dev/cdrom /mnt/cdrom cd /mnt/cdrom/Source/

cp diff-2.4.19-rmk4-pxa2-empx1.gz /working/kernel/linux-2.4.19 cd /working/kernel/linux-2.4.19

zcat diff-2.4.19-rmk4-pxa2-empx1.gz | patch -p1 패치가 이상 없이 적용되면 다음과 같은 메시지가 나타난다.

patching file Makefile

patching file arch/arm/boot/compressed/head-xscale.S patching file arch/arm/config.in

patching file arch/arm/def-configs/empos patching file arch/arm/kernel/setup.c patching file arch/arm/mach-pxa/Makefile patching file arch/arm/mach-pxa/empos_x255.c patching file arch/arm/mach-pxa/irq.c

patching file arch/arm/mach-pxa/leds-empos_x255.c patching file arch/arm/mach-pxa/leds.c

patching file arch/arm/mach-pxa/leds.h patching file arch/arm/mach-pxa/lubbock.c patching file arch/arm/mach-pxa/usb_ctl.c patching file arch/arm/tools/mach-types

--- 이하

생략---4.3.7 커널 컴파일

필요한 패치가 모두 성공적으로 완료 되었으면 컴파일을 통한 커널 이미지를 생성하게 된 다. 보드 패치 에 EMPOSⅡ에 관한 모든 것이 적용되었으므로 소스 파일의 수정 없이. 다 음을 순서대로 컴파일을 실행하여 실질적인 kernel이미지를 생성 가능하다.

make empos_config

make oldconfig (make menuconfig) make dep

make clean (make distclean) make zImage

위 make 명령어 에 관한 내용은 다음과 같다.

z make empos_config

커널의 컴파일 환경을 EMPOSⅡ에 맞게 적용한다. 본 명령을 통해 컴파일 목록이 보드에 맞게 갱신이 되어 곧바로 컴파일 과정을 진행할 수 있게 한다.

z make oldconfig

make empos_config를 통해 구성된 메뉴를 소스에 적용 시키는 과정이다.

z make menuconfig

make oldconfig를 실행 하였을 경우 본 과정을 생략 가능하다. 본 명령을 통해 커널

arch/arm/boot 디렉토리에 zImage라는 이름으로 생성이 되며 zImage의 처음 부분에 압축을 해제하는 코드가 포함되어 있다.

컴파일이 성공적으로 수행되었다면 다음과 같은 메시지가 마지막에 출력된다.

arm-linux-objcopy -O binary -R .note -R .comment -S /working/kernel/linux-2.4.19/vmlinux piggy

gzip -9 < piggy > piggy.gz

arm-linux-ld -r -o piggy.o -b binary piggy.gz rm -f piggy piggy.gz

arm-linux-ld -p -X -T vmlinux.lds head.o misc.o head-xscale.o piggy.o /usr/cross-tools/lib/gcc-lib/arm-linux/2.95.3/libgcc.a -o vmlinux

make[2]: Leaving directory

`/working/kernel/linux-2.4.19/arch/arm/boot/compressed'

arm-linux-objcopy -O binary -R .note -R .comment -S compressed/vmlinux zImage

make[1]: Leaving directory `/working/kernel/linux-2.4.19/arch/arm/boot' [root@localhost linux-2.4.19]#

4.3.8 커널 포팅

컴파일을 통해 생성된 zImage를 타겟 보드에 포팅해보자

현재 EMPOSⅡ 보드에서는 부트로더를 통한 포팅만을 지원하고 있다.

아래와 같이 부트로더에서 tftp를 이용하여 커널을 타겟 보트에 전송한 후 flash 명령을 통해 RAM에 저장된 커널을 flash rom으로 복사한다.

EMPOS # tftp zImage kernel EMPOS # flash kernel

이것을 이용하기 위해서는 컴파일을 통해 생성된 zImage를 /tftpboot아래에 넣고 호스트 컴퓨터에서 tftp 서버를 구동 시켜야 된다.

문서에서 GettingStarted-with-HBE-EMPOSII (페이지 55-61)