부트로더 버전 확인

자..

여러분에게 원래 EZ-S2440 을 하기로 하다가
커널 컨피규 보고서
바로 잔머리를 굴리는 저를 욕하지 마세용..

이제 드뎌 EZ-S2440 포팅 들어 갑니다.

이전에 EZ-S2410때 부트로더 확인 과정을 기억하시는지 모르지만
EZ-S2440 역시 부트로더를 한번 확인해 봅시다.

제 것은 이렇게 나왔습니다.

 A011_010_boot_loader_version_580.png
[A011_010_boot_loader_version.png]

다행스럽게도 V2.X 대 군요..

ㅎㅎ

자 이제 커널 포팅을 시작해 봅시다.
 

커널 소스 클리어

자 이전에 EZ-S2410 보드를 위한 커널을 만들었지 않았습니까?
그러므로 이제 싸~~악… 소스를 클리어 하는 것이 제일 좋겠죠?

어떻게 할까요?

어머?

벌써 잊으셨어요?

이전에 설명했는데..

하기사 한번만 보고 기억을 바로 바로 하시면 여러분은 천재죠…

자 ..

평범한 우리들은 외울 때까지 계속 반복해서 알려 주어야 합니다.

다음 두 과정의 명령을 쓰면 되죠…

 

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


예..

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

커널 컴파일 환경 설정 준비

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

오호…

그런데..

EZ-S2410 용은

s3c2410_defconfig 란 형태로
linux/arch/arm/configs/ 디렉토리에

있었잖아요?

그럼..

s3c2410_defconfig 란 것은 있을까요?

당근 없지요..

만약 있었다면 제가 EZ-S2410 으로 급선회를 했겠습니까?

 

그런데

혹시 아십니까?

S3C2410 하고 S3C2440은 거의 쌍둥이라는 것을

뭐 삼성내에 있는 반도체 연구소에 계신 분들이 어떤 생각이 있을지 모르지만
이 두 놈은 거의 쌍둥이 입니다. 내부 디바이스들이 거의 같습니다. 속도와 몇 가지 개선을 한 정도라고 보아도 무방할 정도 입니다.

그렇다면 S3C2410 의 커널 설정 환경을 그대로 사용할 수 있지 않겠습니까?
우리야 시리얼 처리만 하면 되는데 말이죠…

자 일단 시도해 봅시다.

당연히 커널 옵션 설정을 하도록 합니다.

 

여기서 잠깐

 

자신의 보드가 S3C2440 이라서 이전 강좌를 보지 않으신 분들을 위해서 다시 한번 알려 드리면

가장 먼저 해야 하는 것은


우선 Makefile을 약간 손보아야 합니다.
커널소스 linux\Makefiel 에서
193 라인 쯤에 가면

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

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


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

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


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

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

 

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

make s3c2410_defconfig

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

[root@localhost linux]# make s3c2410_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]#


 

시리얼 출력을 하기 위한 커널 컴파일 설정

이전에  EZ-S2410 보드에서 시리얼로 출력이 나오면서 커널 부팅이 되기 위해서 다음과 같은 두가지를 수행했습니다.

 

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


1) 번은 S3C2410 과 S3C2440은 거의 같은 구성을 갖고 커널 개발자가 동일하다는 점, 제조사 회사도 같다는 점에 때문에 2410이 했던 옵션을 그대로 사용할 수 있습니다.

즉 우리는 이 포트 번호를 0에서 2 로 바꾸어 주면 됩니다.

이 과정은 다음과 같은 순서로 진행하면 됩니다.

 

[root@localhost linux]# make menuconfig

을 실행합니다 .


 A011_020_kernel_option_system_type_580.png
[A011_020_kernel_option_system_type.png]

여기서 System Type(시스템 타입) 메뉴를 선택합니다.

 

 A011_021_kernel_option_low_port_580.png
[A011_021_kernel_option_low_port.png]

S3C UART to use for low-level messages 을 선택해서 2로 수정합니다.

 

