커널 소스 클리어

이제 싸~~악… 소스를 클리어 하는 것이 제일 좋겠죠?

이제 반복적이죠?

기억 나시죠 ? 다음 명령들

 

 [root@localhost linux]# make mrproper
  [root@localhost linux]# make distclean


예..

이제 소스 쌱~~ 청소 되었습니다.

 

커널 컴파일 환경 설정 준비

자 이제 이전에 설정된 환경을 찾아 보죠..

어디서요?

linux/arch/arm/configs/

에서요..

 

일단 이곳에서 PXA255용을 찾아 봅시당.

오호…

 

pxa255-idp_defconfig 란 이놈이 가장 이름이 비슷하네요

 

밑져야 본전

이놈을 가지고 시작해 봅시다.

 

여기서 잠깐!

이전 강좌를 보지 않으신 분들이 가장 먼저 해야 하는 것은


Makefile을 약간 손보아야 합니다.

 

커널소스 linux\Makefiel 에서 193 라인 쯤에 가면

 

크로스 컴파일을 위한 처리 부분이 있습니다.

 

193 ARCH            ?= $(SUBARCH)
194 CROSS_COMPILE   ?=


이 부분을 arm 용 크로스 컴파일이 될 수 있도록 다음과 같이 고칩니다.

193 ARCH            ?= arm
194 CROSS_COMPILE   ?= arm-linux-


이 부분에 대한 약간(?)의 설명은 2410 부분의 강좌를 참조해 주세요

 

2410부터 따라한 분들은 이미 되어 있겠죠?
 

자 이제 커널 컴파일 옵션 적용을 해 봅시다.

 

make pxa255-idp_defconfig


 

pxa255-idp 컴파일 옵션 설정 상태로 만들어 버립니다.

 

[root@localhost linux]# make pxa255-idp_defconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/basic/docproc
  HOSTCC  scripts/basic/hash
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/kxgettext.o
  SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/lex.zconf.c
  SHIPPED scripts/kconfig/zconf.hash.c
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#
[root@localhost linux]#

 

시리얼 출력을 하기 위한 커널 소스 패치

이쯤 되면 시리얼 출력을 하기 위해서 다음 두 가지를 처리해야 한다는 것을 인식하시겠죠?

 

1) 시리얼 포트
2) 머신 아키텍쳐 번호

 

EZ-X5 의 콘솔용 시리얼 포트는 몇 번일까요?

 

이지부트 소스를 보면 알 수 있죠..
아니면 이지부트에서 전달하는 커널 커맨드 console= 에 어떤 포트가 지정되어 있는가를 보면 알 수 있죠..

console=ttyPXA2,115200

 

그런데 …

 

삼성 프로세서를 다루는 것과 달리 컴파일 환경 설정 메뉴에서 시리얼 포트 번호를 지정할 수 없습니다.

즉 소스를 패치 해야 한다는 겁니다.

 

의심스러우시면 S3C2440이나 S3C2410 에서 했던 것처럼 커널 컴파일 환경 설정 메뉴를 따라 가 보시기 바랍니다.

 

어찌되었든 수정할 소스는 여기 입니다.

arch/arm/mach-pxa/include/mach/uncompress.h

아주 심플하게 필요한 소스만 보여 주고 있죠?

 

소스상에서 보면

static volatile unsigned long *UART = FFUART;

에서 보면 알겠지만

 

UART0 으로 압축 해제 메시지를 처리 하고 있습니다.

 

그런데 저희는 UART2 로 해야죠? 이건 이름이 STUART 입니다.

 

그런데 소스상에 arch_decomp_setup 함수에 비슷하게 있는데 조건 문이 보이죠?

그래서 그냥 다음과 같이 수정해 버립니다.

 

static inline void arch_decomp_setup(void)
{
//      if (machine_is_littleton())
                UART = STUART;
}


시리얼 포트를 조정했으니


정상적으로 부팅이 진행되도록 머신 아키텍쳐 번호를 알아내야 합니다.

 

리눅스 소스에 있는 파일에서 찾아 봅시다.

linux/arch/arm/tools/mach-types

이중에 IDP 보드죠?

pxa_idp   ARCH_PXA_IDP    PXA_IDP    110

 머신 아키텍쳐 번호는 110 번 되겠네요

이 값을 나중에 이지부트에서 설정하면 됩니다.

커널 컴파일 및 tftp 복사

이제 커널 컴파일을 해야 겠죠?

[root@localhost linux]# make zImage

별 무리 없이 컴파일 될 겁니다.

한가지 흠이라면 약간의 시간이 걸리죠 ㅋㅋ

 

이제 생성된 zImage 를 tftp 디렉토리에 복사합니다.

[root@localhost linux]# cp arch/arm/boot/zImage /tftpboot/zImage.ez-x5


이지부트 머신 아키텍쳐 번호 수정

부트로더에서 set 명령을 이용하여 아키텍쳐 번호를 110으로 수정합니다.

 A013_020_ezboot_set_580.png

[A013_020_ezboot_set.png]

 

S 로 저장하고 Q 로 빠져 나옵니다.


 커널 다운 로드 와 부팅

tfk 명령을 통해서 커널 이미지를 다운 받습니다.

 A013_030_kernel_download_580.png
[A013_030_kernel_download.png]

rst명령을 사용하여 부팅합니다.


 

자 어떻게 될까요?

두근 두근…..


 A013_040_kernel_fail_580.png

[A013_040_kernel_fail.png]

 

흑흑흑..

도대체 한번에 넘어가는 적이 없군요…

 

이번엔 또 무슨 문제 일까요?