Redmi AX6000에 OpenWrt 올리기

얼마전에 구입한 Redmi AX6000에 openwrt 올려보는데 공홈 설명서가 살짝 부실한거 같아서 여기에 정리해봅니다. 포스팅을 생각하고 스샷을 좀 찍어뒀어야 했는데 그게 없어서 그냥 대부분 텍스트로 적어봅니다.

openwrt 설명서, 개인 블로그 글 두 링크를 같이 보면서 작업하는걸 추천드립니다.

0. 준비 환경 세팅

공유기 연결도

ax6000 펌웨어 교체중에는 인터넷이 안되기 때문에 저는 기존공유기는 무선랜으로 노트북에 연결하고 ax6000은 유선랜을 위 이미지처럼 연결해서 작업을 했습니다.

랜카드 메트릭 수정하기

유선랜과 무선랜 두개를 동시에 연결하면 컴퓨터는 어느쪽으로 접속해야 하는지 몰라서 인터넷이 안되는 경우가 생기는데 그럴경우 위 스샷 처럼 랜카드 메트릭 우선순위를 변경하면 됩니다.

인터넷에 연결된 랜카드 메트릭을 1로 지정하고 ax6000과 연결된 랜카드 메트릭을 100으로 입력하면 인터넷도 잘 접속되면서 openwrt 교체 작업도 잘 됩니다.

작업도중 인터넷이 필요없는 분은 위처럼 연결 안하고 그냥 기존 공유기 위치에 넣으시면 됩니다.

Copy 버튼

명령어들은 마우스 드래그로 복사할 필요 없이 우측에 copy 버튼을 누르면 내용이 클립보드로 복사가 됩니다.

교체 작업에 사용된 openwrt 버전은 23.05.2 입니다.
모든 펌웨어 파일은 C:\aaa 폴더에 넣고 작업했습니다.

1. 초기 세팅 작업

처음 전원을 연결하고 http://192.168.31.1 에 접속하면 공유기 세팅 작업이 시작되는데 중국어로만 나옵니다. 저는 핸드폰 번역앱을 이용해서 나오는데로 잘 읽어보고 완료가 됐습니다.

이 부분은 크게 뭐 없었고 wifi 비번과 관리자 비번 설정이었던걸로 기억합니다.

2. 펌웨어 다운그레이드

펌웨어 버전이 1.0.48이 아니라면 다운그레이드를 해야 합니다. 역시 휴대폰 번역앱에 카메라 기능을 잘 활용해서 펌웨어 업그레이드 페이지에 접속해서 미리 받아놓은 1.0.48버전 펌웨어로 다운그레이드를 합니다.

1.0.48 펌웨어 다운로드 :  https://cdn.cnbj1.fds.api.mi-img.com/xiaoqiang/rom/rb06/miwifi_rb06_firmware_847e9_1.0.48.bin

다운그레이드 하면 현재 펌웨어 버전 보다 낮은 버전이라 안된다 라고 나오는데 현재 URL을 보면 맨 뒤에 ?downgrade=0 라고 되어 있는데 이걸 1로 바꾸면 다운그레이드가 됩니다. 만약에 ?downgrade=1로 되어 있으면 2로 변경합니다.

3. stok 토큰값 구하기

다운그레이드 한 공유기 관리자 페이지(http://192.168.31.1/)에 로그인 하면 URL 부분에 stok 값이 있는데 이 값을 메모장에 복사합니다.

예) http://192.168.31.1/cgi-bin/luci/stok=abcdefge12345/web/home 에서 토큰값은 abcdefge12345 입니다.

토큰값은 기기가 재부팅 할때 변경됩니다.

4. 루팅하기

