[Armadillo:08020] USBメモリ使用時のmountエラーについて

山本 伸夫 email@hidden
2012年 5月 8日 (火) 16:33:50 JST


山本と言います。

220を使用して、USBへの書き込み処理時間を調べるプログラムを作成しています。
前任者確認したサブルーチンを使用して、USBの確認とmountを実行しようとした
のですが、mountでエラーになります(errno=22)

mount関数の引数が不正と言われているようですが、引数が不正とも思われませ
ん。

実行結果からUSBを差し込んだ時に認識されていると思います。
プログラムで無条件にmountしてしまっているのがいけないのでしょうか?

何方か、アドバイスいただけないでしょうか?

プログラム抜粋
----------------------------------------------------------------------
sub()
{
    BYTE    enableUSBDevNum ;
    char    usbMemDevName[ USB_PORT_MAX_SIZE ][ USB_MEMORY_REC_KEY_LEN + 1 ] = { "" } ;
    clock_t start,end;
    int iRet=0;
    int idx,ilop;
    
    printf("USB Log Write Test(16M Log -> 1K Read/Write Test) %s\n", av[1]);

    
    /* アプリケーション構成情報初期化 */
    memset( &gProcInfoTbl, 0, sizeof( gProcInfoTbl ) ) ;    /* 実行プロセス情報構造体 */
//    memset( &gMbTbl, 0, sizeof( gMbTbl ) ) ;                /* Iniファイル構造体 */

    /* 起動時にUSBメモリーデバイス確認 */
    if( SearchUSBMemory( &enableUSBDevNum, usbMemDevName ) == TRUE ) {     /* USBメモリー認識処理成功 */
        /* 現在のUSBメモリー差込数確認 */
        if( enableUSBDevNum >= 1 ) {
            /* USBメモリーをマウントする */
            if( MountUSBMemory( enableUSBDevNum, usbMemDevName ) == TRUE ) {     /* USBメモリーマウント処理成功 */
                
                /* [T.B.D] USBメモリーから設定ファイルを読み込む */
start = clock();
for(idx=0,ilop=0;idx < 10000;idx++)
{
    ilop++;
}
end = clock();
printf("%.2f time\n",(double)(end-start)/CLOCKS_PER_SEC);
                /* [T.B.D] 読み込んだ設定ファイルの内容を書き込む */
                
            }
        }
    }
}
extern BOOL SearchUSBMemory( BYTE *pEnableUSBDevNum, char usbMemDevName[][ USB_MEMORY_REC_KEY_LEN + 1 ] )
{
    BOOL        ret = TRUE ;
    BYTE        usePortNum = 0 ;
    int         keyLen ;
    char        fLineData[ ENABE_DEVICES_FILE_LINE_SIZE + 1 ] ;
    char        *pKeyPos ;
    FILE        *fp ;

printf("SearchUSBMemory start\n");

    /* ファイルオープン */
    fp = fopen( ENABE_DEVICES_FILE, "r" ) ;
    if( fp != NULL ) {
printf("SearchUSBMemory fopen = OK \n");
        /* ファイルの末尾まで読み込み */
        while( ( fgets( fLineData, sizeof( fLineData ), fp ) != NULL ) ) {
printf("SearchUSBMemory fgets = OK \n");
            pKeyPos = strstr( fLineData, USB_MEMORY_REC_KEY ) ;
            if( pKeyPos != NULL ) {
printf("SearchUSBMemory pKeyPos = OK \n");
                keyLen = strlen( pKeyPos ) - 1 ;    /* ファイル改行コード除外文字数 */
                
                /* デバイス名から数字が付いていない名前を、使用デバイスとして選択 */
                if( keyLen == USB_MEMORY_REC_KEY_LEN ) {
printf("SearchUSBMemory keyLen = OK \n");
                    strcpy( usbMemDevName[ usePortNum ], pKeyPos ) ;
                    
                    usbMemDevName[ usePortNum ][ keyLen ] = '\0' ;   /* ファイル改行コード除外 */
                    usePortNum++ ;                                   /* 次のUSBメモリーデバイス検索へ */
                    
                    /* 取得デバイス数チェック */
                    if( usePortNum > USB_PORT_MAX_SIZE  ) {
                        break ;
                    }
                } else {
printf("SearchUSBMemory pKeyPos = NG \n");
                    strcpy( usbMemDevName[ usePortNum ], "\0" ) ;
                }
            }
        }
        
        /* 使用可能ポート数受け取り */
        *pEnableUSBDevNum = usePortNum ;
    } else {
        ret = FALSE ;   /* ファイルオープン失敗 */
printf("SearchUSBMemory fopen = NG %X\n",errno);
    }

    /* ファイルクローズ */
    if( fp != NULL ) {
printf("SearchUSBMemory fclose \n");
        fclose( fp ) ;
    }
printf("SearchUSBMemory end=%d\n",ret);

    return( ret ) ;
}


