ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PXA255-Tiny 리눅스 포팅
    Embedded 2010. 5. 23. 08:47

    PXA255-Tiny 리눅스 포팅





    1. 장비설정

    PXA255-Tiny 장비를 사용하려면 독립적으로도 운용 가능하지만 이것은 개발 마지막 단계에서 사용하는 방법이다. 개발 초기에는 이더넷과 시리얼 케이블을 연결하여 장비의 상태를 시리얼통신으로 모니터링 하거나 이더넷을 통해서 리눅스 커널이나 파일 시스템을 장비에 다운로드 받을 수가 있다. 또한 이런 통신 포트를 이용하여 원격으로 데이터를 전송하거나 장비를 컨트롤할 수 있다.


    초기 장비 연결 방법은 PXA255-Tiny장비의 ETH0통신 포트에 이더넷 케이블을 그리고 FFUART에 시리얼 케이블을 PC와 연결한다.

     

     



    2. 호스트PC minicom 환경설정

    장비와 PC를 시리얼, 이더넷 케이블로 연결 하였으면 PC에 환경설정을 잡아주어야 한다.

    리눅스에서는 minicom이라는 프로그램을 이용하는데 minicom은 장비에서 보여주는 메시지를 시리얼 콘솔로 보여주는 프로그램 이다. 쉽게 말해서 윈도우즈 환경에서 하이퍼 터미널을 이야기한다.


    minicom을 사용하기 위해서는 시리얼에 연결된 장비의 특성에 맞게 전송속도 등을 설정해 주어야 한다.

    터미널에서 “minicom -s"를 입력 후 Enter를 치면 아래와 같은 미니컴 창이 열린다.

    옵션 ‘-s'는 Program Setup 모드로 들어가는 명령이다. 

    [root@localhost ~]# minicom -s

     

    +-----[configuration]------+

    | Filenames and paths         | 

    | File transfer protocols        |

    Serial port setup              |

    | Modem and dialing            |

    | Screen and keyboard        |

    | Save setup as dfl               |

    | Save setup as..                 |

    | Exit                                    |

    | Exit from Minicom              |

    +------------------------+

     

     

    그림과 같이 "Serial port setup"을 선택하면 다음과 같은 창이 열린다.


    Serial port 환경설정 창인데 여기에서 Serial Device와 Bps/Par/Bits,그리고 Hardware Flow Control을 위 그림과 같이 설정해야 한다. 이것은 장비와 장비의 전송규약을 맞추어주는 것이다. 만일 다르게 설정되면 장비와 호스트PC간의 통신이 이루어 지지 않을 것이다.

    *ttyS0는 윈도우에서 말하는 COM1포트와 같다.

     

    하드웨어흐름제어가 YES일 경우에 장비의 메시지는 PC의 콘솔 창으로 볼 수 있으나, 호스트 PC의 키보드로 입력은 되지 않

    다. 

     

    아래와 같이 설정한다.


     

    +--------------------------------------------------------+

    | A - Serial Device          : /dev/ttyS0                                           |

    | B - Lockfile Location      : /var/lock                                        |

    | C - Callin Program         :                                                          |

    | D - Callout Program       :                                                         |

    | E - Bps/Par/Bits           : 115200 8N1                                        |

    | F - Hardware Flow Control : No                                                 |

    | G - Software Flow Control : No                                                  |

    |                                                                                                  |

    |    Change which setting?                                                          |

    +--------------------------------------------------------+

    | Screen and keyboard           |

    | Save setup as dfl                  |

    | Save setup as..                    |

    | Exit                                       |

    | Exit from Minicom                 |

    +--------------------------+



     

    +-----[configuration]------+

    | Filenames and paths         |

    | File transfer protocols        |

    Serial port setup               |

    | Modem and dialing            |

    | Screen and keyboard        |

    Save setup as dfl              |

    | Save setup as..                 |

    | Exit                                    |

    | Exit from Minicom              |

    +------------------------+


     

    설정이 끝났으면 메인메뉴의 "Save setup as dfl" 을 선택하여 저장하고 "Exit"를 선택하여 종료한다. 그러면 다시 프롬프트 상태로 돌아갈 것이다.


    지금까지 장비와 PC를 연결하고 minicom설정을 마쳤다. 그럼 장비와 통신이 제대로 되는지 확인해보도록 하자.

    포롬프트에서 "minicom"을 입력후에 "Enter"를 치면 시리얼 콘솔모드로 minicom창이 보여질 것이다.

     

    [root@localhost /root]# minicom

     

    Welcome to minicom 2.1

     

    OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n

    Compiled on Feb 12 2006, 02:33:34.

     

    Press CTRL-A Z for help on special keys

     

    여기 까지가 미니컴이 실행되면 보여주는 메시지 이다.

     

    minicom을 실행후에 PXA255-Tiny 장비의 전원을 인가하면

    아래와 같이 장비에서 보내주는 메시지가 나타난다.

     

    U-Boot 1.0.0 (Dec 17 2005 - 10:59:37)


    U-Boot code: A7000000 -> A70179AC  BSS: -> A704B634

    SDRAM Configuration:

    Bank #0: a0000000 64 MB

    Bank #1: a4000000 64 MB

    Flash: 32 MB

    GPIO Test(LED(D16) : ON/OFF)-Debugging LED

    GPIO_4 - LED ON

    setenv....serial

    Hit any key to stop autoboot:  0

    SuDo21> 

    지금 출력되는 메시지는 PXA255-Tiny 보드의 상태를 보여주는 것이며 "Hit any key to stop autoboot" 메시지가 나올 때 아무키나 누르면 위 그림과 같이 트로더 프롬프트로 빠지게 되고 키보드 입력이 없으면 장비에 올려 진 리눅스가 부팅된다.


    여기까지 정상적으로 출력이되면 장비와 PC간의 통신 연결이 잘 되고 있다는 것이다.

     

     



    3. 크로스컴파일러 설치

    리눅스환경의 호스트PC에서는 x86계열의 컴파일러로 작업을 할 것이다. 그렇기 때문에 실행파일 또한 x86기반에서만 실행이 될 것이다. 이것이 실제적으로 동작 할 타겟 보드인 XScale기반의 환경에서는 당연히 동작하지 않는다.

    타겟 보드에서 동작할 수 있도록 실행파일을 생성해내기 위해서는 호스트 컴퓨터에 XScale을 위한 컴파일러를 설치하여 이를 이용하여 커널 및 기타 프로그램을 컴파일 하여야 하며, 이러한 컴파일러를 크로스컴파일러라 한다. 즉, 지금 사용하는 PC의 CPU로 다른 종류의 CPU에 맞는 이미지를 생성해주는 컴파일러 이다.


    크로스컴파일러를 다운받은 후에 압축을 풀면 arm-linux라는 폴더가 생성되는데 arm-linux디렉토리를 “/usr/local/"하부에 복사를 한다. 이것은 Toolchain을 생성할 때 ”/usr/local/arm-linux"에 지정하여 설치 했기 때문이다.

     

    [root@localhost /opt]# ls

    arm-linux

    [root@localhost /opt]# cp -a arm-linux /usr/local/


    /usr/local/arm-linux/bin 디렉토리를 보면 툴체인의 실행파일 들이 있다. 그리고

    /usr/local/arm-linux/lib에는 동적 라이브러리 파일들이 있는것을 확인 할 수 있다.


    우리는 실행 명령어 들이 들어있는 “bin"디렉토리를 Path를 걸어 주어 어느 위치에서든 실행 가능하도록 환경을 설정할 것이다. Bash Shell의 한 부분에 작업을 해주면 되는데 보통

    “/root/.bashrc"파일이나 ”/root/.bash-profile"에서 환경 설정을 주로 해준다. 두 파일 중 어느 곳이든 차이는 없지만 필자는 “/root/.bashrc"파일에 작업을 하도록 하겠다.

     

    [root@localhost /opt]# vi ~/.bashrc

    # .bashrc

     

    # User specific aliases and functions

     

    alias rm='rm -f'

    alias cp='cp -i'

    alias mv='mv -i' alias rmd='rm -fR'

     
    # Source global definitions
    if [ -f /etc/bashrc ]; then
    . /etc/bashrc
    fi

    export PATH=$PATH:/usr/local/arm-linux/bin

     
    위 그림처럼 파일의 제일 끝 라인에 “export PATH=$PATH:/usr/local/arm-linux/bin” 추가시켜준다.
    여기서 .bashrc 파일에서 ‘.’이 붙은것은 숨긴파일을 의미한다. 그래서 “ls” 명령으로는 확인이 안되고 “ls -a” 명령으로 숨김 파일을 볼 수 있다. 그리고 ‘~’기호는 현재로그인한 계정의 홈 디렉토리를 의미한다.
     
    root로 로그인 했을 경우 “vi /root/.bashrc 혹은 vi ~/.bashrc" 명령은 "root"에 위치한
    ".bashrc"파일을 vi 에디터로 Open 하는 명령이다.

    Tip!! Shell 이란??
    운영 체제(OS)를 사용자와 접촉하는 'shell'과 실제 하부 루틴의 집합인 'kernel'로 분할하여 구성하는 경우, 이용자와 시스템 간의 대화를 가능하게 해 주며, 이용자가 입력한 문장을 읽어 그 문장이 요청하는 시스템 기능을 수행하도록 해 주는 명령 해석기이다.

     
    우리는 기본적으로 bashShell을 사용한다.
     
    .bashrc의 환경설정이 끝나면 BashShell 파일을 다시 실행해야 한다. 꼭 다시 실행 해주어야 많이 경로 설정한 곳이 Path가 연결되어 Toolchain 유틸리티들을 어느 위치에서든 사용 할 수가 있다.
     
    [root@localhost /opt/]# source ~/.bashrc 
    터미널을 실행시키는 순간 BashShell이 동작하고 프롬프트를 뛰워준다.
    그렇기 때문에 현재 여러 터미널이 실행 중이면 source 명령으로 BashShell을 다시 실행 시켜준다.
     
    여기까지의 작업을 마쳤으면 어느 위치에서든 "arm-linux-gcc" 명령으로 .c파일을 XScale계열에 맞게 컴파일 할수 있게 된다.
     
    [root@localhost /opt/]ls
    hello.c
    [root@localhost /opt/]arm-linux-gcc -o hello hello.c
    [root@localhost /opt/]ls
    hello hello.c
    [root@localhost /opt/]./hello //실행되지 않는다.
     
    위에서 “hello.c” 라는 소스파일을 XScale용으로 컴파일을 하였다. 컴파일을 한 후 실행을 하면
    실행이 되지 않는다. 왜냐하면 XScale용으로 컴파일 되었기 때문에 호스트PC x86기반에서는 실행되지 않는다. 하지만 이 파일을 장비에서 실행하면 실행이 될 것이다.

     
     
     
    4. JTAG(Joint Test Access Group)
    플래쉬 메모리에 데이터를 전송할 때 사용된다. 프린트포트를 JTAG장비와 연결하여 플래시메모리에 데이터를 쓰게 되는데 JTAG명령을 수행 하려면 JTAG프로그램을 설치 하여야한다.
    사이트에서 'JTAG소스파일'과 'include헤더파일'을 받아서 특정 디렉토리에 복사를 해두고 아래와 같이 진행을 하면 된다.

     
    [root@localhost /opt/pxa-jtag]# ls
    include-0.3.2.tar.gz  jtag-0.5.1.tar.gz
    [root@localhost /opt/pxa-jtag]# tar -xzvf jtag-0.5.1.tar.gz
    jtag-0.5.1/libbrux/.deps/intel.Po
    jtag-0.5.1/libbrux/.deps/jedec.Po
    jtag-0.5.1/libbrux/.deps/quit.Po
    jtag-0.5.1/doc/
    jtag-0.5.1/doc/ChangeLog
    ...
    [root@localhost /opt/pxa-jtag]# tar -xzvf include-0.3.2.tar.gz
    include-0.3.2/
    include-0.3.2/arm/
    include-0.3.2/arm/pxa2x0/
    include-0.3.2/arm/pxa2x0/ac97.h
    include-0.3.2/arm/pxa2x0/cm.h
    ...
    [root@localhost /opt/pxa-jtag]# ls
    include-0.3.2  include-0.3.2.tar.gz  jtag-0.5.1  jtag-0.5.1.tar.gz
    [root@localhost /opt/pxa-jtag]# cd jtag-0.5.1
    [root@localhost /opt/pxa-jtag/jtag-0.5.1]# ls
    ABOUT-NLS  Makefile        README        config.h       configure.ac  po
    AUTHORS    Makefile.am     THANKS        config.h.in    data          src
    COPYING    Makefile.in     TODO          config.log     doc           stamp-h1
    ChangeLog  Makefile.rules  acinclude.m4  config.status  include       sysdep.h
    INSTALL    NEWS            aclocal.m4    configure      libbrux       tools
    [root@localhost /opt/pxa-jtag/jtag-0.5.1]# ./configure --prefix=/opt/pxa-jtag/jtag --with-include=/opt/pxa
    jtag/include-0.3.2
    checking for a BSD-compatible install... /usr/bin/install -c
    checking whether build environment is sane... yes
    checking for gawk... gawk
    checking whether make sets $(MAKE)... yes
    ...
     
     
    압축을 풀었으면 jtag-0.5.1디렉토리로 이동하여 Configure를 실행하여 컴파일 환경을 설정해 주어야한다. Configure 옵션 중 prefix는  “make install" 명령을 실행하면 컴파일 되어 생성된 이미지를 저장하는 공간이며, with-include는 헤더파일이 들어있는 include-0.3.2 디렉토리를 지정해 준다.
     
    [root@localhost /opt/pxa-jtag/jtag-0.5.1]# make
    ...
    [root@localhost /opt/pxa-jtag/jtag-0.5.1]# make install
    ...

    Configure명령으로 컴파일 환경을 설정 하였으면 make를 실행하여 컴파일을 한다.
    컴파일이 정상적으로 종료가 되면 "make install" 명령으로 해당 디렉토리에 컴파일되어 생성된 이미지 들을 이미 prefix 옵션으로 설정한 /opt/pxa-jtag/jtag 디렉토리에 복사한다.
     
    [root@localhost /opt/pxa-jtag/jtag-0.5.1]# cd ..
    [root@localhost /opt/pxa-jtag]# ls
    include-0.3.2  include-0.3.2.tar.gz  jtag  jtag-0.5.1  jtag-0.5.1.tar.gz
    [root@localhost /opt/pxa-jtag]# cd jtag
    [root@localhost /opt/pxa-jtag/jtag]# ls
    bin  share
    [root@localhost /opt/pxa-jtag/jtag]# cd bin/
    [root@localhost /opt/pxa-jtag/jtag/bin]# ls
    bsdl2jtag  jtag
     
    make 와 make install 을 수행하면 위와 같이 “/opt/pxa-jtag/jtag” 디렉토리에 bin과 share라는 디렉토리가 생성되며 bin디렉토리에 우리가 사용할 JTAG프로그램이 들어있는 것을 확인 할 수 있다.
    이 JTAG명령을 어느 위치에서든 실행하기 위해서는 ToolChain 설치 시에 했었던 “.bashrc”에 Path를 걸어주고 BashShell을 다시 실행 해주어야 한다.

    [root@localhost /opt/pxa-jtag/jtag/bin]# vi ~/.bashrc
    ...
    export PATH=$PATH:/usr/local/arm-linux/bin:/opt/pxa-jtag/jtag/bin
     
    //Toolcahin을 설치했을때 PATH명령을 한번 사용하였기 때문에 “:”만 붙이고 뒤에 붙여서 작성 하면 된다.

    [root@localhost /opt/pxa-jtag/jtag/bin]# source ~/.bashrc

     
     
     
    5. 부트로더 퓨징
    부트로더란 시스템의 전원을 ON하는 순간 하드웨어에서 가장 먼저 실행되는 프로그램이며 Host PC의 CMOS와 유사하다고 볼수 있다.
    부트로더가 하는 역할은 커널이 부팅 할때 하드웨어의 정보를 제공한다. 즉 프로세서의 동작 속도와 메모리 정보, 그리고 프로세서 레지스터 값들과 기본하드웨어 초기화 작업을 수행한다.
    부트로더의 종류는 u-boot, arm-boot, blob 등 여러 가지가 있지만 우리는 u-boot를 사용한다.
     
    앞서 설명했듯이 부트로더는 하드웨어 초기 설계의도 대로 동작하는지 검증하는 과정이기도 하지만 궁극적인 목적은 리눅스 커널을 올리는데 있다. 이러한 커널을 올리기 위해서는 기본적으로 시리얼이나 이더넷은 꼭 살려야 한다. 그 나머지 디바이스 들은 리눅스를 올린 후에 작업을 해도 무관하다. 시리얼을 살리는 가장 큰 이유는 시리얼 콘솔 작업을 하기 위해서이고 이더넷은 덩치가 큰 리눅스 커널이미지와 파일시스템을 이더넷을 통해 SDRAM에 다운받아 플래쉬 메모리에 저장하기 위해서이다.
     
    참고. 부트로더는 부트로더 소스를 다운받아서 수정을 한다음 컴파일을 하면 부트로더 이미지파일이 생성이 되는데 소스에서 수정해 주어야 할 사항들이 있다. 간단하게 특정 Processor에 OS 혹은 어떤 프로그램을 돌릴 수 있도록 Processor가 동작하는데 필요한 아키텍쳐넘버, flash, SDRAM, UART, Ethernet, 장비IP, GPIO, CPU속도 등의 셋팅을 통해 기본적인 디바이스들을 동작할 수 있게 만드는 프로그램이다.
     
    JTAG를 이용해서 부트로더 이미지를 퓨징하는 방법은 우선 “/tftpboot” 디렉토리에 “u-boot.bin” 이라는 U-BOOT 이미지를 복사해두고 이미지가 있는 디렉토리 경로에서 JTAG를 실행한다.
     
    [root@localhost /opt/pxa-jtag/jtag/bin]# cd /tftpboot/
    [root@localhost /tftpboot]# ls
    u-boot.bin
    [root@localhost /tftpboot]# jtag
    JTAG Tools 0.5.1
    Copyright (C) 2002, 2003 ETC s.r.o.
    JTAG Tools is free software, covered by the GNU General Public License, and you are
    welcome to change it and/or distribute copies of it under certain conditions.
    There is absolutely no warranty for JTAG Tools.
     
    Warning: JTAG Tools may damage your hardware! Type "quit" to exit!
     
    Type "help" for help.
     
    jtag> flashmem 0 u-boot.bin
    ....
    addr:0x00017A0C
    Done.
    jtag>quit
     
    JTAG프로그램을 실행하였으면 부트로더를 퓨징하기위해서 퓨징 명령어를 입력해야한다.
    퓨징명령어는 "flashmem [--플래쉬메모리번지--] [--이미지파일이름--]“형식으로 명령어를 입력해주면된다.
    퓨징이 완료되면 quit명령으로 jtag 프로그램을 종료하고 minicom을 실행시킨다.
    minicom을 실행후 장비에 전원을 인가하면 아래와 같은 메시지를 출력한다.
    아래처럼 정상적으로 출력되면 부트로더가 제대로 퓨징되어서 부트로더가 퓨징 된것이다.
     
    [root@localhost /root]# minicom
    LANG/ja
    LANG/ko

     
    Welcome to minicom 2.1
     
    OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n
    Compiled on Feb 12 2006, 02:33:34.

    Press CTRL-A Z for help on special keys
     

     

    U-Boot 1.0.0 (Dec 17 2005 - 10:59:37)

    U-Boot code: A7000000 -> A70179AC  BSS: -> A704B634
    SDRAM Configuration:
    Bank #0: a0000000 64 MB
    Bank #1: a4000000 64 MB
    Flash: 32 MB
    GPIO Test(LED(D16) : ON/OFF)-Debugging LED
    GPIO_4 - LED ON
    setenv....serial
    Hit any key to stop autoboot:  0
    SuDo21>
     
     
     
     
    6. TFTP 설치/실행하기

    TFTP란 이더넷을 이용하여 파일을 다운 받는 프로토콜이며 동작되는 방식은 클라이언트가 서버에 접속하여 파일을 요청하면, 해당 파일을 서버는 전송하고 클라이언트는 응답하는 방식을 취한다.

    파일의 전송 시에는 고정된 크기의 블록단위로 전송하고 이 크기보다 작으면 마지막 블록으로 인식한다.

    단점은 패킷 손실이 많은 환경에서 사용하기에는 곤란하다. 그러나 간단한 파일 전송이나 개발 환경에서는 많이 사용되고 있다.


    tftp 설치확인

    [root@localhost root]# rpm -qa | grep tftp

    tftp-0.32-4

    tftp-server-0.32-4


    설치(설치가 안되어 있을때) : RPM 패키지 설치

    [root@localhost root]# rpm -ivh tftp-server-0.32-4.i386.rpm

    warning: tftp-server-0.32-4.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e

    Preparing...                ########################################### [100%]

    1:tftp-server               ########################################### [100%]


    /etc/xinetd.d/tftp파일 설정

    [root@localhost root]# vi /etc/xinetd.d/tftp


    service tftp

    {

         disable = no

         socket_type             = dgram

         protocol                = udp

         wait                    = yes

         user                    = root

         server                  = /usr/sbin/in.tftpd

         server_args             = -s /tftpboot  // 이미지(커널,램디스크..등)가 들어갈 루트폴더

         disable                 = no  // yes --> no 로 변경하여  tftp를 활성화 한다.

         per_source              = 11

         cps                     = 100 2

         flags                   = IPv4

    }


    xinetd 재시작 / 데몬 확인

    [root@localhost xinetd.d]# service xinetd restart 혹은 /etc/init.d/xinetd restart

    Stopping xinetd:                                          [  OK  ]

    Starting xinetd:                                          [  OK  ]

    [root@localhost /root]# netstat -a | grep tftp

    udp        0      0 *:tftp                      *:*

    [root@localhost /root]#


    tftp 서비스를 위한 디렉토리

    [root@localhost xinetd.d]# cd /tftpboot/

    [root@localhost tftpboot]# ls

    ramadisk.u-boot      zImage.ram      // 이미지(커널,램디스크)를  /tftpboot 폴더에 넣어두자. 

     

     

     

     

    7. IP 설정하기

            


    IP 설정상태 확인하기

    [root@localhost /root]# ifconfig

    lo      Link encap:Local Loopback 

            inet addr:127.0.0.1  Mask:255.0.0.0 

            inet6 addr: ::1/128 Scope:Host 

            UP LOOPBACK RUNNING  MTU:16436  Metric:1 

            RX packets:3048 errors:0 dropped:0 overruns:0 frame:0 

            TX packets:3048 errors:0 dropped:0 overruns:0 carrier:0 

            collisions:0 txqueuelen:0 

            RX bytes:8711545 (8.3 MiB)  TX bytes:8711545 (8.3 MiB)


     

    eth0 IP 할당하기

    [root@localhost /root]# ifconfig eth0 192.168.1.196 up    //장비의 부트로더에 설정된 호스트 IP로 설정한다. 

    [root@localhost /root]# ifconfig

    eth0    Link encap:Ethernet  HWaddr 00:E0:91:0C:24:62 

            inet addr:192.168.1.196  Bcast:192.168.1.255  Mask:255.255.255.0 

            UP BROADCAST MULTICAST  MTU:1500  Metric:1 

            RX packets:0 errors:0 dropped:0 overruns:0 frame:0 

            TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 

            collisions:0 txqueuelen:1000 

            RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b) 

            Interrupt:18


     

    lo      Link encap:Local Loopback 

            inet addr:127.0.0.1  Mask:255.0.0.0 

            inet6 addr: ::1/128 Scope:Host 

            UP LOOPBACK RUNNING  MTU:16436  Metric:1 

            RX packets:3048 errors:0 dropped:0 overruns:0 frame:0 

            TX packets:3048 errors:0 dropped:0 overruns:0 carrier:0 

            collisions:0 txqueuelen:0 

            RX bytes:8711545 (8.3 MiB)  TX bytes:8711545 (8.3 MiB)

            

     

     


    8. 커널/램디스크 이미지 퓨징

    커널이란 운영체제에서 가장 핵심적인 역할인 자원(메모리, 프로세서 등)을 관리하며 시스템이 원활히 돌아갈 수 있도록 제어해준다. 현재 우리가 리눅스라고 하는 것도 실제적으로 리눅스란 운영체제의 커널 이름을 말하는 것인데 이것인 확장된 의미로 사용되어 현재의 리눅스란 OS를 칭하게 된 것이다. 그러므로 Linux=kernel이란 등식이 성립한다.


    Bootloader 프롬프트 뛰우기

    [root@localhost /root]# minicom

    LANG/ja

    LANG/ko

     

    Welcome to minicom 2.1


    OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n

    Compiled on Feb 12 2006, 02:33:34.

     

    Press CTRL-A Z for help on special keys

     

     

    U-Boot 1.0.0 (Dec 17 2005 - 10:59:37)


    U-Boot code: A7000000 -> A70179AC  BSS: -> A704B634

    SDRAM Configuration:

    Bank #0: a0000000 64 MB

    Bank #1: a4000000 64 MB

    Flash: 32 MB

    GPIO Test(LED(D16) : ON/OFF)-Debugging LED

    GPIO_4 - LED ON

    setenv....serial

    Hit any key to stop autoboot:  0     // 5초간 대기 아무키나 누르면 부트로더 프롬프트로...

    SuDo21>


     

    커널 이미지 퓨징

    SuDo21> tftpboot a2000000 zImage.ram //tftpboot [--SDRAM번지--] [--이미지파일이름--]

    TFTP from server 192.168.1.196; our IP address is 192.168.1.211   //서버와 장비 IP어드레스

    Filename 'zImage.ram'.

    Load address: 0xa2000000

    Loading: #####################################################

    ###########################################################

    ##########################################################

    done

    Bytes transferred = 961092 (eaa44 hex)  // 커널 이미지의 크기를 HEX값으로 보여준다.


     

    Tip!!  SDRAM에 올린 이미지를 FLASH에 퓨징 하는 법 

            - cp.b a2000000 80000 eaa44  

          cp.b [--이미지가 있는 SDRAM번지--] [--퓨징 될 FLASH의 번지--] [--이미지 크기(HEX값)--]


    램디스크 이미지 퓨징

    SuDo21> tftpboot a3000000 ramdisk.u-boot

    TFTP from server 192.168.1.196; our IP address is 192.168.1.211

    Filename 'ramdisk.u-boot'.

    Load address: 0xa3000000

    Loading: ####################################################

    ####################################################################################################################

    ##########################################################

    ############################################

    done

    Bytes transferred = 5938048 (5a9b80 hex)


     

    장비부팅

    SuDo21> bootm a2000000 a3000000 //bootm [--커널이미지주소--] [--램디스크이미지주소--]

    ## Booting image at a2000000 ...

    Image Name:   PXA255-TINY Kernel

    Image Type:   ARM Linux Kernel Image (gzip compressed)

    Data Size:    961028 Bytes = 938.5 kB   //커널 사이즈

    Load Address: a0008000

    Entry Point:  a0008000

    Verifying Checksum ... OK   //커널이미지 체크

    Uncompressing Kernel Image ... OK  //커널이미지 압축 해제

    ## Loading Ramdisk Image at a3000000 ...

    Image Name:   PXA255 Board(ramdisk)

    Image Type:   ARM Linux RAMDisk Image (gzip compressed)

    Data Size:    5937984 Bytes =  5.7 MB  //램디스크 사이즈

    Load Address: a0700000

    Entry Point:  a0700000

    Verifying Checksum ... OK //램디스크 체크 

    Starting kernel .......^^   //커널 부팅 시작

     

    Uncompressing Linux.............................................................

    Linux version 2.4.19-rmk4-pxa2 (root@localhost.localdomain) (gcc version 3.2.1)TCPU: Intel            

    XScale-PXA255 revision 6

    Machine: Intel PXA255-TINY Development Platform

    Ignoring unrecognised tag 0x00000000

    Memory clock: 99.53MHz (*27)

    Run Mode clock: 199.07MHz (*2)

    Turbo Mode clock: 398.13MHz (*2.0, inactive)

    Security risk: creating user accessible mapping for 0x0c000000 at 0xf2000000

    Security risk: creating user accessible mapping for 0x10000000 at 0xf1000000

    Security risk: creating user accessible mapping for 0x10300000 at 0xf1300000

    On node 0 totalpages: 32768

    zone(0): 32768 pages.

    zone(1): 0 pages.

    zone(2): 0 pages.

    Kernel command line: root=/dev/ram rw console=ttyS0,115200 mem=128M

    Console: colour dummy device 80x30

    Calibrating delay loop... 99.32 BogoMIPS

    Memory: 128MB = 128MB total      //토탈 SDRAM 사이즈

    Memory: 121240KB available (1518K code, 342K data, 372K init)

    Dentry cache hash table entries: 16384 (order: 5, 131072 bytes)

    Inode cache hash table entries: 8192 (order: 4, 65536 bytes)

    Mount-cache hash table entries: 2048 (order: 2, 16384 bytes)

    Buffer-cache hash table entries: 8192 (order: 3, 32768 bytes)

    Page-cache hash table entries: 32768 (order: 5, 131072 bytes)

    POSIX conformance testing by UNIFIX

    Linux NET4.0 for Linux 2.4

    Based upon Swansea University Computer Society NET3.039

    Initializing RT netlink socket

    Starting kswapd

    JFFS2 version 2.1. (C) 2001 Red Hat, Inc., designed by Axis Communications AB.

    PXA255-Tiny 6.4inch TFT LCD Device Driver init    // LCD 초기화

    Console: switching to colour frame buffer device 80x30

    pty: 256 Unix98 ptys configured

    Serial driver version 5.05c (2001-07-08) with no serial options enabled //UART 초기화

    ttyS00 at 0x0000 (irq = 14) is a PXA UART

    ttyS01 at 0x0000 (irq = 13) is a PXA UART

    ttyS02 at 0x0000 (irq = 12) is a PXA UART

    ADS7846 touch screen driver initialized IRQ:49

    RAMDISK driver initialized: 16 RAM disks of 16384K size 1024 blocksize

    PPP generic driver version 2.4.2

    Cirrus Logic CS8900A driver for Linux (V0.02)

    eth0: CS8900A rev E detected      //랜 포트

    SCSI subsystem driver Revision: 1.00

    kmod: failed to exec /sbin/modprobe -s -k scsi_hostadapter, errno = 2

    kmod: failed to exec /sbin/modprobe -s -k scsi_hostadapter, errno = 2

    ac97_codec: AC97 Audio codec, id: 0x4352:0x5973 (Unknown)  //사운드 코덱

    Probing Lubbock flash at physical address 0x00000000 (32-bit buswidth)

    Using buffer write method

    No RedBoot partition table detected in PXA255 flash

    Using static partition definition

    Creating 5 MTD partitions on "PXA255 flash":    //FLASH의 파티션 정보 출력

    0x00000000-0x00040000 : "Bootloader"

    0x00040000-0x00080000 : "param"

    0x00080000-0x00200000 : "kernel"

    0x00200000-0x00800000 : "ramdisk"

    0x00800000-0x02000000 : "User_Filesystem"

    usb.c: registered new driver hub

    usb.c: new USB bus registered, assigned bus number 1

    hc_sl811.c: USB SL811 at f2000000, addr2 = f2010000, IRQ 33

    hub.c: USB hub found

    hub.c: 1 port detected

    Initializing USB Mass Storage driver...

    usb.c: registered new driver usb-storage

    USB Mass Storage support registered.

    MMC subsystem, $Revision: 0.3.1.14 $

    MMC block device driver, $Revision: 0.3.1.16 $

    PXA255/250 MMC controller driver, $Revision: 0.3.1.12 $

    IEEE 802.2 LLC for Linux 2.1 (c) 1996 Tim Alpaerts

    NET4: Linux TCP/IP 1.0 for NET4.0

    IP Protocols: ICMP, UDP, TCP, IGMP

    IP: routing cache hash table of 1024 buckets, 8Kbytes

    TCP: Hash tables configured (established 8192 bind 16384)

    IPv4 over IPv4 tunneling driver

    NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.

    NET4: AppleTalk 0.18a for Linux NET4.0

    Fast Floating Point Emulator V0.9 (c) Peter Teichmann.

    NetWinder Floating Point Emulator V0.95 (c) 1998-1999 Rebel.com

    RAMDISK: Compressed image found at block 0

    Freeing initrd memory: 6144K

    EXT2-fs warning: maximal mount count reached, running e2fsck is recommended

    VFS: Mounted root (ext2 filesystem).

    Freeing init memory: 372K

    INIT: version 2.74 booting   //init 실행 < init 이 하는일은 아래와 같다 > 

                                                              ┌ 파일시스템의 구조 검사 

                                                              ├ 파일시스템의 마운트 

                                                              ├ 서버 데몬을 띄우고, 

                                                              ├ 사용자 로그인을 기다림 

                                                              └ 사용자가 로그인 하면, 사용자를 위한 쉘을 띄움

    Mounting filesystems

    INIT: Entering runlevel: 3

    Starting system logger:  syslogd

    Bringing up interface lo

    Starting portmapper:  portmap

    Starting INET services:  inetd

    Starting PCMCIA services: modulesinsmod: pcmcia_core.o: no module by that name                    dinsmod: i82365.o:

    no module by that name found

    insmod: ds.o: no module by that name found

    cardmgr.


    Embedded Linux System Kit...

     

    PXA255 login: root

     

    #########################################

    Embedded Education Kit..........!!

    #########################################

     

    [root@PXA255 root]$

     

     

    successful...*^^*



    'Embedded' 카테고리의 다른 글

    Cortex-M3에 대한 정리  (0) 2014.06.26
    프로젝트 정리  (0) 2011.11.20
    Fedora 12 에 NFS 구축  (0) 2010.05.01
    단위  (0) 2010.04.30
Designed by Tistory.