아래 나오는 url을 순서대로 웹브라우저에 입력하는데 토큰값을 잘 확인해서 입력해야 합니다.

  1. 개발/디버그 모드 활성화
    http://192.168.31.1/cgi-bin/luci/;stok=토큰값/api/misystem/set_sys_time?timezone=%20%27%20%3B%20echo%20pVoAAA%3D%3D%20%7C%20base64%20-d%20%7C%20mtd%20write%20-%20crash%20%3B%20

    위 내용을 메모장에 복사한뒤 토큰값만 3번 내용에서 구한 값으로 바꿔서 웹브라우저 URL에 입력합니다. 제대로 됬다면 {“code”:0} 이 출력됩니다.

    http://192.168.31.1/cgi-bin/luci/;stok=토큰값/api/misystem/set_sys_time?timezone=%20%27%20%3b%20reboot%20%3b%20

    위 URL로 공유기를 재부팅 합니다.

  2. Bdata 설정
    http://192.168.31.1/cgi-bin/luci/;stok=토큰값/api/misystem/set_sys_time?timezone=%20%27%20%3B%20bdata%20set%20telnet_en%3D1%20%3B%20bdata%20set%20ssh_en%3D1%20%3B%20bdata%20commit%20%3B%20

    재부팅 했으니 3번을 참고해서 새 토큰값을 구해서 위 URL을 입력합니다.

    http://192.168.31.1/cgi-bin/luci/;stok=토큰값/api/misystem/set_sys_time?timezone=%20%27%20%3b%20reboot%20%3b%20

    다시 재부팅을 합니다.

  3. 개발/디버그 모드 비활성화
    http://192.168.31.1/cgi-bin/luci/;stok={token}/api/misystem/set_sys_time?timezone=%20%27%20%3b%20mtd%20erase%20crash%20%3b%20

    새 토큰값으로 위 URL을 입력합니다.

  4. sh 접속 활성화 하기
    putty ax6000 telnet 연결
    putty를 이용해서 telnet으로 접속합니다. 아이디는 root 이고 비번은 없습니다.  만약 비번입력에 엔터 쳤는데 틀린 암호라고 나오면 루팅하기 1번부터 다시 해줍니다. 이유는 잘 모르지만 뭔가 제대로 안된것입니다. (저도 처음에 암호가 계속 틀렸다고 나와서 루팅을 다시 해주니 잘 됐습니다)
    vi /etc/init.d/dropbear

    telnet에 접속이 되면 위 명령어를 입력합니다.

    if [ "$flg_ssh" != "1" -o "$channel" = "release" ]; then        
      return 0                                                           
    fi

    이 세줄을 찾아서 삭제해야 하는데 start_service() 항목에 있습니다. (스크롤 많이 해야 합니다)
    삭제하고 나올땐 ESC 키누르고 :wq를 입력하면 됩니다.
    vi를 빠져나왔다면

    /etc/init.d/dropbear start

    telnet창에서 위 명령어를 입력합니다.

  5. A note about recent ssh clients
    최신 SSH 클라이언트가 접속 안되는걸 허용해주는 옵션
    openwrt 설치 설명서 보면 위 항목을 안해주면 최신 SSH 클라이언트에서 접속이 안되기 때문에 위 내용을 추가해야 한다고 하는데 추가가 안됩니다.
    이유는 잘 모르겠는데 vi ~/.ssh/config 를 실행 후 위 내용을 입력한 뒤 저장할려고 하면 저장이 안되고 .ssh 폴더가 없어서 그런가 싶어서  mkdir 명령으로 폴더를 생성할려고 하면 읽기 전용이라 안된다는 에러 메세지가 나옵니다. 한참 고민하고 검색하다가 걍 넘어갔는데 현재 별 문제는 없이 잘 쓰고 있습니다.

5. OpenWrt 펌웨어 올리기 (stock layout)

OpenWrt stock layout 다운로드

openwrt 펌웨어를 다운받습니다.

scp C:\aaa\openwrt-23.05.2-mediatek-filogic-xiaomi_redmi-router-ax6000-stock-initramfs-factory.ubi root@192.168.31.1:/tmp/initramfs-factory.ubi

윈도우11 터미널(cmd)을 열고 scp 명령으로 파일을 공유기 내부 저장소로 업로드 합니다.

cat /proc/cmdline

telnet에서 위 명령을 치면

console=ttyS0,115200n1 loglevel=8 firmware=1 uart_en=1

위와 같은 출력이 나오는데 여기서 firmware값이 0인지 1인지 잘 봐두면 됩니다.

firmware=1 일때

