アプリ起動時に起動SRLパスとFSマウントパラメータをシステム領域にセットするよう変更。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@174 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yosiokat 2007-11-14 11:26:41 +00:00
parent 9939d5cd13
commit 79c9c8017e
8 changed files with 156 additions and 20 deletions

View File

@ -27,7 +27,7 @@ TWL_ARCHGEN = LIMITED
TWL_PROC = ARM9
SRCS = sysmenu_lib.c sysmenu_card.c sysmenu_util.c gameBoot.c ninLogoFunc.c cmn.c \
settingsAPI.c
settingsAPI.c mountInfo.c
TARGET_LIB = libsysmenu$(TWL_LIBSUFFIX).a

View File

@ -0,0 +1,133 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: SYSM_lib.c
Copyright 2007 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#include <twl.h>
#include <twl/nam.h>
#include <sysmenu.h>
// define data-----------------------------------------------------------------
#define DEFAULT_MOUNT_LIST_NUM 7
#define PRV_SAVE_DATA_MOUNT_INDEX 5 // プライベートセーブデータの s_defaultMountInfo リストインデックス
#define PUB_SAVE_DATA_MOUNT_INDEX 6 // パブリック セーブデータの s_defaultMountInfo リストインデックス
// extern data-----------------------------------------------------------------
// function's prototype--------------------------------------------------------
void SYSM_SetBootSRLPath( NAMTitleId titleID );
void SYSM_SetMountInfo( NAMTitleId titleID );
static void SYSMi_ModifySaveDataMount( NAMTitleId titleID );
// global variable-------------------------------------------------------------
// static variable-------------------------------------------------------------
// const data------------------------------------------------------------------
// デフォルトマウント情報リスト
OSMountInfo s_defaultMountList[ DEFAULT_MOUNT_LIST_NUM ] ATTRIBUTE_ALIGN(4) = {
// drive device target pertitionIdx resource userPermission rsvA B archive path
{ 'A', OS_MOUNT_DEVICE_SD, OS_MOUNT_TGT_ROOT, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "sdmc", "/" },
{ 'B', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_ROOT, 0, OS_MOUNT_RSC_WRAM, 0, 0, 0, "nand", "/" }, // ユーザーはこのアーカイブを使えない(RW不可)
{ 'C', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_ROOT, 1, OS_MOUNT_RSC_WRAM, 0, 0, 0, "nand2", "/" }, // ユーザーはこのアーカイブを使えない(RW不可)
{ 'D', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_DIR, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "shared2", "nand2:/shared2" },
{ 'E', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_DIR, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "photo", "nand2:/photo" },
{ 'F', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_FILE, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "dataPrv", NULL },
{ 'G', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_FILE, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "dataPub", NULL },
};
// ============================================================================
//
// マウント情報セット
//
// ============================================================================
// 起動SRLパスをシステム領域にセット
void SYSM_SetBootSRLPath( NAMTitleId titleID )
{
char path[ FS_FILE_NAME_MAX ];
// タイトルIDが"0"の時は、ROMと判断するDSダウンロードプレイの時の挙動は未実装。。。
if( titleID ) {
NAM_GetTitleBootContentPath( path, titleID );
}else {
STD_StrCpy( path, (const char*)"rom:" );
}
STD_CopyLStringZeroFill( (char *)HW_TWL_FS_BOOT_SRL_PATH_BUF, path, OS_MOUNT_PATH_LEN );
OS_TPrintf( "boot path : %s\n", (char *)HW_TWL_FS_BOOT_SRL_PATH_BUF );
}
// システム領域に、ブートするアプリのマウント情報を登録する
void SYSM_SetMountInfo( NAMTitleId titleID )
{
// マウント情報の整理
SYSMi_ModifySaveDataMount( titleID ); // セーブデータ
// SDは全アプリ解放で良い
// PHOTOは全アプリに解放で良い
// マウント情報をシステム領域に書き込み
{
OSMountInfo *pSrc = s_defaultMountList;
OSMountInfo *pDst = (OSMountInfo *)HW_TWL_FS_MOUNT_INFO_BUF;
int i;
for( i = 0; i < DEFAULT_MOUNT_LIST_NUM; i++ ) {
if( pSrc->drive[ 0 ] ) {
MI_CpuCopyFast( pSrc, pDst, sizeof(OSMountInfo) );
pDst++;
}
pSrc++;
}
#if 0
pDst = (OSMountInfo *)HW_TWL_FS_MOUNT_INFO_BUF;
for( i = 0; i < DEFAULT_MOUNT_LIST_NUM; i++ ) {
OS_TPrintf( "mount path : %s\n", pDst->path );
pDst++;
}
#endif
}
}
// タイトルIDをもとにセーブデータ有無を判定して、マウント情報を編集する。
static void SYSMi_ModifySaveDataMount( NAMTitleId titleID )
{
int i;
char saveFilePath[ 2 ][ FS_FILE_NAME_MAX ];
OSMountInfo *pMountTgt = &s_defaultMountList[ PRV_SAVE_DATA_MOUNT_INDEX ];
// セーブデータのファイルパスを取得
NAM_GetTitleSaveFilePath( saveFilePath[ 1 ], saveFilePath[ 0 ], titleID );
// 結果を元にマウント情報を編集。
for( i = 0; i < 2; i++ ) {
FSFile file[1];
FS_InitFile( file );
// ※現在は、セーブファイルを開けるかどうかでセーブファイル有無を確認。
// 最終的にはTMDの情報を参照する形になる
if( FS_OpenFileEx( file, saveFilePath[ i ], FS_FILEMODE_R) ) {
FS_CloseFile( file );
STD_CopyLStringZeroFill( pMountTgt->path,
saveFilePath[ i ],
OS_MOUNT_PATH_LEN );
}else {
pMountTgt->drive[ 0 ] = 0;
}
pMountTgt++;
}
}

