Infinite USB Memory project

IUM (Infinite USB Memory) project was created for Infinitec company, developing an innovative solution to seamlessly distribute high-volume data over Wi-Fi networks with an impression of locally connected USB flash drive of infinite size being plugged to the PC or other device. The idea of this innovative solution is to plug a Wi-Fi-enabled USB device which represents itself as an ordinary USB Flash drive to the client PC and using this device access files shared on remote PCs via Wi-Fi.

Flash drives of high volumes are still relatively expensive compared to built-in hard disk drives, which are very cheap nowadays, thus having actual data stored on HDDs and being available via simulated USB Flash drive saves money significantly.

Of course there are many already existing means of sharing files over networks via file shares, FTP and HTTP servers, etc, but the problem with them is that they require configuration on the client end, which is not always possible, for instance, if the client side is PS3 or X-box or even TV. Many modern devices can access USB Flash drives, while not all of them have access to other file sharing models. There are also security and compatibility concerns with traditional file sharing.

Creation of such hardware & software solution helps overcome all the issues tied to file sharing in corporate and home networks and also reduce the cost of data storage without any impact to data accessibility.

Besides, modern Wi-Fi technologies allow high-speed data transfer between Wi-Fi nodes, which allows watching Blu-ray quality video streamed over Wi-Fi as if it were stored on a USB Flash drive – without a lag.

Solution

847464884f9ca2b425edafff76f4d0f6

The solution consists of several software and hardware parts. USB device with Wi-Fi chip and ARM CPU on it hosts small-size Linux image which boots when device is connected to USB slot. The requirements for the Linux image is to run in RAM-limited environment since USB devices only have 16 MB RAM on board. It should also run on a relatively weak hardware since overheating bears a potential danger for such small-size devices. Linux has built-in fixed FAT table (VFAT) which it uses as a base and two drivers: one for Wi-Fi connectivity and another one for modifications of the built-in FAT to provide information about files shared on the host PC. Windows service runs on the host PC and communicates with Linux driver to inform it about available shared files, modifications made to them and to exchange actual data between host and client. Configuration panel on host PC which allows sharing files and folders and is responsible for other configuration such as FAT size, allow/deny write operations, ect. The configuration panel allows sharing files, control over what files and folders are shared on the host and available to clients, how much space can be used for file sharing, provides Wi-Fi configuration options and provides access logs and statistics such as connection speed, transmitted data size, etc. Diagnostic tool served for verification of software configuration, networking communication and hardware availability checks. This way only host PC needs extra software installed on it – client does not need any extra software and therefore the solution is completely cross-platform.

The most challenging parts of the project were definitely software for Linux image since it included 2 kernel mode drivers and Windows service which had implementation and full support of FAT (file allocation table), including address mapping between real FAT and virtual FAT.

Architecture

The entire solution consists of the following layers:

  • Linux image is a small Linux image built for ARM CPU architecture, which fits to strong memory restriction – not much memory is available to OS on USB device.
  • VFAT an image of empty FAT volume used by FAT driver to provide information about file system.
  • FAT driver is a Linux-based driver used to represent USB device as a USB Flash drive to hosting hardware and provide access to file system data.
  • Wi-Fi driver is a Linux-based driver used for data exchange with data hosting PC.
  • Windows service is a Windows-based service for communication with Wi-Fi driver and providing network-based access to shared files and notifying FAT driver about changes in virtual file system.
  • Configuration console is an Adobe Air-based application which serves for configuration of shared data storage and access options. It also provides usage statistics to users.
  • Diagnostic tool is a Windows desktop application for verification of proper software configuration, network accessibility and proper hardware availability check.

Tools and Technologies

  • Windows x84 and x64, Linux mini, C, C++, Visual Studio 2005, GCC compiler, Windows SDK, Windows services, Linux kernel drivers, Flash.

Benefits

Not only the implemented solution is innovative and eases data sharing across networks with variety of USB-enabled devices, but it was also optimized in many ways and its robustness has been tested in various scenarios and configuration.

Back to the list