nvram set boot_wait=on
nvram set uart_en=1
nvram set flag_boot_rootfs=0
nvram set flag_last_success=0
nvram set flag_boot_success=1
nvram set flag_try_sys1_failed=0
nvram set flag_try_sys2_failed=0
nvram commit

firmware=0 일때

nvram set boot_wait=on
nvram set uart_en=1
nvram set flag_boot_rootfs=1
nvram set flag_last_success=1
nvram set flag_boot_success=1
nvram set flag_try_sys1_failed=0
nvram set flag_try_sys2_failed=0
nvram commit

firmware 값에 따라 잘 구분해서 위 명령어를 복사해서 telnet 창에 붙여넣기를 해줍니다.

이제 펌웨어 플래싱을 하니 살짝 긴장(?)하시고 

firmware=1 일때

ubiformat /dev/mtd8 -y -f /tmp/initramfs-factory.ubi

firmware=0 일때

ubiformat /dev/mtd9 -y -f /tmp/initramfs-factory.ubi

펌웨어 숫자 잘 구분해서 위 명령을 telnet창에 입력해서 플래싱을 합니다.

reboot

플래싱이 완료되면 telnet창에 위 명령을 입력해서 공유기를 재부팅 합니다.


여기서 부터는 이제 ssh로 접속합니다. ssh 접속ip는 192.168.1.1입니다. (공홈 설명서에 ip 바뀌는거에 대해 안써 있어서 처음에 벽돌된줄 알고 한참 삽질했습니다)

fw_setenv boot_wait on
fw_setenv uart_en 1
fw_setenv flag_boot_rootfs 0
fw_setenv flag_last_success 1
fw_setenv flag_boot_success 1
fw_setenv flag_try_sys1_failed 8
fw_setenv flag_try_sys2_failed 8
fw_setenv mtdparts "nmbm0:1024k(bl2),256k(Nvram),256k(Bdata),2048k(factory),2048k(fip),256k(crash),256k(crash_log),30720k(ubi),30720k(ubi1),51200k(overlay)"

ssh창에 그대로 복붙을 합니다.

scp C:\aaa\openwrt-23.05.2-mediatek-filogic-xiaomi_redmi-router-ax6000-stock-squashfs-sysupgrade.bin root@192.168.1.1:/tmp/squashfs-sysupgrade.bin

윈도우 터미널창에서  scp명령으로 sysupgrade 파일을 공유기로 업로드합니다.

sysupgrade -n /tmp/squashfs-sysupgrade.bin

ssh창에서 위 명령어로 sysupgrade 플래싱을 합니다. 플래싱을 하면 자동으로 공유기가 재시작합니다.

여기까지가 stock layout으로 레드미 펌웨어를 날리지 않은 상태에서 OpenWrt를 설치한 상태가 됩니다. 그리고 사용중 벽돌이 됐을경우 레드미 펌웨어 복구 프로그램으로 원상복구 할 수 있다고 합니다.

6. OpenWrt 펌웨어 올리기 (ubootmod layout)

여기부터는 안해도 상관없는데 레드미 펌웨어 까지 싹다 날려서 저장공간을 좀 더 확보할때 쓴다고 합니다. (저는 올렸습니다 ㅋㅋ)

mkdir -p /tmp/aaa
cat /dev/mtdblock0 > /tmp/aaa/BL2.bin
cat /dev/mtdblock1 > /tmp/aaa/Nvram.bin
cat /dev/mtdblock2 > /tmp/aaa/Bdata.bin
cat /dev/mtdblock3 > /tmp/aaa/Factory.bin
cat /dev/mtdblock4 > /tmp/aaa/FIP.bin

ssh창에서 위 명령어로 정펌 영역을 /tmp/aaa 폴더에 백업합니다.

scp -r root@192.168.1.1:/tmp/aaa C:\aaa

윈도우 터미널 창에서 위 scp 명령으로 파일을 다운 받습니다. (나중에 쓸일이 있을지는 모르지만 일단 압축해서 잘 보관했습니다)

OpenWrt u-boot layout 다운로드
uboot layout용 펌웨어를 다운 받습니다.

