스위치 커펌 가이드 - Hekate + Android 듀얼부팅 가이드
스위치에서 안드로이드 듀얼부팅 작업을 어떻게 하면 쉽게 쓸 수 있을까 고민도 많이 해보고 16기가 SD만 별도로 구매해서 통복사도 시도해 봤지만, 결국 리눅스에서 진행하는 방법이 가장 좋은 듯 합니다.
먼저 SD카드에 안드로이드를 먼저 설치해야하는데, 이 설치 과정에서 스위치 SD카드의 모든 데이터가 포맷되는 구조이기에 백업에 대한 대책이 필수입니다.
각자 알아서, PC에 하드백업과, 별도 SD에 에뮤낸드 클론을 철저하게 먼저 진행하시길 바랍니다.
듀얼부팅 가이드는 상당히 긴 시간이 걸리는 작업이 될겁니다.
시간적 여유가 충분할때 진행할 수 있도록 합니다.
먼저 가이드를 끝까지 읽어보고 정말 내게 필요한 것인지 다시한번 생각해 보시길 바랍니다.
스위치 SD카드의 모든 파일에 대한 백업이 필요할 수 있습니다.
다시 모든걸 설치 해야할수도 있다는 위험을 감수하고 진행하셔야 합니다.
에뮤낸드의 경우 여분의 SD카드를 이용해서 EaseUS프로그램의 클론메뉴로 백업해두셔야합니다.
위 가이드에서 파티션 클론(복제)에 대해 알 수 있습니다.
1. SD카드 포맷하기
먼저 파티션을 관리해주는 EaseUS등으로 백업이 완료된 기존 SD카드를 포맷하도록 하겠습니다.
위 사이트에서 다운로드 가능합니다.
무료 버전으로 다운로드 해서 설치하고 실행해주세요.
과거 에뮤낸드 작업시에도 쓰였던 툴이니 한번 설치해두시는 것이 좋습니다.
(1) 128G SD카드인 Disk3번을 누릅니다.
디스크 번호는 사용하시는 PC 환경에 따라 다를수 있으니 반드시 용량을 확인합니다.
위 파티션은 에뮤낸드 32기가가 생성되어 있는 SD카드입니다.
(2) Delete All을 누릅니다.
정말 삭제할꺼냐고 물어보는데 OK를 누릅니다.
좌측상단의 Excute 1 Operation 을 눌러줍니다.
이후 팝업창에서 Apply를 눌러 작업을 실행해줍니다.
모든 파일이 삭제되었습니다.
안드로이드 설치과정중에 SD카드를 포맷하기에 별도로 진행을 안해도 무관한 작업입니다만,
원활한 진행을 위해 포맷을 굳이 해봤습니다.
위 사진의 빈 파티션으로 이번엔 안드로이드를 설치하도록 하겠습니다.
위 포맷 작업은 FAT32로 바로 포맷을 도와주는 guiformat 프로그램을 써도 무방합니다만 추후 에뮤낸드 복원등에도 위 툴을 사용하기 때문에 굳이 사용해봤습니다.
2.안드로이드 리니지OS 신규 설치
안드로이드 설치과정은 기존 단독 설치 과정과 동일합니다.
이 과정은 기존에 사용하는 메인 SD카드에 설치하는 것입니다.
안드로이드 설치과정은 위 가이드를 참고해서 설치해야합니다.
안드로이드 이미지를 메인으로 사용하실 SD카드에 작업해야합니다.
가이드엔 32기가 기준이지만 한 SD카드에서 구동해야하니 입맛에맞게 16G이나 32G로 진행하시기 바랍니다.
reboot2payload_final.zip 이 추가되었으니 설치하지 못하신 분들 역시 참고하셔서 추가로 설치하도록 합니다.
저는 이번엔 16기가 크기의 안드로이드 이미지로 설치를 진행하도록 하겠습니다.
일단 128G SD카드에 안드로이드 이미지를 구워버립니다.
설치가 완료되면 취소버튼은 절대 누르시면 안됩니다. :)
헤카테로 부팅해서 More Conigurations 메뉴를 통해 안드로이드 진입이 가능해집니다.
가이드를 참고해서 부팅중 볼륨 +로 TWRP로 진입한뒤 안드로이드 관련 추가 설치파일 4가지를 모두설치합니다.
오늘 가이드에 내용이 추가된 reboot2payload_final을 빠뜨리지 마시고 설치하시기 바랍니다.
SD 카드에 리니지 OS 설치가 마무리 되었습니다.
부팅까지 완료되면 일단 작업 완료입니다.
결과적으로 이과정을 거치면 SD카드가 128G 용량이어도 16기가만 인식되는 SD카드가 됩니다.
이후 리눅스에서 파티션을 재조정 할 예정이니 당황하지 마시고 전원을 끄고 SD카드를 분리합니다.
3. Gparted live 이미지 다운로드
데비안 계열 리눅스에 추가로 Gparted가 설치된 라이브 이미지입니다.
보통은 USB에 설치해서 USB 부팅으로 라이브 모드를 사용하나, 편의를 위해 VMware에서 구동 하겠습니다.
https://gparted.org/download.php 사이트에서 제공하는 리눅스 이미지를 다운로드 받겠습니다.
https://downloads.sourceforge.net/gparted/gparted-live-1.0.0-3-i686.iso
위 링크의 바로가기를 눌러 다운로드가 가능합니다.
PC에 위 이미지 파일을 다운받으면, 찾기쉽게 바탕화면 등에 보관합니다.
4. VMware 플레이어 설치
스위치의 안드로이드 듀얼부팅 작성과정에는 반드시 리눅스 시스템이 필요합니다.
위 사이트에서 VMware 워크스테이션 플레이어버전을 설치합니다.
개인에겐 무료지만 회사 사무실에서는 라이센스가 필요한 버전이니 집에서만 설치하도록 합니다.
지금 다운로드를 눌러서 다운로드를 진행합니다.
그렇다고 멀쩡한 PC에 리눅스를 설치하거나, USB 부팅을 하게되면 PC사용 불가로 가이드를 보면서
진행이 어려울테니 PC에 VMware를 이용해서 별도로 가상 리눅스를 실행하는 구조입니다.
VMware 작동을 위해 보드에 따라 CPU 가상화 옵션을 반드시 활성화 해주셔야합니다.
메인보드의 제조사명과 본인의 CPU(인텔,AMD) 에 맞는 옵션을 켜주시길 바랍니다.
설치를 시도하자, 바로 재부팅을 권하는군요.
먼저 재부팅을 하고 진행하도록 하겠습니다.
후다닥 재부팅을 진행합니다.
간단하게 Next를 연타하다보면 설치가 완료됩니다.
Finish를 눌러 설치를 완료합니다.
설치가 완료되어, 바탕화면에 아이콘이 추가되었습니다.
실행해보면 라이센스 없는 프리버전을 선택하도록 합니다.
VMware 장사꾼들이 팝업을 계속 띄웁니다.
Skip 버튼을 눌러 닫습니다.
4. GParted 가상머신(리눅스) 생성
단축키인 키보드의 Ctrl + N 을 누르거나,
좌측상단의 Player -> file -> New Virtual Machine을 클릭합니다.
(1) 먼저 Installer disc image file 항목의 Browse를 누릅니다.
(2) gparted-live-1.0.0-3-i686.iso 이미지를 선택하고 (3) 열기를 누릅니다.
* Linux kernel was updated to 5.2.9-2.gparted-live-1.0.0-3-i686.iso의 리눅스 베이스 커널버전은 5.2라고 하는군요.
게스트 OS Linux 에 version 항목은 Ohter Linux 5.x or later kernal 64-bit 항목을 선택하고 Next를 누릅니다.
다음은 가상 PC의 설치 위치를 설정합니다.
기본경로에 설치해도 문제될것은 없습니다만 추후 삭제시 경로 문제로 곤란함이 생기실수 있습니다.
따라서 깔끔하게 C드라이브에 vmware 라는 폴더를 생성하고 그 폴더에 설치 하도록 설정했습니다.
다음은 가상머신의 용량을 선택합니다.
단순히 리눅스 이미지를 구동하는 것으로 기본값인 8기가로 충분합니다.
그리고 가상머신의 파일형태를 관리하기 편하도록 싱글 파일로 생성하도록 하겠습니다.
Store virtual disk as a single file을 체크하고 Next를 누릅니다.
마지막으로 제원에 대해 보여주는데 딱히 손댈 것이 없습니다. Finish를 누릅니다.
Play virtual machine을 눌러 실행합니다.
최근에 포맷을 했더니, 제 PC에는 AMD CPU 가상화가 꺼져 있어 위와 같은 메세지가 나타납니다.
사용중인 PC에 맞게 해당 옵션을 활성화 해주셔야합니다.
기가 바이트 메인보드에 라이젠 CPU인 경우엔 위 포스트를 참고하시기 바랍니다.
다른 인텔 CPU, 아수스, 애즈락 등의 메인보드인 경우 본인의 환경에 맞는 CPU가상화를 켜는 방법을 검색을 통해 활성화 하시기 바랍니다.
5. 리눅스 가상머신에서 SD카드 파티션 작업하기
CPU 가상화까지 클리어한다면 이제 Play virtual machine을 눌러 실행이 가능하실겁니다.
VMware 드라이버 설치 메세지가 나오는데 Remind Me Later를 눌러 무시합니다.
가장 처음의 메뉴인 Gparted Live를 엔터로 선택하거나 기다리시면 리눅스가 실행됩니다.
기본값인 Don't touch keymap를 선택하고 엔터를 누릅니다.
language - 리눅스의 기본 언어 설정을 묻는데, 기본값인 영어로 설정하기 위해 엔터를 쳐줍니다.
한번 더 모드를 묻는데 무시하고 다시한번 엔터를 눌러줍니다.
그러면 잠시후 데비안 리눅스에서 Gparted가 실행됩니다.
기본으로 잡아놓은 8기가 영역을 보여주고있습니다.
6. 안드로이드가 설치된 SD 카드를 가상머신에 연결
이제 스위치에서 안드로이드를 설치했던 SD카드를 PC에 연결합니다.
호스트 PC와 가상머신중에 어디에 연결할것이냐 물어봅니다.
(2) Connect to a virtual machine(가상 머신에 연결하기) 을 (2) OK 버튼을 눌러 가상머신에 USB를 연결합니다.
위 참고 사진은 USB 3.0포트에 연결했더니 지원하지 않는 디바이스라고 합니다.
다시 일반적인 USB 2.0 포트에 연결합니다.
리눅스에 연결되고 나면, 연결한 SD카드의 전체 영역이 활성화 되지 않은 상태라며,
고칠것이냐고 물어봅니다. 반드시 Fix를 눌러 줍니다.
만약 재연결 등으로 Fix 선택화면이 뜨지않아 새로고침이 필요한 경우
위 GParted 메뉴를 눌러 Refresh Devices를 눌러주세요.
7. Gparted를 통해 파티션 수정
이제 Gparted에서 디스크를 선택해야합니다.
우측 상단의 드라이브 모양을 눌러 안드로이드가 설치된 SD카드를 선택합니다.
위 사진의 경우 /dev/sdb 119.25Gib - 128기가 항목이 해당됩니다.
자 이제 드디어 안드로이드가 설치된 SD카드가 나타났습니다.
안드로이드가 무려 7개의 파티션을 사용중인 것을 볼 수 있습니다.
가장 우측의 흰색 파티션 영역이 앱들이 설치되는 안드로이드 내부 메모리 영역입니다.
마우스 오른쪽 버튼을 클릭해서 Resize/Move (크기조절/이동) 항목을 클릭합니다.
위와 같은 팝업이 나타납니다.
(1) 파티션의 박스를 잡아서 맨 우측 끝으로 이동(드래그)해줍니다.
(2) 만약 혹시라도 안드로이드 내부 메모리 사이즈를 수정하고 싶다면, 위 New size 영역을 수정하시면 됩니다.
테스트로 안드로이드의 낸드 사이즈는 10기가로 변경해봤습니다.
Resize/Move 버튼을 눌러 마무리합니다.
이번에도 경고창이 뜨는데 무시하고 OK를 눌러줍니다.
총 7개의 파티션 중에 하나는 이동해서 우측 끝으로 붙여준 상태입니다.
이후 나머지 6개 파티션 중, 5개 파티션만 반복해서 우측 끝으로 옮겨보도록 하겠습니다.
다음 파티션도 마찬가지로 Resize/Move 메뉴를 클릭합니다.
이번에는 사이즈는 따로 건드리지 않고 마우스로 드래그해서 위치만 우측 끝으로 옮겨줍니다.
그리고 Resize/Move를 눌러주겠습니다.
이렇게 5개의 파티션을 모두 사이즈 변경없이,
반복해서 우측끝으로 파티션 위치만 이동시켜줍니다.
첫번째 파티션을 제외하고 나머지 6개 파티션을 모두 우측으로 이동시킨 상황입니다.
이제 첫번째 파티션을 늘려서 메인으로 사용할텐데 이는 안드로이드 설치시 커펌관련 헤카테 파일들이 들어갈수 있었던 별도의 2G의 파일 시스템 파티션입니다.
첫번째 파티션의 오른쪽 클릭 후 Resize/Move 메뉴로 남은 영역을 모두 채우도록 하겠습니다.
이번엔 이동이 아니라, 박스의 우측 끝의 화살표를 잡아 드래그 해서 남은 메모리를 전부 꽉꽉 채우도록 합니다.
그리고 Resize/Move를 눌러줍니다.
파티션을 이동하거나 늘리다보면 위처럼 1메가바이트 또는 6메가바이트 등의 자투리 공간이 생깁니다.
아마도 파티션이 기가바이트 단위로 안끊겨서 빠지는건지 생겨버리고 없애지도 못하는데, 크게 신경안쓰셔도 됩니다.
EaseUS같은 툴과 마찬가지로 파티션 수정 작업이 예약되었을뿐, 실제로 SD카드에 반영은 되지 않았습니다.
상단의 녹색 체크버튼을 누르고 Apply를 눌러 최종확정을 하도록 합니다.
SD카드 파티션 작업이 진행되는 동안 잠시 차 한잔 하며 기다리면 되겠습니다.
안드로이드 메인 메모리를 Resize한 덕분에 저는 시간이 더 걸릴듯 합니다.
약 15분 경과 후 드디어 작업이 완료되었습니다.
결과적으로 안드로이드가 설치된 파티션들은 모두 우측으로 바짝 밀어 놓았습니다.
첫번째 파티션은 늘려서 105GB (파일시스템 영역), 스위치 커펌 관련 파일들을 사용 가능하게 됩니다.
만약 위 과정에서 에뮤낸드를 고려하신다면, 위처럼 미리 30기가를 빼고 FAT32로 포맷하는 방법도 있겠습니다.
그러나 완성 후 윈도우의 EaseUS로 쉽게 파티션 재조정이 가능하니,
굳이 복잡하게 GParted 에서 진행하지는 않도록 하겠습니다.
8. GDISK를 이용한 하이브리드 MBR 생성 작업
우선 GParted는 (1) 최소화를 시키겠습니다.
현재 스위치의 파티션 작업은 모두 끝났으나, 이대로는 스위치에서 장착해봐야 인식자체가 되질 않습니다.
(2) 디스크의 경로를 기억해둡니다. 사진엔 /dev/sdb 입니다.
(1) 이번엔 가상머신의 바탕화면에 있는 터미널을 더블 클릭해서 실행해줍니다.
(2) 기본 유저로 터미널이 실행됩니다.
sudo gdisk /dev/sdd
위의 명령어를 터미널의 오른쪽 클릭후 Paste 메뉴로 복사해서 붙여넣...으려고 했더니
VM 웨어툴을 리눅스에 설치를 안하는 바람에 클립보드 공유가 안되는군요.
직접 키보드로 sudo gdisk /dev/sdb 타이핑해서 넣었습니다.
이번엔 커맨드를 물어봅니다.
커맨드는 소문자 r 을 입력합니다.
recovery/transformation 커맨드를 물어봅니다.
해외 원문에서 "o"& "p"를 명령으로 입력하여 MBR 및 파티션 테이블을 출력 할 수 있습니다. 라고하는데
이 부분은 단순 확인용으로 보이는데 내용을 잘 모르겠습니다.
따라서 그냥 커맨드는 소문자 o 를 입력합니다.
o입력 후 이번엔 커맨드를 소문자 p 를 입력합니다.
파티션 리스트의 hos_data부분의 Number만 기억하도록 합니다.
105기가 파티션의 Number 가 1번이군요.
하이브리드 MBR을 생성하는 명령어는 h라고 하는군요.
recovery/transformation 커맨드엔 소문자 h 를 입력합니다.
이번엔 하이브리드 MBR을 생성할 번호(Sequance)를 입력하라고 합니다.
아까 봤던 Number 그러니까, 파티션명이 hos_data인, 숫자 1번을 입력합니다.
숫자의 경우 키보드 우측에 넘버 패드 쪽을 누르지마시고 가능하면 qwer등의 키 위에 위치한 일반 숫자버튼을 눌러주세요.
Place EFI GPT parition first in MBR? 라고 물어보면 대문자 N 을 입력합니다.
Enter an MBR hex code 항목은 대문자 EE를 입력합니다.
Set bootable flag?
대문자 N 을 입력합니다.
마지막으로 Unused partition space found. Use one to protect more partitions? 항목은 대문자 N 을 입력합니다.
다시 한번 순서대로 커맨드를 소문자 o 와 p 를 입력해보면 뭔가 MBR 파티션이 추가된것이 보입니다.
이제 recovery/transformation 커맨드 항목에 소문자 w 를 입력해서 작성하도록 하겠습니다.
w를 입력하면 Do you want to proceed?(정말 실행 할꺼니?) 라고 물어볼텐데 대문자 Y를 입력합니다.
마지막으로 The operation has completed successfully. 라는 메세지가 나타나면 드디어 모든 과정이 끝났습니다.
VMware는 이제 종료하도록 합니다.
(1) 닫기를 누르면 팝업이 나올텐데 가상머신을 (2) 일시정지 하도록 하겠습니다.
가상머신과의 윈도우 호스트 PC로 USB가 다시 연결됩니다.
아까 작업했던 안드로이드 파티션을 못알아먹고 포맷 알림을 띄웁니다.
윈도우에서 못알아먹을뿐 실제로 파일이 존재하는 파티션입니다.
모두 취소로 닫도록 합니다.
포맷을 누르는 순간 에뮤낸드나 안드로이드는 바이바이 하게됩니다.
9. 스위치 헤카테 커스텀 메뉴가 적용된 커스텀 펌웨어 설치
현재 메인 드라이브에는 안드로이드 실행과 관련된 파일만 존재합니다.
안드로이드 실행롬의 경우 switchroot_android 폴더에 들어있습니다.
안드로이드 쪽 헤카테 메뉴 추가 코드를 한번 보겠습니다.
[Switchroot Android]
payload=switchroot_android/coreboot.rom
위처럼 작성해서 bootloader폴더의 hekate_ipl.ini 파일에 기술하면 안드로이드 부팅이 추가됩니다.
그리고 블로그에 올라와있는 커펌 가이드 - 커스텀 헤카테 메뉴를 적용하신 분은 아래 코드를 참고하시기 바랍니다.
{--- Android ---}
[Android]
icon=bootloader/res/icon_android.jpg
payload=switchroot_android/coreboot.rom
{}
기존 커펌 백업이있는 경우 해당 자료를 그대로 쓰시고, 커스텀 헤카테 설정만
SD카드의 bootloader -> hekate_ipl.ini 파일만 위 파일로 교체 후 사용하셔도 됩니다.
혹시 파일 꼬임방지를 위해 헤카테에 안드로이드 부트메뉴를 추가한 클린한 한방팩을 별도 첨부합니다.
커펌 관련 파일들을 모조리 복사해서 넣어줍니다.
모두 복사가 되면 위와 같이 기존 커펌 자료 + switchroot_android 폴더가 될겁니다.
모든 작업이 완료되었습니다.
10. 안드로이드 부팅 및 테스트
SD카드를 스위치와 연결합니다.
일단 에뮤낸드는 설치되어 있지 않기에, Launch 항목에서 시스낸드 아트모스피어로 부팅해보겠습니다.
파티션은 정상적으로 인식되어서, sept도 실행되고 모두 순조롭습니다.
시스낸드 커펌으로 부팅 성공했습니다.
앨범으로 이동해서 재부팅을 해봅니다.
헤카테 로더등을 통해 다시 헤카테 메뉴로 돌아옵니다.
이번엔 대망의 안드로이드로 실행합니다.
안드로이드 부팅에 대한 커스텀 부트로고도 별도로 넣을수 있겠습니다.
아직 따로 세팅을 안해서 기본 값인 아트모스피어 커스텀 부트 로고가 나옵니다.
속도는 SD카드를 사용하는 부팅이다보니 EMMC와 비교할바는 안됩니다.
아무래도 전체적으로 느립니다.
그래도 돌아가는 것에 감사하며 기다리다보면 리니지 로고가 완성됩니다.
일단 부팅 후엔 그럴싸하게 돌아갑니다.
플레이스토어를 실행해서, 플레이서비스를 업데이트 하고나면...
구글 아이디로 로그인을 하고, 플레이스토어도 본격적으로 사용가능합니다.
그러나 화면회전이 인식이 제대로 안되고 멍을 때리는 경우가 많습니다.
플레이스토어에서 Rotation Control을 검색해서 설치하시면 좀 편해집니다.
실행후 옵션 두개를 켜주시면 됩니다.
상단 스테이터스 바에서 화면 회전방향의 설정이 가능해지니 참고바랍니다.
플레이스토어에서 간단하게 몇가지만, 스위치에 설치해봤습니다.
젤리핀같은걸로 영상 감상용으로 써볼까 라고 하신다면...
미디어 재생기능은 테그라X1이 워낙에 괜찮아서, 별 문제없이 가능할듯 합니다.
안드로이드 게임플레이용으로는 다소 무리가 있습니다.
최근 출시된 달빛조각사라는 게임을 돌려 보았습니다.
배그는 하옵으로 쌩쌩 되는데 이상하게 이녀석은 로딩만 10분 넘게 하길래 종료하고,
재실행하니 또 구동은 되는데, 간간히 렉이 심합니다.
역시 SD카드로는 읽기속도 때문에 처리가 시원찮은지 안드로이드를 위에서 돌리기엔 무리가 있습니다.
그럼에도 SD카드를 저장소로 이 정도까지 구동되는 스위치를 되려 칭찬하고 싶기도 합니다.
마지막으로 재부팅을 위해 적용한 Reboot to payload 덕에 정상적으로 재부팅은 됩니다.
아쉬운 점으로는 재부팅후 헤카테 메뉴로 가면 더 좋았을 것을 거기까진 못하는듯 합니다.
재부팅 로직이 atmosphere 폴더 안에 rebootpayload.bin을 그냥 실행시켜주는게 아닌듯 합니다.
직접 안드로이드 부팅을 위한 작업을 추가로 더 진행해주는듯 했습니다.
그냥 자동으로 안드로이드로 부팅까지만 해주는 정도에서 그쳤다는 단점이 있었습니다.
이래서는 듀얼부팅의 의미가 애매해집니다.
RCM을 사용하는 파트가 완전히 빠져야 듀얼부팅이 의미가 있는데, 아직 방법을 못찾았습니다.
emmc모듈까지 중국에서 파는 마당이기에, 스위치의 내장 메모리에 설치되는 그날까지 기다려보기로 하겠습니다.
속도도 100%만족스럽지 못하고, 한참 철지난 안드로이드폰 정도의 속도 정도를 뽑아주는데, 역시나 SD카드로 구동하는것 때문인지, 구동하는 내내 답답함이 있습니다.
따라서 메인시스템에서 안드로이드를 굳이 듀얼로 사용할 만한 필요성을 아직 못느꼈습니다.
다만 스위치를 사용하는 자취생이 IPTV가 없어서, 미디어 시청용으로 ALL TV라던가, 플렉스나 젤리핀 구동용으로 사용한다면, 독 모드 때문에라도 쓸만할 수도 있으려나? 정도 수준입니다.
시원하게 추천해드릴 만한 작업은 아니었습니다.
도움이 되시길 바랍니다.
감사합니다.