이 장치는 Big-Endian MIPS 명령어 세트를 사용하여 RTL8197DN 칩셋을 사용하고 있습니다. 내 연구에 따르면, 실제 MIPS 코어는 Lexra (확인 될) 인 것 같습니다.
부팅 중에 WPS를 누르고 동시에 재설정하면 부트 로더 모드로 들어갑니다. 부트 로더는 UART를 통해 간단한 명령 인터페이스를 제공 할뿐만 아니라 TFTP를 통해 업데이트를 업로드 할 수 있습니다 ( ./upload_update.sh 참조). 부팅이 실패하면 부트 로더가 자동으로 입력됩니다 (복구 모드로도).
TFTP를 통해 업데이트가 업로드되면 주소 0x80500000에서 RAM에로드됩니다. 파일이 올바른 업데이트 파일 인 경우 플래시가 자동으로 시작됩니다. 그렇지 않으면 파일이 RAM에 유지되며 FLW 명령을 사용하여 수동으로 플래시 할 수 있습니다.
확인 된 작업 명령 :
이 장치는 부트 로더 메시지와 Linux 쉘이있는 UART 헤더를 노출시킵니다. 38400 보드
사용자 이름 : 루트 비밀번호 : 웹 패널의 관리자 비밀번호로 구성된 내용 (기본값 : admin)
모든 큰 엔디언. 업데이트 파일을 구문 분석하는 스크립트는 ./check_update.py를 참조하고, RAW 바이너리 파일에 업데이트 헤더를 추가하는 스크립트는 ./make_header.py를 참조하십시오.
업데이트 파일은 함께 연결된 다음 블록으로 만들어집니다.
| 오프셋 | 크기 | 설명 |
|---|---|---|
| 0 | 4 | 파일 유형-유효한 유형은 https://github.com/jameshilliard/wecb-vz-gpl/blob/master/rtl819x/bootcode/boot/init/rtk.h를 참조하십시오. 우리가 가지고있는 장치는 커널에 "CR6C"와 루트에 "r6CR"을 사용하는 것 같습니다 (및 부트 로더의 경우 "부팅"에 대해서는?) |
| 4 | 4 | RAM의로드 주소 (커널 이미지에만 사용됩니까?) |
| 8 | 4 | 플래시 메모리의 주소 |
| 12 | 4 | 데이터의 길이 |
| 16 | * | 데이터 |
데이터가 확인되었습니다 - 모든 바이트의 16 비트 큰 엔드 엔드 합계는 0x0000이어야합니다 (이 장치에없는 웹 파일 파티션을 플래시하지 않는 한,이 경우 체크섬은 8 비트입니다). 이것은 일반적으로 마지막에 두 바이트를 추가하여 달성됩니다.
부트 로더가 먼저 ~ 4 개의 하드 코딩 된 주소를 먼저 보려고 시도하면 서명을 위해 전체 플래시를 검색하여 플래시 레이아웃이 다른 장치마다 다를 수 있음을 나타냅니다. 데이터에는 위의 업데이트 파일과 동일한 체크섬 확인이 있습니다.
./split_img.sh 를 참조하십시오
| 주소를 시작하십시오 | 끝 주소 | 헤더 | 설명 |
|---|---|---|---|
| 0x00000000 | 0x00006000 | - | 부트 로더 코드 |
| 0x00006000 | 0x00008000 | H601 (?) | 하드웨어 구성 (MAC 주소 등) |
| 0x00008000 | 0x00010000 | compds (?) | 기본 구성 |
| 0x00010000 | 0x00018000 | compcs (?) | 현재 구성 |
| 0x00018000 | 0x00138000 | CR6C의 헤더 업데이트 | Linux 커널, 업데이트 헤더 형식과 동일한 헤더로 접두사 |
| 0x00138000 | 0x00327002 | HSQ로 시작하는 Squashfs FileSystem 헤더 | 루트 파일 시스템. 체크섬에 마지막 두 바이트가 추가됩니다. |
| 0x00327002 | 0x00400000 | - | 0xff 0xff 0xff 0xff ... |