우분투에서 하니 usbfs로 마운트가 되지 않고 /proc/bus/usb 를 찾을 수 없다는 에러만 나타낸다.
그래서 mkdir로 생성해주려고 해도 배째는데, 아래와 같이 ln 으로 연결해주니 된다!!
대신 기존의 /proc/bus 는 통채로 사라지니 주의해야 한다.
차라리 /sys/kernel/debug/usb/devices 를 들어가서 보는게 나을지도 모르겠다.
/: Bus 05.Port 1: Dev 1, Class=root_hub, Drv=ehci_hcd/8p, 480M
|_ Port 1: Dev 7, If 0, Prod=ST3250310AS, Class=stor., Drv=usb-storage, 480M
|_ Port 2: Dev 6, If 0, Prod=SKYMIRROR, Class=stor., Drv=usb-storage, 480M
/: Bus 04.Port 1: Dev 1, Class=root_hub, Drv=uhci_hcd/2p, 12M
/: Bus 03.Port 1: Dev 1, Class=root_hub, Drv=uhci_hcd/2p, 12M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Drv=uhci_hcd/2p, 12M
|_ Port 1: Dev 2, If 0, Prod=USB Optical Mouse, Class=HID, Drv=usbhid, 1.5M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Drv=uhci_hcd/2p, 12M
#include "stdio.h"
#include "string.h"
#include "net/if.h"
#include "sys/ioctl.h"
//
// Global public data
//
unsigned char cMacAddr[8]; // Server's MAC address
static int GetSvrMacAddress( char *pIface )
{
int nSD; // Socket descriptor
struct ifreq sIfReq; // Interface request
struct if_nameindex *pIfList; // Ptr to interface name index
struct if_nameindex *pListSave; // Ptr to interface name index
//
// Initialize this function
//
pIfList = (struct if_nameindex *)NULL;
pListSave = (struct if_nameindex *)NULL;
#ifndef SIOCGIFADDR
// The kernel does not support the required ioctls
return( 0 );
#endif
//
// Create a socket that we can use for all of our ioctls
//
nSD = socket( PF_INET, SOCK_STREAM, 0 );
if ( nSD < 0 )
{
// Socket creation failed, this is a fatal error
printf( "File %s: line %d: Socket failed\n", __FILE__, __LINE__ );
return( 0 );
}
//
// Obtain a list of dynamically allocated structures
//
pIfList = pListSave = if_nameindex();
//
// Walk thru the array returned and query for each interface's
// address
//
for ( pIfList; *(char *)pIfList != 0; pIfList++ )
{
//
// Determine if we are processing the interface that we
// are interested in
//
if ( strcmp(pIfList->if_name, pIface) )
// Nope, check the next one in the list
continue;
strncpy( sIfReq.ifr_name, pIfList->if_name, IF_NAMESIZE );
//
// Get the MAC address for this interface
//
if ( ioctl(nSD, SIOCGIFHWADDR, &sIfReq) != 0 )
{
// We failed to get the MAC address for the interface
printf( "File %s: line %d: Ioctl failed\n", __FILE__, __LINE__ );
return( 0 );
}
memmove( (void *)&cMacAddr[0], (void *)&sIfReq.ifr_ifru.ifru_hwaddr.sa_data[0], 6 );
break;
}
//
// Clean up things and return
//
if_freenameindex( pListSave );
close( nSD );
return( 1 );
}
int main( int argc, char * argv[] )
{
//
// Initialize this program
//
bzero( (void *)&cMacAddr[0], sizeof(cMacAddr) );
if ( !GetSvrMacAddress("eth0") )
{
// We failed to get the local host's MAC address
printf( "Fatal error: Failed to get local host's MAC address\n" );
}
printf( "HWaddr %02X:%02X:%02X:%02X:%02X:%02X\n",
cMacAddr[0], cMacAddr[1], cMacAddr[2],
cMacAddr[3], cMacAddr[4], cMacAddr[5] );
//
// And exit
//
exit( 0 );
}