A011_022_kernel_option_low_port_2_580.png
[A011_022_kernel_option_low_port_2.png]

 

이제 보드 타입을 검토해 보죠

이전에 S2410은 하지 않았죠?

하지만 실제로는 자동으로 선택되어 있어서 하지 않은 겁니다.
   S2440은 어떻게 설정되어 있는가를 확인해 봅시다.

다음을 따라 하면 확인 할 수 있습니다.

 A011_023_kernel_option_2440_machine_580.png
[A011_023_kernel_option_2440_machine.png]

S3C2440 Machines 라는 메뉴를 선택합니다.

 

A011_023_kernel_option_2440_machine_smdk_580.png  
[A011_023_kernel_option_2440_machine_smdk.png]

SMDK 라고 하는 머신 타입이 보입니다.
여기에 별표 보이죠?

예.. SMDK2440 이라는 보드를 선택한 부분입니다.

이게 가장 보편적이죠

EZ-S2410 보드 할 때 이 부분 역시 설정되어 있기 때문에 굳이 하지 않은 겁니다.

내부적으로는 다 선택되어 있습니다.
 

아 …

참고로…

이 항목에서 HELP를 선택해서 머신 아키텍쳐를 얻기 위한 환경 변수 명을 확인해야 합니다.

나중에 필요합니다.

 A011_023_kernel_option_2440_machine_smdk_help_580.png
[A011_023_kernel_option_2440_machine_smdk_help.png]

뭐라고 되어 있죠?

여러가지가 있지만 가장 첫 라인에 써 있는 CONFIG_ARCH_S3C2440  라는 값을 주목해야 합니다.

기억 합시다 !

 

CONFIG_ARCH_S3C2440

 

자 이제 커널이 부팅 되었을 때 로우 레벨 디버그 메시지를 표시 할 수 있도록 설정하는 부분을 알아 봅시다.

다음 순서대로 따라하면 됩니다.
 A011_031_kernel_config_1_580.png
[A011_031_kernel_config_1.png]
 A011_032_kernel_config_2_580.png
[A011_032_kernel_config_2.png]
 A011_033_kernel_config_3_580.png
[A011_033_kernel_config_3.png]
 A011_034_kernel_config_4_580.png
[A011_034_kernel_config_4.png]
 A011_035_kernel_config_5_580.png
[A011_035_kernel_config_5.png]


자 모든 설정이 끝났다면 저장합시다..

 A011_036_kernel_config_6_580.png

[A011_036_kernel_config_6.png]
 

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

2410에서는 웹 페이지를 이용했었죠?

http://www.arm.linux.org.uk/developer/machines/

 

여기서는

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

 

linux/arch/arm/tools/mach-types


이 파일에는 웹  페이지에 있는 것들이 다 들어 있습니다.

그런데 ..

앞에서 제가 기억하라고 한 것 있죠?

 

CONFIG_ARCH_S3C2440

 

여기서 CONFIG_ 만 뺴면 ARCH_S3C2440 만 남죠?

이 단어가 위 파일의 두번째 항목에서 찾다 보면 발견 할 수 있습니다.


s3c2440    ARCH_S3C2440   S3C2440  362

위 내용이 발견되면..

예…

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

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


 

커널 컴파일 및 tftp 복사

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

 

[root@localhost linux]# make zImage


 

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

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

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

 

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


 

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

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

 A011_040_ezboot_set_580.png

[A011_040_ezboot_set.png]

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

 

 커널 다운 로드 와 부팅

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

 A011_041_ezboot_download.png
[A011_041_ezboot_download.png]

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


 

자 어떻게 될까요?

두근 두근…..


 A011_042_kernel_boot_fail.png

[A011_042_kernel_boot_fail.png]


으아아아악~~~~

이럴 수가 또 배신 합니다.
EZ-S2410 과 다른 양상이죠?

 

여러분 같으면 이런 상황에 뭘 의심 하시겠습니까?