Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

This is a FAT16 driver.

License

NotificationsYou must be signed in to change notification settings

francois-berder/fat16

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This aim of this project is to create a small program able to read FAT16 image on Linux. This project has also been ported to a PIC24, seeBoatController.The data folder contains images used to test the program.

Features

The driver can:

  • list files in a directory
  • read to a file (a file can be opened several times in reading mode)
  • write to a file: any previous contents are erased. A file cannot be read while it is opened in write mode.
  • append to a file: similar to write mode but any previous content is preserved and writing happen at the end.
  • create/delete directories

This driver cannot handle long names.

Names of files and directories must respect the format described here:https://en.wikipedia.org/wiki/8.3_filename. Hence, all valid names can be stored as an array of char of length 13 characters (12 bytes for the filename and one byte for the null character).

Build instructions

make

This creates a shared librarylibfat16_driver.so in thelib folder.The test suite must be run as root:

sudo ./bin/run_test

Integration in an application

You will need to implement the following functions to construct astruct storage_dev_t:

int (*read)(void*buffer,uint32_tlength);int (*read_byte)(void*data);int (*write)(constvoid*buffer,uint32_tlength);int (*seek)(uint32_toffset);

You will also need to find out where the fat16 partition starts. If it is a FAT16 image, the address is most likely 0. Otherwise, read the MBR to get the first sector of a FAT16 partition, multiplied by 512 (bytes per sector) and pass it tofat16_init.

On some compilers such as Microchip XC16, some features from C99 such as printinguint32_t are not supportedso you may have to change the format in debug print.

Examples

Printing content of a file:

voidprint_file_content(void){intfd=fat16_open("DATA.TXT",'r');if (fd<0) {fprintf(stderr,"Failed to read DATA.TXT\n");return;    }while (1) {charbuffer[256];inti,n;n=fat16_read(fd,buffer,sizeof(buffer));if (n==0) {/* End of file reached */break;        }elseif (n<0) {fprintf(stderr,"Error %d while reading\n",-n);break;        }else {for (i=0;i<n;++i)printf("%c",buffer[i]);        }    }fat16_close(fd);}

Listing files in root directory:

voidlist_files(void){charfilename[13];uint32_ti=0;while(fat16_ls(&i,filename,"/")==1) {printf("%s\n",filename);    }}

About

This is a FAT16 driver.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp