Nintendo 3DS "사용자 정의 펌웨어"
LUMA3DS 패치 및 상환 Nintendo 3DS 콘솔 제품군의 모든 모델에서 실행되는 시스템 소프트웨어의 중요한 부분. 그것은 사용자 경험을 크게 향상시키고 수명이 끝날 수있는 3DS를 지원하는 것을 목표로합니다. 기능은 다음과 같습니다.
luma3ds는 boot9strap을 실행해야합니다.
Boot9Strap이 설치되면 최신 릴리스 아카이브를 다운로드하고 SD 카드의 루트에 아카이브를 추출하여 "설치"하거나 Homebrew 메뉴와 함께 LUMA3DS를 업그레이드하고 Certs 번들과 함께 배송됩니다. 기존 파일을 교체하고 필요한 경우 기존 폴더를 병합하십시오.
주요 LUMA3DS 구성 메뉴는 부팅시 SELECT를 눌러 액세스 할 수 있습니다. 구성 파일은 SD 카드의 /luma/config.ini
에 저장됩니다 (ctrnand 파티션에서 ctrnand 파티션의 /rw/luma/config.ini
가 ctrnand 파티션에서 시작된 경우 SD 카드가 누락 될 때 발생합니다).
체인 로더 메뉴는 부팅 또는 구성 메뉴에서 시작을 눌러 액세스합니다. 페이로드는 /luma/payloads
에 위치 할 것으로 .firm
됩니다. 그러한 페이로드가 하나만 있으면 앞서 언급 한 선택 메뉴가 건너 뜁니다. 핫키를 페이로드에 할당 할 수 있습니다 (예 : x_test.firm
부팅시 x를 눌렀을 때 확인).
오버레이 메뉴 Rosalina 에는 기본 버튼 조합이 있습니다 : l+down+select . 더 큰 굴곡 성을 위해 대부분의 Rosalina 메뉴 설정은 자동으로 저장되지 않으므로 "설정 저장"옵션이됩니다.
활성화 된 경우 GDB 포트는 일반 포트의 경우 4000-4002
입니다. info os processes
와 함께 "Extended-Remote"모드에 attach
사용이 지원되고 권장됩니다 (역 엔지니어링의 경우 monitor getmemregions
확인하십시오). Break-on-Start 기능의 포트는 "Extended-Remote"가없는 4003
입니다. DevKitarm-Patched GDB와 IDA Pro ( "스테핑 지원"이 가능하지 않음)는 모두 적극적으로 지원됩니다.
우리는 위키가 있지만 현재는 매우 구식입니다.
LUMA3DS는 여러 구성 요소로 구성됩니다. 각 구성 요소 내의 코드 스타일은 대부분 일관되지만 이러한 구성 요소는 수년에 걸쳐 작성되었으며 관리자가 새로운 구성 요소/프로젝트에서 새로운 코드를 작성하는 방법을 반영하지 않을 수 있습니다.
Process9
코드를 수정하고 다른 모든 사용자 정의 구성 요소를 주입해야합니다. 2015 년 에이 프로젝트를 위해 작성된 최초의 구성 요소였습니다.NATIVE_FIRM
커널을 확장하는 코드 ( Kernel11
). 시작 코드를 연결하여 위에서 언급 한 바레 메탈 로더에 의해 커널에 주입 된 다음 나머지 커널에 연결됩니다. 그 기능으로는 Hooking System Call (SVC), 새로운 SVC 소개 및 Nintendo의 시스템 설계 제한을 우회하기 위해 간편 통신에 연결하는 것이 포함됩니다. 예를 들어 Rosalina가 오버레이 메뉴 항목에서 다른 프로세스를 일시 중지 할 수있는 구성 요소입니다. 이것은 우리가 커널을 완전히 리버스 엔지니어링하지 않았고 원래 Rosalina와 함께 2017 년에 출시 된 시점에 작성되었습니다. "게임 플러그인"지원에 대한 추가 후크는 2023 년에 병합되었습니다.err:f
(치명적인 오류 화면) 재 구현 등. 2017 년 중반에 소개되었으며 지속적으로 변화를 겪고 그 이후로 많은 외부 기여를 받았습니다.loader
를로드하도록 지시 할 수 있습니다. Rosalina에서 Break-on-Start GDB 기능을 제공 할뿐만 아니라 FS 액세스 제어 제한을 적절한 방법으로 들어 올릴 수 있습니다. 2019 년에 소개되었습니다 LUMA3DS에 대한 더 많은 기능과 통합이 여전히 있습니다! 다음은 현재 매장에있는 내용의 목록입니다.
TwlBg
및 AgbBg
의 완전한 재 구현. 이를 통해 DS 및 GBA 게임에서 상단 화면에 대한 훨씬 더 나은 구성 가능성이 높아질 수 있습니다 (구 2DS 제외). 이것은 현재 C ++ 23 (ETA 없음)에서 개인적으로 개발되고 있습니다. 이것은 전체 드라이버 스택을 반도 금속 (IPC가없는 제한 커널)으로 다시 작성해야하기 때문에 매우 어려운 노력이지만, 이것은 LUMA3DS가 보유하고있는 가장 중요한 기능이며 드라이버 SysModule의 재현 사소한 기능입니다.TWL_FIRM
및 AGB_FIRM
의 Process9
의 재 구현Kernel11
회의 Kernel11
에는 새로운 KDebugThread
스레드 생성의 KThread
에 첨부하는 것과 다른 스레드 Null Dereferencing thread->debugThread
관련하여 레이스 조건이 있습니다. 이로 인해 치트 엔진은 항상 많은 스레드를 생성하고 파괴하는 게임을 충돌시킵니다 (Pokémon과 같은).Kernel11
상환 될 때까지 유일한 대안입니다.luma3ds를 구축하려면 다음이 필요합니다.
$PATH
의 Makeromdkp-pacman
설치 (또는 이미 Pacman을 제공하는 분포의 경우 리포지토리 추가) : https://devkitpro.org/wiki/devkitpro_pacman3ds-dev
Metapackage에서 패키지 설치 : sudo dkp-pacman -S 3ds-dev --needed
LUMA3DS 릴리스는 3ds-hbmenu
와 함께 번들되어 있지만 LUMA3DS는 실제로 하나의 단일 파일 인 boot.firm
으로 컴파일합니다. SD 카드의 루트에 복사하기 만하면 (FTPD가 가장 쉬운 방법입니다) 완료됩니다.
이 소프트웨어는 GPLV3의 조건에 따라 라이센스가 부여됩니다. 라이센스 .txt 파일에서 라이센스 사본을 찾을 수 있습니다.
GDB 스터브의 파일은 대신 MIT 또는 "GPLV2 또는 이후 버전"으로 트리플 라이센스가 있습니다.이 경우 파일 헤더에 지정됩니다. PM, SM, PXI 재 구현도 MIT에 따라 라이센스가 부여됩니다.
LUMA3DS는 많은 사람들의 기여와 건설적인 피드백 없이는 그것이 아닌 것이 아닙니다. 특히 감사하고 싶습니다.