Computer Science/Linux

리눅스 포팅순서

알 수 없는 사용자 2009. 2. 4. 21:45

1. Cross 컴파일 환경 설정

    - Cross Complier 압축 파일 구하기
        ex) arm-linux-tools.tar.bz2, arm-linux-gcc-3.4.1.tar.bz2

    - Cross Complier 설치
        i.   /usr/local 아래에 arm 디렉터리를 생성한다.
        ii.  arm-linux-tools.tar.bz2을 /usr/local/arm에 옮기고, 압축을 해제한다. ( tar xvfj arm-linux-tools.tar.bz2 )
        iii. /usr/local/arm/3.4.1/bin/arm-linux-gcc를 이용해 cross 컴파일 할 수 있다.

    - 환경 변수에 등록하기
        . export PATH=/usr/local/arm/3.4.1/bin:$PATH
        . .bash_profile 등의 파일에 PATH를 적어두고 환경적용한다.  이때 source명령을 사용할 수 있다.(ex. source ~/.bash_profile)
        . 환경 변수에 제대로 등록되었는지 확인하기 위해서 type명령어를 통해서 arm-linux-gcc가 어느 위치에 있는지 확인한다.
            ex) type arm-linux-gcc

2. Linux Kernel Source 컴파일
    - 커널 소스 압축 파일 구하기 (http://kernel.org 에서...)
        ex) linux-2.6.22.1.tar.bz2, linux-2.6.21.15.tar.gz

    - 작업할 디렉토리(데스크탑 리눅스를 위한 kernel이라면 /usr/src)에 옮기고, 압축을 해제한다. (tar xvfz linux-2.6.22.1.tar.bz)

    - 커널 컴파일시 다음 절차를 따른다.
        . make menuconfig (config, xconfig 등도 가능, [make_menuconfig_tip.txt] 설명 파일을 참조.)
        . make dep : 커널 소스의 의존성을 체크해 목록을 만든다.
        . make clean : 이전에 생성된 object 파일과 이미지 파일 등을 지운다.
        . make zImage : 커널 이미지(zImage)를 만든다.
   
    - arch/arm/boot/ 밑에 zImage가 생성된다.

3. 필요에 따라 zImage를 uImage로 변경
    - [u-boot에 맞게 zImage를 uImage로 변경하기.txt] 파일 참조.

4. Ramdisk 사용하기
    41. Ramdisk Image 압축 풀기
        - mkdir ramdisk_dir
        - gzip -d ramdisk.gz
        - mount -t ext2 -o loop ramdisk ramdisk_dir

    4.2. Ramdisk Image 압축하기
        - umount ramdisk_dir
        - gzip ramdisk

5. Board에 U-BOOT이 올라와 있지 않을 경우 BootLoader (U-Boot) compile
    - U-Boot
        BootLoader 컴파일은 Boot flash memory 종류에 따라 다르다.

    - Nor flash 부팅으로 컴파일 하기.
        1. make distclean
        2. make rebis_atm322a_config
        3. make

6. Trace32-ICD를 이용한 Flash writing
    - [메뉴]->[File]->[Open Batchfile]->rebis_flash_atmel.cmm
    - rebis_flash_atmel.cmm은 REBIS Board NOR Flash에 실행코드(bin)를 writing 할 때 사용.
    - rebis_flash_atmel.cmm을 [Do]하여 'u-boot.bin'을 NOR Flash에 Writing.

7. 정상적으로 실행되는가 확인
    - RS-232C 케이블을 연결한 후 T32 JTAG포트를 제거하고 터미널 프로그램을 띄우고 Target전원을 켠다.
        . Target의 UART가 여러개 일때는 각각 연결해 보고 맞는 실제 연결된 UART를 찾아야 한다. (REBIS의 경우는 UART0에 연결해야 한다.)
        . Terminal Program은 Window에서는 [Tera term], Linux에서는 [minicom]을 추천한다.
        . 참고로 minicom을 실행중 도움말이 보고 싶으면 CTRL-A 후에 Z 를 누르면 된다.

    - 터미널 프로그램에서 'u-boot.bin'의 동작을 확인한다.

8. Ethernet을 이용한 linux실행 이미지 다운로드
    8.1. 부트로더 쉘로 들어가기
        - Ethernet 크로스 케이블을 연결한다.
        - u-boot가 부팅 중 카운트가 종료되기 전에 Enter를 입력하여 prompt 상태가 되도록 한다.

    8.2. uboot의 환경 설정
        - print혹은 printenv 명령으로 현재 설정 값을 살펴본다.
        - set ipaddr 192.168.0.1 : TARGET 보드의 IP 설정
        - set serverip 192.168.0.2 : HOST PC의 IP 설정
        - save : 환경 저장

    8.3. Host PC의 TFTP설정
        - Windows에서는 pumpKIN사용
        - pmumpKIN 설정 값
            . D:\tftproot
            . Give all files
            . Always prompt before acception file

    8.4. linux 이미지 파일 다운로드 하기
        - 미리설정한 D:\tftproot 디렉토리에 만들어 놓은 이미지를 넣어둔다. (zImage, ramdisk)

    8.5. LAN케이블 연결을 확인 후 이미지 다운로드
        - Kernel Image : zImage
        - RamDisk Image : ramdisk
        - REBIS 보드 SDRAM 각각 0x32000000, 0x30800000번지에 다운로드
            . t 32000000 zImage
            . t 30800000 ramdisk

    8.6. 확인 후 실행하기
        - go 명령으로 리눅스를 부팅하도록 한다.
        - go 32000000

    참고 1: 위의 8.4. 8.5과정 빨리하기.
        - ';'를 활용한다. 즉, 다음과 같이 한줄에 다 명령어를 써놓고
        - t 32000000 zImage; t 30800000 ramdisk; go 32000000
        - Copy & Paste한다.

    참고 2: NAND Flash하기
        - nandw 0 0xea000 0x32000000
        - nandw 100 0x2fa000 0x30800000
        - set bootcmd nandr 0 ea000 32000000; nandr 100 2fa000 30800000; go 32000000 ; bootcmd 설정 

[출처] 리눅스 포팅순서|작성자 하니발