mirror of
https://github.com/switchbrew/nx-hbloader.git
synced 2025-08-07 01:09:22 +02:00
Build NPDM from JSON configuration file (with enhancements), see details:
- Granted access to all FS permissions. - Granted user/host access to all services. - Kernel caps application type set to applet (2) in order to allow nx-hbloader to run while official apps are suspended. This fixes fatal error 2144-0001 during nx-hbloader startup. **CAVEAT**: This reduces maximum heap size to around 500MB. For this reason this change may be *reverted* or worked around in the future. - Revise handle-duplication workaround to allow official apps to run after having used and closed nx-hbloader.
This commit is contained in:
parent
cb5d9a919c
commit
d6e56d487f
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,6 +1,9 @@
|
||||
build/
|
||||
*.elf
|
||||
*.nso
|
||||
*.npdm
|
||||
*.nsp
|
||||
*.pfs0
|
||||
*.db
|
||||
*.zip
|
||||
*~
|
||||
|
24
Makefile
24
Makefile
@ -95,6 +95,19 @@ export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
|
||||
|
||||
export BUILD_EXEFS_SRC := $(TOPDIR)/$(EXEFS_SRC)
|
||||
|
||||
ifeq ($(strip $(CONFIG_JSON)),)
|
||||
jsons := $(wildcard *.json)
|
||||
ifneq (,$(findstring $(TARGET).json,$(jsons)))
|
||||
export APP_JSON := $(TOPDIR)/$(TARGET).json
|
||||
else
|
||||
ifneq (,$(findstring config.json,$(jsons)))
|
||||
export APP_JSON := $(TOPDIR)/config.json
|
||||
endif
|
||||
endif
|
||||
else
|
||||
export APP_JSON := $(TOPDIR)/$(CONFIG_JSON)
|
||||
endif
|
||||
|
||||
.PHONY: $(BUILD) clean all
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
@ -107,8 +120,7 @@ $(BUILD):
|
||||
#---------------------------------------------------------------------------------
|
||||
clean:
|
||||
@echo clean ...
|
||||
@rm -fr $(BUILD) $(TARGET).pfs0 $(TARGET).nso $(TARGET).elf
|
||||
|
||||
@rm -fr $(BUILD) $(TARGET).nsp $(TARGET).npdm $(TARGET).nso $(TARGET).elf
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
else
|
||||
@ -119,9 +131,13 @@ DEPENDS := $(OFILES:.o=.d)
|
||||
#---------------------------------------------------------------------------------
|
||||
# main targets
|
||||
#---------------------------------------------------------------------------------
|
||||
all : $(OUTPUT).pfs0
|
||||
all : $(OUTPUT).nsp
|
||||
|
||||
$(OUTPUT).pfs0 : $(OUTPUT).nso
|
||||
ifeq ($(strip $(APP_JSON)),)
|
||||
$(OUTPUT).nsp : $(OUTPUT).nso
|
||||
else
|
||||
$(OUTPUT).nsp : $(OUTPUT).nso $(OUTPUT).npdm
|
||||
endif
|
||||
|
||||
$(OUTPUT).nso : $(OUTPUT).elf
|
||||
|
||||
|
Binary file not shown.
128
hbl.json
Normal file
128
hbl.json
Normal file
@ -0,0 +1,128 @@
|
||||
{
|
||||
"name" : "hbloader",
|
||||
"title_id" : "0x010000000000100D",
|
||||
"title_id_range_min" : "0x010000000000100D",
|
||||
"title_id_range_max" : "0x010000000000100D",
|
||||
"main_thread_stack_size" : "0x100000",
|
||||
"main_thread_priority" : 44,
|
||||
"default_cpu_id" : 0,
|
||||
"process_category" : 0,
|
||||
"pool_partition" : 0,
|
||||
"is_64_bit" : true,
|
||||
"address_space_type" : 1,
|
||||
"is_retail" : true,
|
||||
"filesystem_access" : {
|
||||
"permissions" : "0xFFFFFFFFFFFFFFFF"
|
||||
},
|
||||
"service_access" : {
|
||||
"*" : false,
|
||||
"*" : true
|
||||
},
|
||||
"kernel_capabilities" : {
|
||||
"kernel_flags" : {
|
||||
"highest_thread_priority" : 59,
|
||||
"lowest_thread_priority" : 28,
|
||||
"highest_cpu_id" : 3,
|
||||
"lowest_cpu_id" : 0
|
||||
},
|
||||
"syscalls" : {
|
||||
"svcUnknown00" : "0x00",
|
||||
"svcSetHeapSize" : "0x01",
|
||||
"svcSetMemoryPermission" : "0x02",
|
||||
"svcSetMemoryAttribute" : "0x03",
|
||||
"svcMapMemory" : "0x04",
|
||||
"svcUnmapMemory" : "0x05",
|
||||
"svcQueryMemory" : "0x06",
|
||||
"svcExitProcess" : "0x07",
|
||||
"svcCreateThread" : "0x08",
|
||||
"svcStartThread" : "0x09",
|
||||
"svcExitThread" : "0x0A",
|
||||
"svcSleepThread" : "0x0B",
|
||||
"svcGetThreadPriority" : "0x0C",
|
||||
"svcSetThreadPriority" : "0x0D",
|
||||
"svcGetThreadCoreMask" : "0x0E",
|
||||
"svcSetThreadCoreMask" : "0x0F",
|
||||
"svcGetCurrentProcessorNumber" : "0x10",
|
||||
"svcSignalEvent" : "0x11",
|
||||
"svcClearEvent" : "0x12",
|
||||
"svcMapSharedMemory" : "0x13",
|
||||
"svcUnmapSharedMemory" : "0x14",
|
||||
"svcCreateTransferMemory" : "0x15",
|
||||
"svcCloseHandle" : "0x16",
|
||||
"svcResetSignal" : "0x17",
|
||||
"svcWaitSynchronization" : "0x18",
|
||||
"svcCancelSynchronization" : "0x19",
|
||||
"svcArbitrateLock" : "0x1A",
|
||||
"svcArbitrateUnlock" : "0x1B",
|
||||
"svcWaitProcessWideKeyAtomic" : "0x1C",
|
||||
"svcSignalProcessWideKey" : "0x1D",
|
||||
"svcGetSystemTick" : "0x1E",
|
||||
"svcConnectToNamedPort" : "0x1F",
|
||||
"svcSendSyncRequestLight" : "0x20",
|
||||
"svcSendSyncRequest" : "0x21",
|
||||
"svcSendSyncRequestWithUserBuffer" : "0x22",
|
||||
"svcSendAsyncRequestWithUserBuffer" : "0x23",
|
||||
"svcGetProcessId" : "0x24",
|
||||
"svcGetThreadId" : "0x25",
|
||||
"svcBreak" : "0x26",
|
||||
"svcOutputDebugString" : "0x27",
|
||||
"svcReturnFromException" : "0x28",
|
||||
"svcGetInfo" : "0x29",
|
||||
"svcFlushEntireDataCache" : "0x2A",
|
||||
"svcFlushDataCache" : "0x2B",
|
||||
"svcMapPhysicalMemory" : "0x2C",
|
||||
"svcUnmapPhysicalMemory" : "0x2D",
|
||||
"svcGetFutureThreadInfo" : "0x2E",
|
||||
"svcGetLastThreadInfo" : "0x2F",
|
||||
"svcGetResourceLimitLimitValue" : "0x30",
|
||||
"svcGetResourceLimitCurrentValue" : "0x31",
|
||||
"svcSetThreadActivity" : "0x32",
|
||||
"svcGetThreadContext3" : "0x33",
|
||||
"svcWaitForAddress" : "0x34",
|
||||
"svcSignalToAddress" : "0x35",
|
||||
"svcUnknown36" : "0x36",
|
||||
"svcUnknown37" : "0x37",
|
||||
"svcUnknown38" : "0x38",
|
||||
"svcUnknown39" : "0x39",
|
||||
"svcUnknown3a" : "0x3A",
|
||||
"svcUnknown3b" : "0x3B",
|
||||
"svcDumpInfo" : "0x3C",
|
||||
"svcDumpInfoNew" : "0x3D",
|
||||
"svcUnknown3e" : "0x3E",
|
||||
"svcUnknown3f" : "0x3F",
|
||||
"svcCreateSession" : "0x40",
|
||||
"svcAcceptSession" : "0x41",
|
||||
"svcReplyAndReceiveLight" : "0x42",
|
||||
"svcReplyAndReceive" : "0x43",
|
||||
"svcReplyAndReceiveWithUserBuffer" : "0x44",
|
||||
"svcCreateEvent" : "0x45",
|
||||
"svcUnknown46" : "0x46",
|
||||
"svcUnknown47" : "0x47",
|
||||
"svcMapPhysicalMemoryUnsafe" : "0x48",
|
||||
"svcUnmapPhysicalMemoryUnsafe" : "0x49",
|
||||
"svcSetUnsafeLimit" : "0x4A",
|
||||
"svcCreateCodeMemory" : "0x4B",
|
||||
"svcControlCodeMemory" : "0x4C",
|
||||
"svcSleepSystem" : "0x4D",
|
||||
"svcReadWriteRegister" : "0x4E",
|
||||
"svcSetProcessActivity" : "0x4F",
|
||||
"svcCreateSharedMemory" : "0x50",
|
||||
"svcMapTransferMemory" : "0x51",
|
||||
"svcUnmapTransferMemory" : "0x52",
|
||||
"svcConnectToPort" : "0x72",
|
||||
"svcSetProcessMemoryPermission" : "0x73",
|
||||
"svcMapProcessMemory" : "0x74",
|
||||
"svcUnmapProcessMemory" : "0x75",
|
||||
"svcQueryProcessMemory" : "0x76",
|
||||
"svcMapProcessCodeMemory" : "0x77",
|
||||
"svcUnmapProcessCodeMemory" : "0x78"
|
||||
},
|
||||
"application_type" : 2,
|
||||
"min_kernel_version" : "0x30",
|
||||
"handle_table_size" : 512,
|
||||
"debug_flags" : {
|
||||
"allow_debug" : true,
|
||||
"force_debug" : true
|
||||
}
|
||||
}
|
||||
}
|
@ -124,11 +124,7 @@ void getOwnProcessHandle(void)
|
||||
if (R_FAILED(rc))
|
||||
fatalSimple(MAKERESULT(MODULE_HBL, 10));
|
||||
|
||||
rc = smUnregisterService("appletOE");
|
||||
if (R_FAILED(rc))
|
||||
fatalSimple(MAKERESULT(MODULE_HBL, 11));
|
||||
|
||||
rc = smRegisterService(&g_port, "appletOE", false, 1);
|
||||
rc = smRegisterService(&g_port, "hb:ldr", false, 1);
|
||||
if (R_FAILED(rc))
|
||||
fatalSimple(MAKERESULT(MODULE_HBL, 12));
|
||||
|
||||
@ -137,7 +133,7 @@ void getOwnProcessHandle(void)
|
||||
fatalSimple(MAKERESULT(MODULE_HBL, 13));
|
||||
|
||||
Service srv;
|
||||
rc = smGetService(&srv, "appletOE");
|
||||
rc = smGetService(&srv, "hb:ldr");
|
||||
if (R_FAILED(rc))
|
||||
fatalSimple(MAKERESULT(MODULE_HBL, 23));
|
||||
|
||||
@ -160,6 +156,10 @@ void getOwnProcessHandle(void)
|
||||
serviceClose(&srv);
|
||||
svcCloseHandle(g_port);
|
||||
|
||||
rc = smUnregisterService("hb:ldr");
|
||||
if (R_FAILED(rc))
|
||||
fatalSimple(MAKERESULT(MODULE_HBL, 11));
|
||||
|
||||
smExit();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user