extern BOOL MountUSBMemory( const BYTE enableUSBDevNum, char
usbMemDevName[][ USB_MEMORY_REC_KEY_LEN + 1 ] )
{
    BOOL        ret ;
    BOOL        mntRet = FALSE ;
    BYTE        usePortNum ;
    int         cmdRet = 0 ;
    char        mntPath[ 8 + 1 ] = { '\0' } ;
    char        devPath[ 10 + 1 ] = { '\0' } ;

printf("MountUSBMemory start\n");
    
    for( usePortNum = 0 ; usePortNum < enableUSBDevNum ; usePortNum++ ) {
        /* 現在有効であるUSBメモリーデバイス名と同じ名前のマウントポジション名で作成 */
        sprintf( mntPath, "%s%s", MOUNT_PATH, usbMemDevName[ usePortNum ] ) ;
        
        /* マウントポジション作成 */
        cmdRet = mkdir( mntPath, S_IRUSR ) ;
printf("MountUSBMemory mount path=%s %d\n",mntPath,cmdRet);
//      if( ( cmdRet == 0      ) ||     /* コマンド成功 */
//          ( cmdRet == EEXIST ) ) {    /* すでにファイルが存在する */
            /* デバイス名作成 */
            sprintf( devPath, "%s%s", DEVICES_PATH, usbMemDevName[ usePortNum ] ) ;
printf("MountUSBMemory device path=%s\n",devPath);

            /* マウント実行 */ 
            cmdRet = mount( devPath, mntPath, "vfat", MS_RDONLY, NULL ) ;
            if( cmdRet == 0 ) {
                DBG_PRINT( "USBMeomry mount() Success MountPath=(%s)\n\n", mntPath ) ;
                mntRet = TRUE ;   /* マウント処理成功 */
            } else {
                DBG_PRINT( "USBMeomry mount() Failure errno=(%d)\n\n", errno ) ;
            }
//      }
    }
    
    /* マウント結果チェック */
    ret = ( mntRet == TRUE ) ? TRUE : FALSE ;
printf("MountUSBMemory end=%d\n",ret);
    
    return( ret ) ;
}
----------------------------------------------------------------------

実行結果
----------------------------------------------------------------------
usb 1-2: new full speed USB device using ep93xxusb and address 6
scsi4 : SCSI emulation for USB Mass Storage devices
  Vendor: Sony      Model: Storage Media     Rev: 1.00
  Type:   Direct-Access                      ANSI SCSI revision: 02
SCSI device sda: 3917824 512-byte hdwr sectors (2006 MB)
sda: Write Protect is off
sda: assuming drive cache: write through
SCSI device sda: 3917824 512-byte hdwr sectors (2006 MB)
sda: Write Protect is off
sda: assuming drive cache: write through
 sda: sda1
Attached scsi removable disk sda at scsi4, channel 0, id 0, lun 0
Attached scsi generic sg0 at scsi4, channel 0, id 0, lun 0,  type 0

usblog>
usblog>1k                             <=== "1k"入力でsub()が実行される
USB Log Write Test(16M Log -> 1K Read/Write Test) (null)
SearchUSBMemory start
SearchUSBMemory fopen = OK
SearchUSBMemory fgets = OK
SearchUSBMemoFAT: invalid media value (0x01)
ry fgets = OK
VFS: Can't find a valid FAT filesystem on dev sda.
SearchUSBMemory fgets = OK
SearchUSBMemory fgets = OK
SearchUSBMemory fgets = OK
SearchUSBMemory fgets = OK
SearchUSBMemory fgets = OK
SearchUSBMemory pKeyPos = OK
SearchUSBMemory keyLen = OK
SearchUSBMemory fgets = OK
SearchUSBMemory pKeyPos = OK
SearchUSBMemory pKeyPos = NG
SearchUSBMemory fclose
SearchUSBMemory end=1
MountUSBMemory start
MountUSBMemory mount path=/mnt/sda -1
MountUSBMemory device path=/dev/sda
USBMeomry mount() Failure errno=(22)

MountUSBMemory end=0
0.00 time
usblog>
----------------------------------------------------------------------

よろしくお願いします。

(^_^)v(^_^)/~(^_^)v(^_^)/~
     山本 伸夫
   email@hidden
(^_^)/~(^_^)v(^_^)/~(^_^)v




armadillo メーリングリストの案内