[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 メーリングリストの案内