"Tape is dead, disk is tape, Flash is disk". It is commonly believed that the Flash-based device will dominate the storage market in the near feature due to its high random access speed, low power consumption, etc. Yet the physical limitations of Flash memory, including the endurance issue and block-erased characteristic, make it hard to control the Flash chips. The Flash controller thus becomes a crucial part in the I/O system.

The Flash controller has two parts: the hardware part, typically consists of a cost-efficient CPU and some controlling logic; the firmware part, written in compiled language (e.g., C/C++) to provide functions like basic read/write operation, wear-leveling, addresses mapping and garbage collection. Many researches have been done based on the firmware to achieve better performance, higher hardware endurance, and so forth. Developing a firmware, however, is not an easy task.

First of all, firmware must be developed with the hardware support, and the hardware resources will not be well utilized and have more chance to breakdown if they are given to each individual.

Secondly, there are many other tasks required to be done in a proper development flow besides writing the firmware code. For example, preparing environment for the development board, verifying correctness and benchmark performance of the firmware. We believe these troublesome and repetitive procedures should be eliminated by some automation scripts.

Last but not least, bugs in the FTL firmware are often hard to be found during development and can cause enormous losses. One may choose to test their firmware on a real hardware or on a traditional simulator. These two approaches are, however, relatively slow since they are in essence not just a correctness tester but also a performance evaluator.

Based on the observation above, this project is aimed at providing an on-line FTL firmware development platform with highly automated process and short response time. We use the Jasmine OpenSSD development board to run and test the developed firmware. The board primarily consists of a low-end ARM core, 64MB SDRAM, SATA interface and 8 NAND Flash memory slots. The toolchain, including the low-level firmware source code, firmware installer source code and the C compiler are also shipped with the board. We write scripts in Python to fully automate the development process. To build the web server, the popular open-source JavaScript runtime Node.js and some related packages are used. The browser-based user interface is written in HTML, JavaScript and CSS and backed by the web server.MySQL database is used as the underlying database to record the state of firmware codes uploaded by developers. Finally, the whole system is built upon the Ubuntu Linux.

Fig. 1

Fig. 2