네트워크 부팅 복구
탈착식 미디어가 아닌 네트워크를 통해 DevKit을 부팅해야 할 때 Net Boot 복구 기능을 사용하세요. 다음의 경우에 유용합니다.
- DevKit을 이전 버전의 SDK로 다운그레이드해야 합니다.
- 최신 버전이 아닌 빌드를 설치해야 합니다(예: 사전 릴리스
develop빌드 또는 내부 엔지니어링 이미지). - 손상된 부트 로더 또는 파일 시스템이 있는 보드를 복구해야 하는데, SD 카드가 없습니다.
- 새 보드를 도입하려 하시는데, 내부 저장 장치의 마모를 줄이고 싶으신 것 같습니다.
- 현재 Modalix DevKit을 Yocto Linux에서 eLxr로, 또는 eLxr에서 다시 Yocto Linux로 변환하고 있습니다. 변환에 필요한 구체적인 요구 사항은 eLxr로 변환를 참조하십시오.
sima-cli bootimg와 함께 --netboot 옵션을 사용합니다. 그러면 대상 보드에 대한 부트 이미지를 다운로드하고 호스트에 내장된 TFTP 서버에서 해당 이미지를 제공합니다. 그런 다음 U-Boot에서 DevKit을 구성하여 해당 TFTP 서버에서 부팅하고 새 이미지를 eMMC에 플래시합니다.
1단계: 물리적 설정
이 절차는 macOS 및 Ubuntu Linux 호스트를 지원합니다.
호스트 시스템에 sima-cli가 설치되어 있지 않으면, 다음 단계를 진행하기 전에 설치하십시오.
터미널 세션 2개가 필요합니다.
- DevKit에 연결된 시리얼 콘솔 세션을 사용합니다. 이 세션을 사용하여 U-Boot 환경 변수를 수정하여 DevKit가 네트워크를 통해 부팅되도록 합니다.
- 호스트 셸 세션입니다. 이 세션을 사용하여 TFTP 서버를 시작하고 eMMC 플래시를 초기화합니다.
-
DevKit의 이더넷 포트를 호스트 장치에 직접 연결하고, 호스트의 네트워크 인터페이스를 정적 IP 주소 192.168.1.10으로 설정합니다. Modalix 얼리 액세스 DevKit에서는 이더넷 포트 0을 사용합니다.
-
DevKit의 UART 포트를 호스트에 연결하여 콘솔에 액세스합니다. 호스트에
sima-cli를 설치한 후 시리얼 터미널을 엽니다.sima-user@sima-user-machine:~$ sima-cli serial -
DevKit에서 네트워크 인터페이스를 기본 정적 IP 주소인 192.168.1.20으로 구성합니다. 구성 방법은 독립 모드 네트워크 설정을 따르십시오.
2단계. 호스트에서 TFTP Netboot 서버를 시작합니다.
요구 사항
- 호스트와 DevKit는 동일한 물리적 네트워크 또는 직접 이더넷 연결을 통해 연결되어야 합니다.
- 이더넷 연결은 기가비트 인터페이스 이상이어야 합니다(전송 속도는 1000Mbps를 초과해야 함).
- 호스트는 펌웨어 이미지를 다운로드하기 위해 인터넷에 접속해야 합니다.
- UDP 포트 **69(TFTP)**는 호스트 방화벽에 의해 차단되어서는 안 됩니다.
<version>을 대상 SDK 버전(예: 2.1.2)으로, <boardtype>을 modalix 또는 mlsoc로, <fwtype>을 yocto 또는 elxr로 바꿉니다.
macOS에서:
sima-user@sima-user-machine:~$ sima-cli bootimg --boardtype <boardtype> --fwtype <fwtype> -v <version> --netboot
Linux에서:
TFTP 서버는 권한이 필요한 포트 69에 연결되므로 sudo 명령어를 사용해야 합니다.
sima-user@sima-user-machine:~$ sudo ~/.sima-cli/.venv/bin/sima-cli bootimg --boardtype <boardtype> --fwtype <fwtype> -v <version> --netboot
이 명령어는:
- 요청한 SDK 버전과 보드 유형에 맞는 부팅 가능한 이미지를 다운로드합니다.
- 파일을 임 시 작업 디렉터리에 추출합니다.
- 로컬 TFTP 서버를 시작하고 추출된 부트 파일을 제공합니다(
Image,boot.scr,.dtb파일 등).
3단계: DevKit을 Netboot로 구성
DevKit을 시리얼 콘솔을 통해 호스트에 연결한 상태에서 전원을 껐다가 다시 켜십시오. 전원 재부팅 중에 시리얼 콘솔 연결이 끊어지면 다시 연결하십시오. Hit any key to stop autoboot 메시지가 나타날 때까지 기다린 다음 아무 키나 눌러 U-Boot 셸로 들어갑니다.
... ... ...
Address in DT is ff:ff:ff:ff:ff:ff
Address in environment is 68:e1:54:00:05:c6
eth0: ethernet@a800000 [PRIME]
Hit any key to stop autoboot: 0
sima$
다음으로 U-Boot 셸에서 다음 명령을 실행합니다.
sima:~$ setenv boot_targets net; saveenv; boot
Modalix eLxr 대상의 경우, 부팅하기 전에 cpio 이미지 이름을 설정하십시오.
sima:~$ setenv cpio_name simaai-image-palette-modalix.cpio.gz; setenv boot_targets net; saveenv; boot
이 명령은 DevKit에 2단계에서 준비된 호스트 TFTP 서버에서 부팅하도록 지시합니다.
기본적으로 DevKit U-Boot는 다음과 같이 구성됩니다.
ipaddr=192.168.1.20(DevKit의 이더넷 인터페이스, 멀티포트 보드의 첫 번째 포트).serverip=192.168.1.10(TFTP 서버를 실행하는 호스트 머신).
다른 네트워크를 사용하려면 U-Boot에서 serverip 및 ipaddr를 업데이트하여 현재 환경에 맞게 설정하십시오. 선택한 IP 주소에서 DevKit이 호스트에 연결할 수 있는지 확인하십시오.
sima:~$ setenv serverip 10.0.0.10; setenv ipaddr 10.0.0.1; saveenv; boot
4단계: eMMC를 플래싱합니다.
호스트의 --netboot 셸은 두 가지 명령을 지원합니다.
c— 연결된 모든 클라이언트와 현재 해당 클라이언트에서 실행 중인 펌웨어 버전을 표시합니다.f— 선택한 클라이언트의 eMMC를 플래싱합니다.
DevKit이 네트워크 부팅을 완료할 때까지 기다립니다. 이 과정은 몇 분 정도 걸릴 수 있습니다. 시리얼 콘솔에 로그인 프롬프트가 표시되면 보드가 준비된 것입니다. 전체 부팅 과정을 관찰하기 위해 시리얼 콘솔을 계속 연결해 두는 것이 좋습니다.
호스트 터미널로 돌아가서 netboot> 프롬프트가 나타날 때까지 Enter 키를 누릅니다. 선택적으로 c를 입력하여 DevKit이 연결되었는지 확인하고 현재 펌웨어 버전을 표시한 다음, f를 입력하여 펌웨어를 업데이트합니다.
netboot> f
다음과 유사한 로그를 확인할 수 있습니다.
🔍 Checking SSH availability for 192.168.1.20...
✅ Board is online!
✅ SSH is available on 192.168.1.20
netboot> f
🔧 Initiating eMMC flash [...]
이미지 파일의 크기는 대략 1.6GB이며, 전송하는 데 몇 분 정도 걸립니다. 예시 진행 상황은 다음과 같습니다.
↦ 520093696 bytes (520 MB, 496 MiB) copied, 1 s, 515 MB/s
↦ 5368709120 bytes (5.4 GB, 5.0 GiB) copied, 163.331 s, 32.9 MB/s
플래싱이 완료되면 DevKit의 전원을 껐다가 다시 켜십시오. 그러면 eMMC에서 대상 버전이 부팅됩니다.
네트부팅 중에 DevKit의 IP 주소가 변경된 경우 (예: DHCP가 기본 주소인 192.168.1.20 대신 다른 주소를 할당한 경우) f는 자체적으로 보드에 연결하지 못합니다. DevKit의 직렬 콘솔에서 새 IP 주소를 확인합니다. 이 주소는 부팅 로그에 출력되며, 네트부팅된 셸에서 ip addr로 표시됩니다. 그런 다음 이 주소를 f에 명시적으로 전달합니다.
netboot> f <new-ip>
Troubleshooting
-
DevKit가 네트워크 부팅에 실패하면 호스트와 장치가 동일한 서브넷(
192.168.1.x)에 있는지 확인하십시오. -
Modalix 얼리 액세스 게시판에서는 네트워크 부팅을 위해 이더넷 포트 0만 지원됩니다.
-
Linux 환경에서 호스트 방화벽이 **UDP 포트 69(TFTP)**를 허용하도록 설정되었는지 확인하십시오.
-
DevKit과의 연결 상태를 확인하십시오.
modalix:~$ ping 192.168.1.10 -
f에서 이미지를 찾지 못하면 2단계의sima-cli bootimg --netboot명령을 다시 실행하여 TFTP 경로를 새로 고칩니다. -
Modalix DevKit을 eLxr로 변환한 후 시리얼 콘솔에 NFS 관련 오류 메시지가 표시되면 안전하게 무시해도 됩니다.