부트로더에 대해서 간단하게 정리하면 다음과 같다. 임베디드 시스템의경우 PC와는 다르게 BIOS라는 하드웨어 초기화를 위한 소프트웨어가 없다. 이 BIOS라는 소프트웨어는 PC의 내부 ROM등에 탑재가 되어, 컴퓨터에 전원이 인가되면 하드웨어를 공장 또는 사용자가 설정한 상태로 초기화 하고 하드디스크의 부트로 이동하여 운영체제 부팅되도록 한다. 

     

    하지만 임베디드 시스템의 경우 범용적인 PC와 다르게 설정된 기본적인 처리만 가능하므로 PC처럼 다양한 하드웨어를 사용하지 않고, PC만큼 고속 장치를 위한 시스템도 일반적으론 사용하지 않는다. (물론, 극히 드물긴 하지만 사용하는 경우도 있다) 따라서 하드웨어를 초기화하기 위해서 하드웨어 종속적인 BIOS를 사용하지 않고, 이를 소프트웨어에서 처리할 수 있도록 하였다. 자세한건 기회가 된다면 별도로 정리하도록 하고, 부트로더 진입 시간을 변경하는 방법에 대해서 이야기 하고자 한다. 

     

      부트로더 대기시간(bootdelay)는 임베디드 시스템을 터미널에 연결 했을 때 부트로더의 커맨드 모드로 진입할 것인지 아니면 일반적인 부트를 진행할 것인지를 선택한다. 

     

      그러면 부트로더 커맨드는 어떤 역할을 하는지 간단하게 이야기하자면, 하드웨어에 대한 기본 설정, 그리고 어떠한 장치(nand, emmc, nor, network...)로 부터 부팅을 할 것인지, 부팅시 사용하는 이미지들은 메모리 어디에 넣을 것인지 그리고 부팅에 필요한 정보가 들어있는 메모리 위치를 지정하는 것과 함께 앞서 설정된 정보들중 일부를 커널(사실상 운영체제)에게 전달하는 역할을 한다. 해당 정보를 참조하여 커널에서 필요한 정보를 취하고 OS 부팅을 시작한다. 그리고 rootfs의 형태에 따라 터미널 또는 xwindow를 사용하는 시스템이 준비된다. 

     

      필자가 처음 임베디드 시스템을 접했을 때에는 부트로더에서 부트로더, 커널, 파일시스템을 nfs를 통해서 시험하고, 정상적으로 동작하면 부트로더, 커널, 파일시스템을 각각 메모리로 가져온다음 nor나 nand등에 기록하여 리눅스 시스템을 준비하였다. 최근 오픈임베디드의 경우 microSD를 이용하기도 하고, 실제 산업체에서 사용하는 것은 emmc나 ssd등을 이용한다. 그리고 USB도 사용할 수 있어서 네트워크와 usb등 스스로 사용하기 편리한 방식으로 시스템을 구성하기도 하고, sd카드로 부팅한 다음 실제 이미지를 emmc등에 직접 기록하기도 한다. 뭐.. 어쨋든 독자가 사용하고 있는 시스템에 맞추어 기본적인 내용을 학습했다면, 이제 부트로더 지연시간을 설정하는 방법에 대해서 알아보자. 

     

    1. 한번만 바꾸면 되는 경우 

      보통 테스트를 진행하는 경우 그러하다. 터미널에서 부트로더에 진입한 다음 환경 설정값을 바꾸는 것으로 부트 지연시간을 설정할 수 있다. 

     

    boot=> pri bootdelay

    bootdelay=1

    boot=> setenv bootdelay 2

    boot=> pri bootdelay

    bootdelay=2

     

    위에서 setenv로 bootdelay 시간을 변경하였다. 그리고 pri로 확인하여 정상적으로 설정되었음 확인하였다면, 이제 부트로더 환경을 저장하는 특정위치에 해당 값을 기록하면 된다. 특정위치는 소스코드에 표시 되어있지만, 변경할 것이 아니면 특별히 확인할 필요 없으니 다음과 같이 기록해준다.

     

      다음은 변경된 환경에 대해서 어떻게 처리할지를 결정하여야 한다.  일반적으로 부트로더의 환경변수를 설정한 경우라면 지속적으로 사용하기 위함이므로 아래와 같이 saveenv로 저장할 수 있다. 그러면 다음 부팅부터는 해당 설정값이 적용된다. 

     

    boot=> saveenv

     

      저장하지 않고 이번만 사용할 경우라면, reset 명령을 통해서 전원 차단없이 리부팅을 진행한다. 

    boot=> reset

     

      마지막으로 저장하지 않고 boot 명령으로 부팅을 시작하면 재부팅 되면 초기화가 되어있음을 확인하게 된다. 

    boot=> boot

     

     

    2. 부트로더 옵션수정

      부트로더의 경우에도 일반사용자가 편리하게 환경을 변경할 수 있도록 menu를 제공한다. 여기서 우리는 bootdelay만 수정할 예정이므로 아래의 그림과 같이 수정해줄 수 있다. 

     

    부트로더 소스 디렉터리 > make menuconfig

    u-boot 옵션 설정 화면

     

     

    해당 항목에서 delay in seconds before automatically booting을 2로 설정하여 2초 대기후 부팅되도록 설정할 수 있다. 다음 부트로더를 빌드해서 적용하면 되는데 문제가 하나 있다. 기존에 환경 설정이 1초로 되어있었다면, 부트로더를 변경했음에도 1초가 유지된다. 해당 값을 정용하기 위해서는 부트로더를 디폴트값으로 재 갱신을 해주어야 한다. 혹은 타겟 장치의 터미널에서 부트로더 툴을 이용하여 환경 변수를 확인하고 수정할 수 있다. 

     

    부트로더 기본값 설정후 환경 저장

     

    3. 타겟의 터미널에서 부트로더 환경 설정 변경하기

     만약, 부트로더에 진입하지 못할 만큼 짧은 시간을 설정하여 부트로더 커맨드 모드에 진입이 어려운 경우라면 장치의 터미널에서 다음의 명령을 이용하여 delay 시간을 변경할 수 있다. 

    리눅스 터미널에서 부트로더 설정값 변경

     

     

    부트로더 딜레이를 변경하기 위한 세가지 방법을 알아보았다. 특히 3번째 항목의 경우 잘 확인해보고 사용하기 바란다. 탄복적으로 기록하거나 기록중 문제가 발생되면 부팅에 영향을 줄 수 있다. 

    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기