scp C:\aaa\openwrt-23.05.2-mediatek-filogic-xiaomi_redmi-router-ax6000-ubootmod-initramfs-factory.ubi root@192.168.1.1:/tmp/ax6000-ubootmod-initramfs-factory.ubi

윈도우 터미널창에서 scp 명령으로 공유기에 펌웨어 파일을 업로드 합니다.

ubiformat /dev/mtd7 -y -f /tmp/ax6000-ubootmod-initramfs-factory.ubi

ssh창에서 위 명령어로 플래싱을 합니다.

reboot

ssh창에서 위 명령으로 공유기를 재부팅 합니다.

cat /proc/mtd

재부팅후 다시 ssh에 접속해서 위 명령을 내리면

root@OpenWrt:~# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00100000 00020000 BL2
mtd1: 00040000 00020000 Nvram
mtd2: 00040000 00020000 Bdata
mtd3: 00200000 00020000 Factory
mtd4: 00200000 00020000 FIP
mtd5: 07a80000 00020000 ubi

위와 똑같이 파티션이 잡혀있는지 확인합니다.

opkg 명령어는 공유기가 인터넷 연결 상태여야 합니다.

opkg 아래 부분 작업할때만 잠시 인터넷 선을 ax6000 wan(1번)에 연결해줍니다.

opkg update && opkg install kmod-mtd-rw

ssh창에 위 명령으로 kmod-mtd-rw를 설치합니다.

insmod /lib/modules/$(uname -r)/mtd-rw.ko i_want_a_brick=1

ssh창에 위 명령으로 kmod-mtd-rw를 로드합니다.
이제 인터넷선을 원래 공유기에 연결해도 됩니다.