View File

@ -16,7 +16,6 @@
*---------------------------------------------------------------------------*/
#include <twl.h>
#include <twl/nam.h>
#include <sysmenu.h>
#include <sysmenu/boot/common/boot.h>
#include "sysmenu_define.h"
@ -32,6 +31,8 @@ typedef struct BannerCheckParam {
}BannerCheckParam;
// extern data-----------------------------------------------------------------
extern void SYSM_SetMountInfo( NAMTitleId titleID ); // マウント情報のセット
extern void SYSM_SetBootSRLPath( NAMTitleId titleID ); // SRL起動パスのセット
// function's prototype-------------------------------------------------------
static BOOL SYSMi_IsDebuggerBannerViewMode( void );
@ -43,6 +44,8 @@ static BOOL SYSMi_CheckEntryAddress( void );
static void SYSMi_CheckCardCloneBoot( void );
static void SYSMi_CheckRTC( void );
static s32 ReadFile(FSFile* pf, void* buffer, s32 size);
// global variable-------------------------------------------------------------
void *(*SYSM_Alloc)( u32 size );
void (*SYSM_Free )( void *ptr );
@ -67,7 +70,6 @@ static BannerCheckParam s_bannerCheckList[ NTR_BNR_VER_MAX ] = {
};
// ============================================================================
//
// <20>‰Šú‰»
@ -474,6 +476,10 @@ OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len);
return AUTH_RESULT_ENTRY_ADDRESS_ERROR;
}
#endif
// マウント情報の登録
SYSM_SetMountInfo ( pBootTitle->titleID );
SYSM_SetBootSRLPath( pBootTitle->titleID );
// N“®<E2809C>B
BOOT_Ready(); // never return;
@ -599,7 +605,7 @@ static void SYSMi_ReadCardBannerFile( void )
BOOL SYSM_IsTWLCard( void );
BOOL SYSM_IsTWLCard( void )
{
return ( SYSM_IsExistCard() && ( SYSM_GetCardRomHeader()->platform_code & PLATFORM_ID_FLAG_TWL ) );
return ( SYSM_IsExistCard() && ( SYSM_GetCardRomHeader()->platform_code & PLATFORM_CODE_FLAG_TWL ) );
}

View File

@ -314,7 +314,7 @@ int DS_DownloadPlayMain(void)
}
if (PAD_DetectFold() == TRUE) { // スリープモードへの遷移
SYSM_GoSleepMode();
// SYSM_GoSleepMode();
}
OS_PrintServer(); // ARM7からのプリントデバッグを処理する

