본문 바로가기
Embedded System/uboot

2440 개발보드용 u-boot porting guide

by lifeseed 2009. 5. 20.
1. u-boot Base Code 준비하기.
1) u-boot 다운로드 : http://lifeseed.tistory.com/1 를 참조
2) 사용버전 Tag : v2009.06-rc1
    다운 받은 코드 해당 Tag로 변환하기 : git checkout -b mybranch v2009.06-rc1

2. 개발보드용 BSP 파일 추가
- 편의상 개발보드 이름을 smdk2440으로 하였다. 물론 메리테크에서 판매하는 개발보드가 아니다.
1) board 파일 생성
 - board 관련 파일 추가
   : 가장 유사한 board 폴더를 카피하여 이름을 smdk2440으로 변경하자. board/samsung/smdk2410 을 이용하였다.
 - cpu header file 추가 및 SPEC 수정
   : include 폴더에 s3c24x0.h 파일에 2440 관련 레지스터 정보를 추가한 후,  incloude 폴더에 s3c2440.h 가 없다면, s3c2410.h를 카피한 후 SPEC 변경사항을 적용한다.
 - board 관련 config header를 추가하자.
   : 역시나 include/configs/smdk2410_config.h를 카피한 후 이름을 변경하였다.
 - Makefile에 보드 컴파일 관련 config 추가
   : smdk2410_config 를 참조하여 smdk2440_config를 추가한다. 보드 명칭만 smdk2410에서 smdk2440으로 변경하면 된다.

2) board config header 를 개발보드의 정보에 변경
 - CONFIG_XXXX define  명 및 기타 2410관련 사항을 2440으로 변경
 - UART Setting관련 정보 수정 : default로 Hardware 흐름제어로 되어있다. 흐름제어 없음으로 변경하기 위해여 "#undef CONFIG_HWFLOW" 를 선언
 - Flash 관련 정보 변경 : Flash 종류, Sector 개수, Phygical Address & Size, ENV Address 등

3) cpu start up code 및 pll 수정
 - cpu/arm920t/start.S 및 cpu/arm920t/s3c24x0/* 파일 수정.
  cf) CONFIG_S3C2440  define을 이용하여 코드 적용
 - board\samsung\smdk2440 에 있는 파일들 수정
  cf) flash.c 는 지금 당장 수정 할 필요가 없다. 3. 에서 수정하자.

4) CONFIG_S3C2410 및 CONFIG_SMDK2410 관련 코드를 참조하여 2440 관련 코드 추가
  - 소스코드에서 2410관련 define을 context search를 이용하여 검색한 후 해당 파일들에 대하여  2440관련 define 추가
  - 3)에서 추가한 사항을 제외한 나머지 코드들에 대하여 CONFIG_S3C2440 및 CONFIG_SMDK2440 define을 추가한다.

Serial Terminal에서 프롬프트를 볼 수 있다. 그러나 env 관련 파일을 저장및 읽기가 불가능하다.
왜?? 당근 flash driver가 틀려서 그렇지. 그럼 다음 작업은 flash driver 작업이다.


3. flash driver (NOR) 구현
- board/samsung/smdk2440 폴더에 있는 flash.c 파일을 해당 flash에 맞도록 수정하자.
   : INTE: 28F128J3을 사용한다.
- erase, write 만 구현 하면 된다. read야 어차피 direct access니 그냥 읽으면 되고, 추가적으로 chip id 확인 루틴을 추가하자.

env read/write 및 flash erase, write가 가능하다. (write 테스트는 아직... ㅡ,.ㅡ)
다음 작업은 Ethernet 을 살려서 tftp로 바이너리를 전송하는 기능을 추가한다.
-  2009-05-19

>> 지금 까지 작업 Patch하기..  

1) 첨부파일을 u-boot 폴더가 있는 곳에 저장한다.
2) u-boot 폴더로 들어간 후 "patch -p1 < ../diff1.patch" 명령을 실행.




4. ethernet 설정 하여 tftp로 코드 다운 받기
- CS8900이 사용되며, BANK 1에 연결되어 있다. 관련 설정만 하면 OK

1) lowlevel_init.S BANK 설정 변경
- #define B1_BWSCON  (DW16+WAIT)  인지 확인
- BANK1CON 설정 변경
#define B1_Tacs   0x0 
#define B1_Tcos   0x3 
#define B1_Tacc   0x7 
#define B1_Tcoh   0x0 -> 0x1 
#define B1_Tah     0x0 -> 0x3 
#define B1_Tacp   0x0 -> 0x3
#define B1_PMC   0x0

2) smdk2440.c 의 board_init에서 EINT 및 GPIO 관련 I/O port 설정 확인

3) smdk2440.h 에서 CS8900 base address 변경
#define CS8900_BASE  0x08000300     // NOR Boot 의 경우 BANK1 Address : 0x80000000, CS8900 BASE Address Offset : 0x300

이상의 동작으로 TFTP를 이용한 바이너리 전송이 가능하다.
- 2005.05.20

>> 지금 까지 작업 Patch하기..    

1) 첨부파일을 u-boot 폴더가 있는 곳에 저장한다.
2) u-boot 폴더로 들어간 후 "patch -p1 < ../diff2.patch" 명령을 실행.
3) 반듯이 순서대로 patch하여야 한다.







CF) 우분투에서 TFTP 서버 설정 하는 방법
1) TFTP 서버 설치
- sudo apt-get install xinetd tftp tftpd

2) 설치완료후 /etc/xinetd.d/tftp 파일 작성

service tftp
{
    disable=no
    user = root
    soket_type = dgram
    protocol = udp
    wait = yes
    server = /usr/sbin/in.tftpd
    server_args = -s /tftpboot
    per_source = 11
    cps = 100 2
    flags = IPv4
}


3) 파일 저장후 xinetd 서버 다시 시작
- sudo /etc/init.d/xinetd restart