3.6. 설치하기 전에 할 하드웨어 및 운영 체제 설정

이 절에서는 데비안 설치에 앞서 필요한 하드웨어 설정에 대해 알아보겠습니다. 일반적으로 이 작업은 BIOS/UEFI/시스템 펌웨어 설정을 확인하고 필요하다면 설정을 변경하는 작업입니다. BIOS/UEFI 또는 시스템 펌웨어는 하드웨어가 사용하는 핵심 소프트웨어로, 전원을 켠 다음에 부팅 과정 동안에 시작되는 가장 중요한 소프트웨어입니다.

3.6.1. ARM 펌웨어

앞에서도 말했듯이, ARM 시스템에서는 아쉽게도 시스템 펌웨어의 표준이 없습니다. 같은 펌웨어를 사용하는 다른 시스템도 동작이 아주 다릅니다. 이는 ARM 아키텍쳐를 사용하는 하드웨어의 상당 부분이 임베디드 시스템이기 때문입니다. 임베디드 시스템에서는 제조사가 특별히 수정된 버전의 펌웨어를 빌드하고 이 펌웨어에는 하드웨어 전용 패치가 들어 있습니다. 아쉽게도 이 제조사는 수정 사항이나 확장한 기능을 상위의 펌웨어 개발자에게 전달하지 않습니다. 그러므로 수정 사항이 새 버전의 원래 펌웨어에서는 빠지게 됩니다.

결과적으로 새로 판매되는 시스템에서도 수년이 지나도 제조사 버전의 수정된 펌웨어를 사용하게 되는데, 그 동안 상위 메인라인의 코드는 엄청나게 발전해서 추가 기능을 제공할 수도 있고 동작이 달라질 수도 있습니다. 또 같은 펌웨어의 제조사 수정 버전이 달라져도 하드웨어의 장치 이름이 일관적이지 않습니다. 그래서 ARM을 사용하는 시스템에서는 제품과 무관한 설치 안내를 하기가 불가능합니다.

3.6.2. U-Boot에서 이더넷 MAC 주소 설정하기

모든 이더넷 인터페이스의 MAC 주소는 보통은 전세계에서 유일해야 합니다. 그리고 기술적으로도 이더넷 브로드캐스트 범위 안에서는 주소가 유일해야 합니다. 이렇게 유일성을 보장하기 위해, 중앙에서 관리하는 모음에서 제조사마다 일정한 블럭의 MAC 주소 묶음을 배정받습니다. (그리고 일정한 사용료를 냅니다.) 그 다음에 판매하는 제품마다 주소를 하나씩 부여합니다.

개발 보드의 경우에는, 제조사에서 이 사용료를 내지 않으려 하기도 해서 유일한 주소가 없을 수도 있습니다. 이 경우 사용자가 직접 MAC 주소를 설정해야 합니다. 이더넷 인터페이스에 MAC 주소가 지정되어 있지 않았을 때, 일부 드라이버는 부팅할 때마다 임의의 MAC 주소를 생성하기도 합니다. 이렇게 동작하는 경우 수동으로 주소를 지정하지 않아도 네트워크를 사용할 수 있습니다. 하지만 예를 들어 DHCP 서버가 클라이언트 MAC 주소에 따라 일정한 IP 주소를 할당하는 경우에는 제대로 동작하지 않습니다.

공식적으로 배정된 MAC 주소와 충돌을 피하려면 사설(locally administered) 주소로 예약된 주소가 있습니다. 이 주소는 주소의 첫 바이트에서 두 비트로 정의됩니다. (영문 위키백과의 MAC address 글에 잘 설며오디어 있습니다.) 예를 들어, 16진수 "ca"로 시작하는 모든 주소는(예를 들어 ca:ff:ee:12:34:56) 사설 주소입니다.

U-Boot를 시스템 펌웨어로 사용하는 시스템에서는, 이더넷 MAC 주소를 ethaddr 환경 변수에 저장합니다. 이 값은 U-Boot 명령 프롬프트에서 printenv ethaddr 명령으로 확인해 볼 수 있고, setenv ethaddr ca:ff:ee:12:34:56 명령과 같이 설정할 수 있습니다. 값을 설정하면 saveenv 명령으로 값을 저장합니다.

3.6.3. U-Boot의 커널/최초 램디스크/디바이스 트리 재배치 문제

예전 버전의 U-Boot를 사용하는 일부 시스템에서는, 부팅 과정에서 메모리에 있는 리눅스 커널, 최초 램디스크, 디바이스 트리를 재배치할 때 문제가 있을 수도 있습니다. 이 경우 U-Boot에서 Starting kernel ... 메시지를 표시히지만, 그 뒤에 출력이 없이 시스템이 멈춰 있습니다. 이 문제는 U-Boot v2014.07 버전 이후로 해결되었습니다.

만약 시스템에서 v2014.07보다 오래 된 U-Boot 버전을 사용하고 나중에 그보다 나중 버전으로 업그레이드했다면, U-Boot 업그레이드 후에도 문제가 계속 발생할 수 있습니다. U-Boot를 업그레이드해도 현재 U-Boot 환경 변수를 수정하지는 않고, 추가 환경 변수를(bootm_size) 설정해야 합니다. U-Boot는 환경 변수 데이터가 없이 새로 설치할 경우에만 자동으로 이 환경 변수를 설정합니다. U-Boot 프롬프트에서 env default bootm_size; saveenv 명령으로 bootm_size 환경 변수를 U-Boot의 기본값으로 수동 설정할 수도 있습니다.

재배치와 관련된 문제를 피해가는 한 가지 가능한 방법은 setenv fdt_high ffffffff; setenv initrd_high 0xffffffff; saveenv 명령을 U-Boot 프롬프트에서 실행해서 최초 램디스크와 디바이스 트리 파일의 재배치를 완전히 막는 방법입니다.