View File

@ -244,7 +244,7 @@ static BOOL CheckBootStatus(void)
#ifndef __SYSM_DEBUG
// if( TSD_IsAutoBoot() ) {
if( 0 ) {
if ( SYSM_IsNITROCard() ) { // NITROカードのみの時はNITRO起動
if ( SYSM_IsExistCard() ) { // NITROカードのみの時はNITRO起動
SYSM_SetBootFlag( BFLG_BOOT_NITRO );
return TRUE; // 「ブート内容決定」でリターン
}

View File

@ -3,7 +3,7 @@ SystemMenu_RED
11/16(金) 1st.リリース予定
・ランチャー
・ランチャー
・カードアプリ取得 ×
・TWLカード起動 ×
・カード活線挿抜処理 ×
@ -13,15 +13,17 @@ SystemMenu_RED
・ISデバッガ対応 ×
・ファームウェアとして正規動作 ×
・アプリ起動時のWRAM-MAP設定 ○
・アプリ起動時のSCFGレジスタロック  ×
  ・アプリ起動時のSDカードアクセス可否  とりあえず解放にしておき、セキュリティ面での検討を行う。
・署名・暗号処理 ×
・鍵管理 ×
・メモリマップFIX ○
・NTRコンポーネントパッチ ×
・本体設定
・本体設定
・言語選択 ○
・TP補正 ○
・日付・時刻設定 ○
・ユーザー情報 ×
・ユーザー情報 △ (欧州文字、絵文字など一部文字は入力できない)
・その他設定 ×
・NANDへの保存 ○
・NTR側(NVRAM)への保存 ○
@ -38,10 +40,10 @@ SystemMenu_RED
・アドレスFIX ×
・ランチャー⇔NANDアプリ間パラメータ引渡し ×
・本体設定データなどの情報 ×
・NAND,SDマウント情報アクセス制限 ×
・NAND,SDマウント情報アクセス制限
・アプリからのHWリセット時パラメータ ×
・DSダウンロードプレイの情報 ×
・NAND内オーバーレイFS △
・NAND内オーバーレイFS △ nand_app_hack.hのFS_IdentifyTitle()を起動時に呼ぶ)
・共有リソースアクセス ×
・タイトル外部リソースアクセス ×
・NANDアプリデバッグ対応 × (現状カードアプリとしてデバッグ)

View File

@ -20,6 +20,7 @@
#include <twl.h>
#include <twl/os/common/format_rom.h>
#include <twl/nam.h>
#include <sysmenu/banner.h>
#include <sysmenu/sysmenu_work.h>
#include <sysmenu/settings.h>
@ -50,8 +51,8 @@ typedef struct TitleFlags {
// タイトル情報
typedef struct TitleProperty { // この情報は、ランチャー時には認証通ってないけど、起動時には認証通すので大丈夫だろう。
u64 titleID; // タイトルIDTitleID_Hiで起動メディアは判定できる
void *pBanner; // バナーへのポインタ(固定長フォーマットなら偽造されても大丈夫だろう。)
NAMTitleId titleID; // タイトルIDTitleID_Hiで起動メディアは判定できる
void *pBanner; // バナーへのポインタ(固定長フォーマットなら偽造されても大丈夫だろう。)
TitleFlags flags;
u8 rsv[ 2 ];
}TitleProperty;
@ -59,7 +60,7 @@ typedef struct TitleProperty { //
// リセットパラメータ
typedef struct ResetParam {
u64 bootTitleID; // 起動するタイトルがあるかあるならそのタイトルID
NAMTitleId bootTitleID; // 起動するタイトルがあるかあるならそのタイトルID
u32 rsv_A;
TitleFlags flags;
u8 rsv_B[ 2 ];
@ -123,12 +124,6 @@ extern u32 SYSM_GetDayNum( u32 year, u32 month ); //
extern BOOL SYSM_IsLeapYear100( u32 year ); // 指定された年がうるう年か調べる
void SYSM_GoSleepMode( void );
inline BOOL SYSM_IsNITROCard( void )
{
return TRUE;
}
#ifdef __cplusplus
}
#endif