지금까지 U-boot는 TFTP 및 NFS 부팅을 허용하는 UDP(사용자 데이터그램 프로토콜)만 지원했지만 Linaro는 일반 웹 서버에서 Linux를 부팅하기 위해 U-boot에 TCP 및 HTTP 지원을 추가했다.
HTTP를 통해 Linux를 부팅하려면 U-boot 구성에서 활성화해야 한다.
CONFIG_PROT_TCP=y
CONFIG_PROT_TCP_SACK=y
CONFIG_CMD_WGET=y
첫 번째 구성은 TCP 스택을 활성화 한다. 두 번째 구성은 SACK(Selective Acknowledgement)라는 TCP 옵션을 활성화 한다. 세 번째 구성은 HTTP 서버에서 파일을 다운로드할 수 있는 간단한 명령 wget을 활성화 한다.
기본적으로 세 가지 구성 옵션을 모두 켜야 한다 SACK을 켜면 TCP 프로토콜의 최대 성능을 얻을 수 있다. 요즘 거의 모든 HTTP 서버는 Linux 커널에서 실행하여 SACK을 지원한다. 서버가 SACK를 지원하지 않더라도 서버가 SACK을 지원하는지 여부를 감지하는 프로그램 논리가 있으므로 이 기능을 켜도 괜찮다.
wget을 실행하여 HTTP 서버에서 파일 다운로드
먼저 HTTP 서버를 구축한다. 예를 들어 "sudo apt install apache2"로 apache2를 설치한 다음 "sudo a2enmod userdir"을 실행하여 파일을 사용자 디렉터리에 넣을 수 있다. 그런 다음 ~/public_html 에 파일을 넣는다. 예를 들어 vmlinuz를 ~/public_html에 넣는다.
그런 다음 다음과 같이 U-boot를 실행하는 대상 장치에서 Linux를 부팅할 수 있다.
setenv autoload 0;dhcp
setenv serverip 192.168.0.1
wget $loadaddr ~/vmlinuz
또는 DHCP를 통해 IP 주소를 얻은 후 단일 명령줄로 Linux를 로드할 수도 있다.
wget $loadaddr 192.168.0.1:~/vmlinuz
https://www.linaro.org/blog/http-now-supported-in-u-boot