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

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

3.6.1. ARM 펌웨어

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

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

3.6.2. Setting the ethernet MAC address in u-boot

The MAC address of every ethernet interface should normally be globally unique, and it technically has to be unique within its ethernet broadcast domain. To achieve this, the manufacturer usually allocates a block of MAC addresses from a centrally-administered pool (for which a fee has to be paid) and preconfigures one of these addresses on each item sold.

In the case of development boards, sometimes the manufacturer wants to avoid paying these fees and therefore provides no globally unique addresses. In these cases the users themselves have to define MAC addresses for their systems. When no MAC address is defined for an ethernet interface, some network drivers generate a random MAC address that can change on every boot, and if this happens, network access would be possible even when the user has not manually set an address, but e.g. assigning semi-static IP addresses by DHCP based on the MAC address of the requesting client would obviously not work reliably.

To avoid conflicts with existing officially-assigned MAC addresses, there is an address pool which is reserved for so-called locally administered addresses. It is defined by the value of two specific bits in the first byte of the address (the article MAC address in the English language Wikipedia gives a good explanation). In practice this means that e.g. any address starting with hexadecimal ca (such as ca:ff:ee:12:34:56) can be used as a locally administered address.

On systems using u-boot as system firmware, the ethernet MAC address is placed in the ethaddr environment variable. It can be checked at the u-boot command prompt with the command printenv ethaddr and can be set with the command setenv ethaddr ca:ff:ee:12:34:56. After setting the value, the command saveenv makes the assignment permanent.

3.6.3. Kernel/Initrd/Device-Tree relocation issues in u-boot

On some systems with older u-boot versions there can be problems with properly relocating the Linux kernel, the initial ramdisk and the device-tree blob in memory during the boot process. In this case, u-boot shows the message Starting kernel ..., but the system freezes afterwards without further output. These issues have been solved with newer u-boot versions from v2014.07 onwards.

If the system has originally used a u-boot version older than v2014.07 and has been upgraded to a newer version later, the problem might still occur even after upgrading u-boot. Upgrading u-boot usually does not modify the existing u-boot environment variables and the fix requires an additional environment variable (bootm_size) to be set, which u-boot does automatically only on fresh installations without existing environment data. It is possible to manually set bootm_size to the new u-boot's default value by running the command env default bootm_size; saveenv at the u-boot prompt.

Another possibility to circumvent relocation-related problems is to run the command setenv fdt_high ffffffff; setenv initrd_high 0xffffffff; saveenv at the u-boot prompt to completely disable the relocation of the initial ramdisk and the device-tree blob.