rm -f /sys/fs/pstore/*

ssh창에 위 명령으로 보류중인 크래시덤프를 삭제합니다. (안하면 uboot가 부팅중 복구모드에 진입할 수 있답니다)

ubidetach -p /dev/mtd5; ubiformat /dev/mtd5 -y; ubiattach -p /dev/mtd5
ubimkvol /dev/ubi0 -n 0 -N ubootenv -s 128KiB
ubimkvol /dev/ubi0 -n 1 -N ubootenv2 -s 128KiB

ssh창에 위명령으로 ubi 포멧하고 ubootenv 볼륨을 만듭니다.

공홈에서 이 항목은 옵션으로 해도 되고 안해도 된다고 하는 부분입니다.

공유기가 벽돌됐을때 openwrt에서 제공되는 방법으로 복구하는 옵션이라고 하는데 검색해보니 공유기 뒤쪽 리셋 버튼 누르면 초기 상태로 복구 해주는 기능이라고 합니다. 물론 이걸 안해도 tftp 명령으로 벽돌복구가 가능하니 꼭 해야 하는건 아니라고 합니다. (하지만 저는 했습니다 ㅎㅎ)

scp C:\aaa\openwrt-23.05.2-mediatek-filogic-xiaomi_redmi-router-ax6000-ubootmod-initramfs-recovery.itb root@192.168.1.1:/tmp/ax6000-ubootmod-initramfs-recovery.itb

윈도우 터미널창에서 위 scp 명령으로 복구 이미지를 업로드 합니다.

ubimkvol /dev/ubi0 -n 2 -N recovery -s 10MiB

공홈에서 받은 initramfs-recovery.itb 파일 용량이 10메가가 넘으면 위 명령어 마지막 용량 부분을 수정해야 합니다. 현재 버전은 약 7메가라 그냥 해도 무방합니다. ssh 창에서 위 명령어를 입력해서 복구영역 파티션을 할당합니다.

ubiupdatevol /dev/ubi0_2 /tmp/ax6000-ubootmod-initramfs-recovery.itb

ssh창에서 위 명령어로 복구 이미지를 적용합니다.

scp C:\aaa\openwrt-23.05.2-mediatek-filogic-xiaomi_redmi-router-ax6000-ubootmod-preloader.bin root@192.168.1.1:/tmp/ax6000-ubootmod-preloader.bin

윈도우 터미널창에서 위scp명령으로 프리로더 이미지를 업로드 하고

mtd write /tmp/ax6000-ubootmod-preloader.bin BL2

ssh창에서 위 명령어로 플래싱을 합니다.

scp C:\aaa\openwrt-23.05.2-mediatek-filogic-xiaomi_redmi-router-ax6000-ubootmod-bl31-uboot.fip root@192.168.1.1:/tmp/ax6000-ubootmod-bl31-uboot.fip

윈도우 터미널창에서 위 scp명령어로 uboot 이미지를 업로드 하고

mtd write /tmp/ax6000-ubootmod-bl31-uboot.fip FIP

ssh창에서 위 명령어로 플래싱을 합니다.

scp C:\aaa\openwrt-23.05.2-mediatek-filogic-xiaomi_redmi-router-ax6000-ubootmod-squashfs-sysupgrade.itb root@192.168.1.1:/tmp/ax6000-ubootmod-squashfs-sysupgrade.itb

윈도우 터미널창에서 위 scp 명령어로 sysupgrade 이미지를 업로드 하고

sysupgrade -n /tmp/ax6000-ubootmod-squashfs-sysupgrade.itb

ssh창에서 위 명령어로 플래싱을 합니다. 플래싱이 완료되면 공유기가 자동으로 재부팅이 되고 OpenWrt 설치 작업이 완료됩니다.

이제 http://192.168.1.1 에 접속해서 무선 설정이라던지 관리자 암호라던지 지정하고 사용하면 됩니다.

 


2024년06월12일 추가

WED (Wireless Ethernet Dispatch) 활성화

무선관련 하드웨어 가속 기능이라고 합니다. 켜는게 좋을거 같아서 저는 일단 켰습니다.

wed에 관한 링크

공유기에 ssh로 접속한 뒤

nano /etc/modules.d/mt7915e

위 명령으로 mt7915e 파일을 열어보면..

위와 같은 상태로 되어 있는데…

wed_enable=Y

를 추가해 줍니다.

공유기를 재부팅 한 뒤에

cat /sys/module/mt7915e/parameters/wed_enable

를 입력했을때 위와 같은 화면이 나오면 적용된거라고 합니다.

아직까진 뭔가 달라진 체감은 못하겠는데 뭐 좋은거라니 일단 씁니다. ㅎㅎ


Comments

“Redmi AX6000에 OpenWrt 올리기”에 대한 24개의 응답

  1. plz help me 아바타

    이글 보고 openwrt 도전 중인데
    혹시 루팅 후 공유기로 scp로 파일 전송할 때 ssh: connect to host 192.168.31.1 port 22: connection refused
    라고 뜨는 건 어떻게 해결하는지 아실까요?
    아무리 찾아봐도 사례가 없네요…
    (공유기 초기화, 복구툴 사용, 펌웨어 덮어쓰기, 재루팅, winscp등 다른 프로그램 사용, curl 명령어를 통한 공유기에 파일 바로 내려받기, 방화벽 포트 점검 등 다 해봐도 무용지물이었어요ㅠ)

    1. 에러 메세지만 보면 ssh쪽 문제인거 같은데요. 192.168.31.1 에 openssh-server가 안깔려있거나 아니면 해당 서버에 포트가 다르다거나 하는 문제로 예상해봅니다.

    2. plz help me 아바타

      컴퓨터에 기능추가나 다운로드 받은 openssh 서버 말고 cmd단에서 바로 활성화시키는 명령어를 통해서 openssh 서버를 다시 설정하고 실행시키니까
      ssh접속이 되면서 비밀번호를 정상적으로 요구하더라구요
      혹시 저같은 케이스가 있으시면 아래 방법을 동시에 다 시행해보시길..!

      1. Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
      2. Start-Service sshd
      3. Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
      4. telnet 에서 passwd로 패스워드 설정
      5. 접속 중인 telnet 종료
      6. winscp 프로그램 다운 후 접속해서 tmp폴더에 파일넣고 플래싱
      (192.168.1.1 / port22 / id=root / pw=위에서 설정한 비번)

      그래도 안되면 다운그레이드를 복구툴로 집어넣어서 처음부터 다시 시작

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다