Teensyduino File System Integration, including MTP and MSC

Now that TD has been released, I have started playing a little again.

Yesterday I started an experiment I mentioned recently, wondered if we really need multiple wrapper classes for FsFile objects...

So I tried making a minor change to SD.h:
in SDFile - I moved the constructor to public, and I removed the friend line.

In USBHost_t36.h I removed (actually pass 1 #ifdef out the MSCFile class

I then moved the USBFilesystem::eek:pen method to the cpp instead of implemented in the .h file
And changed the new to be SDFile instead of MSCFile...

Note: I had to include <SD.h>...

It build and ran :D

Might be nice to have it outside of the SD library... but also nice to just have one
 
@KurtE -Sorry I am late to respond. Have people out again at work. I think I have most of the bugs worked out now. I pushed up the latest changes. The readme shows what is available in this update. What I have done so far is just to make sure everything is working. It needs to be laid out differently which is what I have been looking at the last few days. It's funny that you have been working on USBHost_t36. I have been looking at the very same thing scratching my head trying to figure out what would be the best way to integrate ext4. I see that you already are identifying an ext4 partition type (0x83) but not processing it. The ext4 struct for scanning partitions is in ext4_mbr.c:

Code:
struct ext4_part_entry {
	uint8_t status;
	uint8_t chs1[3];
	uint8_t type;
	uint8_t chs2[3];
	uint32_t first_lba;
	uint32_t sectors;
};

struct ext4_mbr {
	uint8_t bootstrap[442];
	uint32_t disk_id;
	struct ext4_part_entry part_entry[4];
	uint16_t signature;
};

It should be fairly close to the FAT type I think.

Ext4 needs access to USBDrive class for each device that is registered. It copys information from here:
Code:
//**********************BLOCKDEV INTERFACE**************************************
static int ext4_bd_open(struct ext4_blockdev *bdev);
static int ext4_bd_bread(struct ext4_blockdev *bdev, void *buf, uint64_t blk_id,
			 uint32_t blk_cnt);
static int ext4_bd_bwrite(struct ext4_blockdev *bdev, const void *buf,
			  uint64_t blk_id, uint32_t blk_cnt);
static int ext4_bd_close(struct ext4_blockdev *bdev);
static int ext4_bd_lock(struct ext4_blockdev *bdev);
static int ext4_bd_unlock(struct ext4_blockdev *bdev);

//******************************************************************************
EXT4_BLOCKDEV_STATIC_INSTANCE(_ext4_bd,  BLOCK_SIZE, 0, ext4_bd_open,
			      ext4_bd_bread, ext4_bd_bwrite, ext4_bd_close,
			      0, 0);
#if CONFIG_EXT4_BLOCKDEVS_COUNT > 1
EXT4_BLOCKDEV_STATIC_INSTANCE(_ext4_bd1,  BLOCK_SIZE, 0, ext4_bd_open,
			      ext4_bd_bread, ext4_bd_bwrite, ext4_bd_close,
			      0, 0);
#endif
#if CONFIG_EXT4_BLOCKDEVS_COUNT > 2
EXT4_BLOCKDEV_STATIC_INSTANCE(_ext4_bd2,  BLOCK_SIZE, 0, ext4_bd_open,
			      ext4_bd_bread, ext4_bd_bwrite, ext4_bd_close,
			      0, 0);
#endif
#if CONFIG_EXT4_BLOCKDEVS_COUNT > 3
EXT4_BLOCKDEV_STATIC_INSTANCE(_ext4_bd3,  BLOCK_SIZE, 0, ext4_bd_open,
			      ext4_bd_bread, ext4_bd_bwrite, ext4_bd_close,
			      0, 0);
#endif

// List of interfaces
static struct ext4_blockdev * const ext4_blkdev_list[CONFIG_EXT4_BLOCKDEVS_COUNT] =
{
	&_ext4_bd,
#if CONFIG_EXT4_BLOCKDEVS_COUNT > 1
	&_ext4_bd1,
#endif
#if CONFIG_EXT4_BLOCKDEVS_COUNT > 2
	&_ext4_bd2,
#endif
#if CONFIG_EXT4_BLOCKDEVS_COUNT > 3
	&_ext4_bd3,
#endif
};

to a block device interface (bdif) that is used by ext4 for access to a block device. It opens the device like it is a file to get information needed for the file system. That's the low level stuff. Then after that we scan the MBR of each block device to get partition information for mounting. Once I got through that it was fairly easy to set up and test the FS wrapper.

I have the ext4 formatter working now and if using an SD card it formats about as fast as Linux box. As far as formatting a USB device SLOW... Very slow. Not sure why yet but I know it spends most of that time waiting for msOutComplete() to finish.

Here is the link again:

https://github.com/wwatson4506/TeensyEXT4/tree/TeensyEXT4V2

There are a few warnings when compiling still mostly to do with the debug printf stuff. It is turned on in the ext4_config.h file.
I checked all of the examples again and they are working on my setup. copyFilesUSB.ino give you kind of an idea of the transfer speeds.

OK I'm done rambling:)

EDIT: Forgot to mention that the formatter does not set up partition tables yet so an initial format will have to be made on a PC. I think it copys the existing one and modifies it.
 
Last edited:
I just installed TD 1.57 on my M1 Mac mini and it seems to run as expected. It is nice that I no longer have to modify core or board files to use MTP + Serial.

I downloaded and tried some of the simple demos from MTP_Teensy_main. and they seemed to run properly. Note that MACOS doesn't have built-in MTP drivers, so I'm using Commander One to show me the MTP data files.

I updated one of my camera programs to allow me to get images from the T4.1. It was fairly simple to convert from the custom MTP implementation I've been using for many months to the newly integrated MTP functionality. The one problem I've found is that Commander One doesn't seem to respond to the DeviceResetEvent to show me newly-created files on the MTP drive. It seems to work fine on the Win10 MTP system. Although the Teensy device shows up on the Mac in Commander One, Clicking on it doesn't open the SD Card.

I managed to reset the MTP on the Mac using a call to usb_init(), as I was doing in my custom implementation. It's convenient that Commander One can be set up to automatically reconnect to the USB on the Teensy after the disconnection. After the disconnect/reconnect, I can click on the Teensy device, open the SD Card and upload my files.
 
Update example to add support for QSPI NAND flash

I bought a fully loaded Teensy 4.1 from protosupplies.com that had a 128 megabyte W25N01GVZEIG NAND flash chip instead of the more common W25Q128JVSIQ NOR flash chip. I noticed that the MTP_t4 mtp-basic example did not have an example using the LittleFS_QPINAND constructor. Here are some quick changes to add NAND support to the mtp-basic test that work if I define USE_LFS_QSPI_NAND:

Code:
#include "SPI.h"
#include "SD.h"
#include "MTP.h"

#define USE_LFS_RAM 0    // T4.1 PSRAM (or RAM)
#define USE_LFS_QSPI_NOR 0     // T4.1 QSPI NOR flash (16MB)
#define USE_LFS_QSPI_NAND 0     // T4.1 QSPI NAND flash (128MB W25N01GVZEIG or 256MB W25N02KVZEIR)
#define USE_LFS_PROGM 0     // T4.1 Progam Flash
#define USE_SD  1     // Use either the built-in micro SD card reader or the reader on pin 10 (audio adapter)
#define USE_LFS_SPI 0     // SPI Flash

#if USE_EVENTS==1
  extern "C" int usb_init_events(void);
#else
  int usb_init_events(void) {}
#endif

#if USE_LFS_RAM==1 ||  USE_LFS_PROGM==1 || USE_LFS_QSPI_NOR==1 || USE_LFS_QSPI_NAND==1 || USE_LFS_SPI==1
  #include "LittleFS.h"
#endif

#if defined(__IMXRT1062__)
  // following only as long usb_mtp is not included in cores
  #if !__has_include("usb_mtp.h")
    #include "usb1_mtp.h"
  #endif
#else
  #ifndef BUILTIN_SDCARD 
    #define BUILTIN_SDCARD 254
  #endif
  void usb_mtp_configure(void) {}
#endif


/****  Start device specific change area  ****/
// SDClasses 
#if USE_SD==1
  // edit SPI to reflect your configuration (following is for T4.1)
  #define SD_MOSI 11
  #define SD_MISO 12
  #define SD_SCK  13

  #define SPI_SPEED SD_SCK_MHZ(33)  // adjust to sd card 

  #if defined (BUILTIN_SDCARD)
    const char *sd_str[]={"sdio","sd1"}; // edit to reflect your configuration
    const int cs[] = {BUILTIN_SDCARD,10}; // edit to reflect your configuration
  #else
    const char *sd_str[]={"sd1"}; // edit to reflect your configuration
    const int cs[] = {10}; // edit to reflect your configuration
  #endif
  const int nsd = sizeof(sd_str)/sizeof(const char *);

SDClass sdx[nsd];
#endif

//LittleFS classes
#if USE_LFS_RAM==1
  const char *lfs_ram_str[]	= {"RAM1","RAM2"};		// edit to reflect your configuration
  const int lfs_ram_size[]	= {2'000'000, 4'000'000};	// edit to reflect your configuration
  const int nfs_ram		= sizeof(lfs_ram_str)/sizeof(const char *);

  LittleFS_RAM ramfs[nfs_ram]; 
#endif

#if USE_LFS_QSPI_NOR==1
  const char *lfs_qspi_nor_str[]	= {"QSPI-NOR"};		// edit to reflect your configuration
  const int nfs_qspi_nor		= sizeof(lfs_qspi_nor_str)/sizeof(const char *);

  LittleFS_QSPIFlash qspifs_nor[nfs_qspi_nor]; 
#endif

#if USE_LFS_QSPI_NAND==1
  const char *lfs_qspi_nand_str[]	= {"QSPI-NAND"};	// edit to reflect your configuration
  const int nfs_qspi_nand		= sizeof(lfs_qspi_nand_str)/sizeof(const char *);

  LittleFS_QPINAND qspifs_nand[nfs_qspi_nand];
#endif

#if USE_LFS_PROGM==1
  const char *lfs_progm_str[]={"PROGM"};     // edit to reflect your configuration
  const int lfs_progm_size[] = {1'000'000}; // edit to reflect your configuration
  const int nfs_progm = sizeof(lfs_progm_str)/sizeof(const char *);

  LittleFS_Program progmfs[nfs_progm]; 
#endif

#if USE_LFS_SPI==1
  const char *lfs_spi_str[]={"nand1","nand2","nand3","nand4"}; // edit to reflect your configuration
  const int lfs_cs[] = {3,4,5,6}; // edit to reflect your configuration
  const int nfs_spi = sizeof(lfs_spi_str)/sizeof(const char *);

LittleFS_SPIFlash spifs[nfs_spi];
#endif


MTPStorage_SD storage;
MTPD    mtpd(&storage);

void storage_configure()
{
  #if USE_SD==1
    #if defined SD_SCK
      SPI.setMOSI(SD_MOSI);
      SPI.setMISO(SD_MISO);
      SPI.setSCK(SD_SCK);
    #endif

    for(int ii=0; ii<nsd; ii++)
    { 
      #if defined(BUILTIN_SDCARD)
        if(cs[ii] == BUILTIN_SDCARD)
        {
          if(!sdx[ii].sdfs.begin(SdioConfig(FIFO_SDIO))) 
          { Serial.printf("SDIO Storage %d %d %s failed or missing",ii,cs[ii],sd_str[ii]);  Serial.println();
          }
          else
          {
            storage.addFilesystem(sdx[ii], sd_str[ii]);
            uint64_t totalSize = sdx[ii].totalSize();
            uint64_t usedSize  = sdx[ii].usedSize();
            Serial.printf("SDIO Storage %d %d %s ",ii,cs[ii],sd_str[ii]); 
            Serial.print(totalSize); Serial.print(" "); Serial.println(usedSize);
          }
        }
        else if(cs[ii]<BUILTIN_SDCARD)
      #endif
      {
        pinMode(cs[ii],OUTPUT); digitalWriteFast(cs[ii],HIGH);
        if(!sdx[ii].sdfs.begin(SdSpiConfig(cs[ii], SHARED_SPI, SPI_SPEED))) 
        { Serial.printf("SD Storage %d %d %s failed or missing",ii,cs[ii],sd_str[ii]);  Serial.println();
        }
        else
        {
          storage.addFilesystem(sdx[ii], sd_str[ii]);
          uint64_t totalSize = sdx[ii].totalSize();
          uint64_t usedSize  = sdx[ii].usedSize();
          Serial.printf("SD Storage %d %d %s ",ii,cs[ii],sd_str[ii]); 
          Serial.print(totalSize); Serial.print(" "); Serial.println(usedSize);
        }
      }
    }
    #endif

    #if USE_LFS_RAM==1
    for(int ii=0; ii<nfs_ram;ii++)
    {
      if(!ramfs[ii].begin(lfs_ram_size[ii])) 
      { Serial.printf("Ram Storage %d %s failed or missing",ii,lfs_ram_str[ii]); Serial.println();
      }
      else
      {
        storage.addFilesystem(ramfs[ii], lfs_ram_str[ii]);
        uint64_t totalSize = ramfs[ii].totalSize();
        uint64_t usedSize  = ramfs[ii].usedSize();
        Serial.printf("RAM Storage %d %s ",ii,lfs_ram_str[ii]); Serial.print(totalSize); Serial.print(" "); Serial.println(usedSize);
      }
    }
    #endif

    #if USE_LFS_PROGM==1
    for(int ii=0; ii<nfs_progm;ii++)
    {
      if(!progmfs[ii].begin(lfs_progm_size[ii])) 
      { Serial.printf("Program Storage %d %s failed or missing",ii,lfs_progm_str[ii]); Serial.println();
      }
      else
      {
        storage.addFilesystem(progmfs[ii], lfs_progm_str[ii]);
        uint64_t totalSize = progmfs[ii].totalSize();
        uint64_t usedSize  = progmfs[ii].usedSize();
        Serial.printf("Program Storage %d %s ",ii,lfs_progm_str[ii]); Serial.print(totalSize); Serial.print(" "); Serial.println(usedSize);
      }
    }
    #endif

    #if USE_LFS_QSPI_NOR==1
    for(int ii=0; ii<nfs_qspi;ii++)
    {
      if(!qspifs_nor[ii].begin()) 
      { Serial.printf("QSPI Storage %d %s failed or missing",ii,lfs_qspi_str[ii]); Serial.println();
      }
      else
      {
        storage.addFilesystem(qspifs_nor[ii], lfs_qspi_str[ii]);
        uint64_t totalSize = qspifs_nor[ii].totalSize();
        uint64_t usedSize  = qspifs_nor[ii].usedSize();
        Serial.printf("QSPI NOR Storage %d %s ",ii,lfs_qspi_str[ii]); Serial.print(totalSize); Serial.print(" "); Serial.println(usedSize);
      }
    }
    #endif

    #if USE_LFS_QSPI_NAND==1
    for(int ii=0; ii<nfs_qspi_nand;ii++)
    {
      if(!qspifs_nand[ii].begin()) 
      { Serial.printf("QSPI Storage %d %s failed or missing",ii,lfs_qspi_nand_str[ii]); Serial.println();
      }
      else
      {
        storage.addFilesystem(qspifs_nand[ii], lfs_qspi_nand_str[ii]);
        uint64_t totalSize = qspifs_nand[ii].totalSize();
        uint64_t usedSize  = qspifs_nand[ii].usedSize();
        Serial.printf("QSPI NAND Storage %d %s ",ii,lfs_qspi_nand_str[ii]); Serial.print(totalSize); Serial.print(" "); Serial.println(usedSize);
      }
    }
    #endif

    #if USE_LFS_SPI==1
    for(int ii=0; ii<nfs_spi;ii++)
    {
      if(!spifs[ii].begin(lfs_cs[ii])) 
      { Serial.printf("SPIFlash Storage %d %d %s failed or missing",ii,lfs_cs[ii],lfs_spi_str[ii]); Serial.println();
      }
      else
      {
        storage.addFilesystem(spifs[ii], lfs_spi_str[ii]);
        uint64_t totalSize = spifs[ii].totalSize();
        uint64_t usedSize  = spifs[ii].usedSize();
        Serial.printf("SPIFlash Storage %d %d %s ",ii,lfs_cs[ii],lfs_spi_str[ii]); Serial.print(totalSize); Serial.print(" "); Serial.println(usedSize);
      }
    }
    #endif
}

void setup()
{ 
  Serial.println("MTP_test");

  #if USE_EVENTS==1
    usb_init_events();
  #endif

  #if !__has_include("usb_mtp.h")
    usb_mtp_configure();
  #endif
  storage_configure();

}

void loop()
{ 
  mtpd.loop();

#if USE_EVENTS==1
  if(Serial.available())
  {
    char ch=Serial.read();
    Serial.println(ch);
    if(ch=='r') 
    {
      Serial.println("Reset");
      mtpd.send_DeviceResetEvent();
    }
  }
#endif
}
 
Sounds good. I have tried to use the generic QSPI class to hopefully avoid having to know what type of chip if any you have, but I am just sort of lazy ;)

We probably should go through these examples and add the different versions as options.

Thanks
 
Yes if we fix the generic constructor to handle both NAND and NOR systems, that would be nice. With the last MTP_t4 that I downloaded, it didn't work. But changing which constructor to use is fairly simple. I wonder if it is an issue for standard SPI flash (like used in the prop/audio shields). But I don't know if the NAND chips would work if soldered to an audio board.
 
MTP_Teensy meets ext4 filesystem.

@Paul, @KurtE, @mjs513 - After several months of working on lwext4 for the Teensy and three major rewrites I have a workable version that also supports MTP_Teensy:)

There is a 4th version in the works that has most of TeensyEXT4 incorporated into USBHost_t36 and is WIP. But that is turning out to be a nightmare in itself:)

Anyway, here is a screenshot:
Screenshot at 2022-09-04 06-53-28.png

I created another sketch in the Simplified Examples folder called "Example_6_MTP_USB_SD_ETX4.ino" which sets up two partitions for block device sda, "sda1" and "sda2". These can be a mix of FAT or EXT4 formatting. Also block device "sdd1" (sdd1 is an ext4 formatted SD card mounted in the SDIO card slot). Only ext4 formatted SD cards are supported in this sketch.

This has all been tested with Arduino-1.8.19 and TD1.57-Final only.

Link to version three of TeensyEXT4:
https://github.com/wwatson4506/TeensyEXT4/tree/TeensyEXT4V3

and updated version of MTP_Teensy:
https://github.com/wwatson4506/MTP_Teensy

I'm sure there are a lot of optimizations that can be made but for now I am taking a break from TeensyEXT4.
Please test this WIP:)

Edit: There are several example sketches in TeensyEXT4V3 as well.
 
Last edited:
@wwatson - @KurtE
Very cool and nice work - will have to download and give it a try. Haven't played with MTP in a while so this should be fun :)
 
I had a senior moment with playing with MTP. I wanted to verify that it would be a full replacement for TeensyTransfer. So I was going through my devices.
  • Teensy 4.1, 3.6, 3.5 built-in micro SD card reader: check
  • Teensy 4.0 with micro SD card reader soldered to the pads underneath the Teensy 4.0: check
  • Teensy 4.1 NOR flash: check
  • Teensy 4.1 NAND flash: check once I added the LittleFS_QPINAND constructor
  • Prop shield flash memory: check
  • Teensy 4.0/4.1 audio shield micro SD card reader: check
  • I don't think I have a flash memory chip soldered to a revision D audio shield: can't test
  • Teensy 3.5/3.6 audio shield micro SD card reader: does not work
  • Teensy 3.5/3.6 ausio shield flash chip soldered on: does not work
  • I didn't check the Teensy LC, 3.1, or 3.2.

Yep, I forgot to adjust MOSI to use pin 7 and SCK to use pin 14. Once I adjusted this via #ifdef for the Teensy 3.x, it worked fine. Of course if I have a prop shield mounted instead of an audio shield, then is will not work until I use the standard MOSI and SCK.

Can somebody remind me what are the limitations to using the two RAM flash systems? Do they survive power cycling? Do they survive when a new sketch is loaded?

Similarly for PROGRAM flash? I assume PROGRAM flash is wiped out when you load a new sketch, but it is preserved across power cycling. Is this correct? Can the earlier Teensies use this? I might imagine that Teensy 4.0 can use it (though of course it will be much smaller in size). How about the LC and 3.x Teensies?

Basically I like what Paint Your Dragon did for Adafruit in the incarnation on his uncanny eyes for the Monster M4SK, Hallowing M4, etc. where the eyes are BMP files that you can change the image and also change the parameters for the IRIS, etc. by editing files available via USB when you hook up the microprocessor. In one of my projects, I would prefer a Teensy 4.0 instead of 4.1 when I'm doing a single eye because it is cramped space.

<edit>
It looks like the PROGRAM flash space is maintained across power cycles on Teensy 4.0/4.1, and it is NOT deleted when you upload a new sketch. The Teensy 4.0 has 950 kB of free space, so it looks like enough to store at least one eye.
 
Last edited:
...

Can somebody remind me what are the limitations to using the two RAM flash systems? Do they survive power cycling? Do they survive when a new sketch is loaded?

Similarly for PROGRAM flash? I assume PROGRAM flash is wiped out when you load a new sketch, but it is preserved across power cycling. Is this correct? Can the earlier Teensies use this? I might imagine that Teensy 4.0 can use it (though of course it will be much smaller in size). How about the LC and 3.x Teensies?

Basically I like what Paint Your Dragon did for Adafruit in the incarnation on his uncanny eyes for the Monster M4SK, Hallowing M4, etc. where the eyes are BMP files that you can change the image and also change the parameters for the IRIS, etc. by editing files available via USB when you hook up the microprocessor. In one of my projects, I would prefer a Teensy 4.0 instead of 4.1 when I'm doing a single eye because it is cramped space.

<edit>
It looks like the PROGRAM flash space is maintained across power cycles on Teensy 4.0/4.1, and it is NOT deleted when you upload a new sketch. The Teensy 4.0 has 950 kB of free space, so it looks like enough to store at least one eye.

RAM: Reset on EACH START - programming or other reset.
> Initially BOTH survived with power, but PJRC determined that was intended for DEBUG/Creation only.
- PSRAM: has no issue surviving - as long as the CACHE FLUSH code were restored and the startup forcing of Fresh Format were removed.
- DMAMEM: Is subject to lower portion overwrite on reset from the 1062 security code - and whatever else might adjust memory locations on rebuild or uncontrolled alloc

PROGRAM: New bootloader code no longer forces full FLASH reformat on programming. All used code space will get formatted, after a min of 512KB non-secure and 1MB if secured (chk T_4.x page to confirm #'s). And it is unchanged on power off or restart. Indeed pre T_4.x is smaller flash - assume it survives programming.
 
RAM: Reset on EACH START - programming or other reset.
> Initially BOTH survived with power, but PJRC determined that was intended for DEBUG/Creation only.
- PSRAM: has no issue surviving - as long as the CACHE FLUSH code were restored and the startup forcing of Fresh Format were removed.
- DMAMEM: Is subject to lower portion overwrite on reset from the 1062 security code - and whatever else might adjust memory locations on rebuild or uncontrolled alloc

PROGRAM: New bootloader code no longer forces full FLASH reformat on programming. All used code space will get formatted, after a min of 512KB non-secure and 1MB if secured (chk T_4.x page to confirm #'s). And it is unchanged on power off or restart. Indeed pre T_4.x is smaller flash - assume it survives programming.

Thanks. For my purposes, PROGRAM memory is the way to go (possibly also PSRAM) since I want the memory to survive both power cycles and loading sketches. I've pretty much stopped new development on the Teensy 3.x processors.

I like the Teensy 4.1, but for some builds I want the smaller board size of the Teensy 4.0 (or I want to put it into a feather wing adapter). I do have several un-soldered Teensy 4.0s on hand, but it would be nice if the supply chain opened up on them in case I got creative, or in case I started ruining the boards and had to order new ones. Given PROGRAM memory does provide some memory, it makes the Teensy 4.0 attractive.

I still do some neopixel work on the LC due to the built-in level shifter, but the LC just doesn't have enough memory for larger projects. I think I have a few LC's also. I recall thinking I better order an LC a month or two ago, when I was starting a new project, and I'm glad I did.

Of course with the Teensy 4.x, I lose the ability to use the DACs for sound.
 
@Paul, @KurtE, @mjs513 - After several months of working on lwext4 for the Teensy and three major rewrites I have a workable version that also supports MTP_Teensy:)

There is a 4th version in the works that has most of TeensyEXT4 incorporated into USBHost_t36 and is WIP. But that is turning out to be a nightmare in itself:)

Anyway, here is a screenshot:
View attachment 29298

I created another sketch in the Simplified Examples folder called "Example_6_MTP_USB_SD_ETX4.ino" which sets up two partitions for block device sda, "sda1" and "sda2". These can be a mix of FAT or EXT4 formatting. Also block device "sdd1" (sdd1 is an ext4 formatted SD card mounted in the SDIO card slot). Only ext4 formatted SD cards are supported in this sketch.

This has all been tested with Arduino-1.8.19 and TD1.57-Final only.

Link to version three of TeensyEXT4:
https://github.com/wwatson4506/TeensyEXT4/tree/TeensyEXT4V3

and updated version of MTP_Teensy:
https://github.com/wwatson4506/MTP_Teensy

I'm sure there are a lot of optimizations that can be made but for now I am taking a break from TeensyEXT4.
Please test this WIP:)

Edit: There are several example sketches in TeensyEXT4V3 as well.

@wwatson
Just downloaded the two libs to give it a try and think I am missing something. GOt this error when I tried compiling the MTP example:
Code:
fatal error: ext4FS.h: No such file or directory


EDIT: NEVER MIND FIGURED IT OUT - GITHUB issue
 
@mjs513 - Glad to here it. Just went through the steps myself to make sure I didn't mess something up. It compiled ok. Curious to see how it works in Windows...
 
@mjs513 - Glad to here it. Just went through the steps myself to make sure I didn't mess something up. It compiled ok. Curious to see how it works in Windows...

Well remember you asked. I am using a HDD with RPI4 fat drive + lext as a test as well as the SD sloe.

First getting the following warnings:
Code:
d:\Users\Merli\Documents\Arduino\libraries\TeensyEXT4\src\ext4\ext4.c:484:12: warning: '__ext4_journal_start' defined but not used [-Wunused-function]
 static int __ext4_journal_start(const char *mount_point)
            ^
d:\Users\Merli\Documents\Arduino\libraries\TeensyEXT4\src\ext4\ext4.c:515:12: warning: '__ext4_journal_stop' defined but not used [-Wunused-function]
 static int __ext4_journal_stop(const char *mount_point)
            ^
d:\Users\Merli\Documents\Arduino\libraries\TeensyEXT4\src\ext4\ext4.c:552:12: warning: '__ext4_recover' defined but not used [-Wunused-function]
 static int __ext4_recover(const char *mount_point)
            ^
d:\Users\Merli\Documents\Arduino\libraries\TeensyEXT4\src\ext4\ext4.c:610:12: warning: '__ext4_trans_start' defined but not used [-Wunused-function]
 static int __ext4_trans_start(struct ext4_mountpoint *mp)
            ^
d:\Users\Merli\Documents\Arduino\libraries\TeensyEXT4\src\ext4\ext4.c:629:12: warning: '__ext4_trans_stop' defined but not used [-Wunused-function]
 static int __ext4_trans_stop(struct ext4_mountpoint *mp)
            ^
d:\Users\Merli\Documents\Arduino\libraries\TeensyEXT4\src\ext4\ext4.c:643:13: warning: '__ext4_trans_abort' defined but not used [-Wunused-function]
 static void __ext4_trans_abort(struct ext4_mountpoint *mp)
             ^
d:\Users\Merli\Documents\Arduino\libraries\TeensyEXT4\src\ext4FS.cpp:37:12: warning: 'int ext4_bd_lock(ext4_blockdev*)' declared 'static' but never defined [-Wunused-function]
 static int ext4_bd_lock(struct ext4_blockdev *bdev);
            ^
d:\Users\Merli\Documents\Arduino\libraries\TeensyEXT4\src\ext4FS.cpp:38:12: warning: 'int ext4_bd_unlock(ext4_blockdev*)' declared 'static' but never defined [-Wunused-function]
 static int ext4_bd_unlock(struct ext4_blockdev *bdev);
            ^
d:\Users\Merli\Documents\Arduino\libraries\TeensyEXT4\src\ext4FS.cpp:201:12: warning: 'int ext4_bd_ctrl(ext4_blockdev*, int, void*)' defined but not used [-Wunused-function]
 static int ext4_bd_ctrl(struct ext4_blockdev *bdev, int cmd, void *args)
            ^

as for the drives :
Code:
Ram Drive of size: 4194304 initialized
Set Storage Index drive to 0
Initializing USB Drives ...
 === Drive index 0 found ===

Try Partition list
Partition Table
	part,boot,bgnCHS[3],type,endCHS[3],start,length
FAT32:	1,80,0x0,0x1,0x10,0xC,0x3,0xE0,0xFF,2048,522240
ext2/3/4:	2,0,0x0,0x1,0x0,0x83,0x0,0xF,0xC0,524288,976248847
pt_#0:	3,0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0,0
pt_#0:	4,0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0,0
	 < unused area starting at: 976773135 length 32 >
Found new Volume:0
myext4fs1.begin(sda1) Failed: Drive plugged in?
myext4fs2.begin(sda2): passed...
Set Storage Index drive 2 to 2
SD card is inserted...
myext4fs4.begin(sdd1) Failed: Drive plugged in?
Initializaton complete.
so picking up the drives but there are no files showing:
Code:
Dump Storage list(3)
store:0 storage:10001 name:RAM fs:20001d0c
store:1 storage:20001 name:MSC0-system-boot fs:2001ada0
store:2 storage:30001 name:writable fs:20010a40

Dump Index List
0: 0 1 0 65535 0 0 0 0 /
1: 1 1 1 65535 0 111 0 0 /
2: 2 1 1 65535 0 17 0 0 /
16: 2 1 0 2 0 0 0 1596127730 lost+found
17: 2 1 1 2 16 18 0 1659009147 boot
18: 2 1 1 17 0 0 0 1597148352 firmware
19: 1 1 0 1 0 0 1659009212 1659009212 overlays
20: 1 0 0 1 19 1514 1597148384 1596127730 README
21: 1 0 0 1 20 52456 1659009156 1659009156 bootcode.bin
22: 1 0 0 1 21 186 1597148384 1596979282 cmdline.txt
23: 1 0 0 1 22 1233 1599264766 1599264766 config.txt
24: 1 0 0 1 23 7279 1659009156 1659009156 fixup.dat
25: 1 0 0 1 24 5411 1659009156 1659009156 fixup4.dat
26: 1 0 0 1 25 3213 1659009154 1659009154 fixup4cd.dat
27: 1 0 0 1 26 8426 1659009154 1659009154 fixup4db.dat
28: 1 0 0 1 27 8420 1659009156 1659009156 fixup4x.dat
29: 1 0 0 1 28 3213 1659009156 1659009156 fixup_cd.dat
30: 1 0 0 1 29 10269 1659009156 1659009156 fixup_db.dat
31: 1 0 0 1 30 10269 1659009154 1659009154 fixup_x.dat
32: 1 0 0 1 31 2965696 1659009154 1659009154 start.elf
33: 1 0 0 1 32 2241504 1659009154 1659009154 start4.elf
34: 1 0 0 1 33 801564 1659009154 1659009154 start4cd.elf
35: 1 0 0 1 34 3737928 1659009154 1659009154 start4db.elf
36: 1 0 0 1 35 2993544 1659009154 1659009154 start4x.elf
37: 1 0 0 1 36 801564 1659009156 1659009156 start_cd.elf
38: 1 0 0 1 37 4809800 1659009156 1659009156 start_db.elf
39: 1 0 0 1 38 3717256 1659009158 1659009158 start_x.elf
40: 1 0 0 1 39 23859712 1659008474 1659008474 vmlinux
41: 1 0 0 1 40 8504670 1659008414 1659008414 vmlinuz.bak
42: 1 0 0 1 41 27226 1659009160 1659009160 bcm2710-rpi-2-b.dtb
43: 1 0 0 1 42 29343 1659009160 1659009160 bcm2710-rpi-3-b-plus.dtb
44: 1 0 0 1 43 28724 1659009158 1659009158 bcm2710-rpi-3-b.dtb
45: 1 0 0 1 44 27033 1659009158 1659009158 bcm2710-rpi-cm3.dtb
46: 1 0 0 1 45 47640 1659009160 1659009160 bcm2711-rpi-4-b.dtb
47: 1 0 0 1 46 20820 1659009160 1659009158 bcm2837-rpi-3-a-plus.dtb
48: 1 0 0 1 47 21689 1659009158 1659009158 bcm2837-rpi-3-b-plus.dtb
49: 1 0 0 1 48 21269 1659009160 1659009160 bcm2837-rpi-3-b.dtb
50: 1 0 0 1 49 20596 1659009158 1659009158 bcm2837-rpi-cm3-io3.dtb
51: 1 0 0 1 50 4624 1659009152 1659009152 boot.scr
52: 1 0 0 1 51 29173774 1659009152 1659009152 initrd.img
53: 1 0 0 1 52 240 1597148384 1596127730 meta-data
54: 1 0 0 1 53 1559 1659009158 1659009158 overlay_map.dtb
55: 1 0 0 1 54 327 1597148384 1596127730 syscfg.txt
56: 1 0 0 1 55 516416 1655149344 1655149344 uboot_rpi_3.bin
57: 1 0 0 1 56 572064 1655149344 1655149344 uboot_rpi_4.bin
58: 1 0 0 1 57 2114 1597148384 1596127730 user-data
59: 1 0 0 1 58 474 1655419414 1655419414 usercfg.txt
60: 1 0 0 1 59 8504670 1659009152 1659009152 vmlinuz
61: 1 0 0 1 60 29172470 1659008414 1659008414 initrd.img.bak
62: 1 0 0 1 61 1078 1599264814 1599264814 auto_decompress_kernel
63: 1 0 0 1 62 4624 1659008414 1659008414 boot.scr.bak
64: 1 0 0 1 63 28724 1659008420 1659008420 bcm2710-rpi-3-b.dtb.bak
65: 1 0 0 1 64 27033 1659008420 1659008420 bcm2710-rpi-cm3.dtb.bak
66: 1 0 0 1 65 1559 1659008420 1659008420 overlay_map.dtb.bak
67: 1 0 0 1 66 21689 1659008420 1659008420 bcm2837-rpi-3-b-plus.dtb.bak
68: 1 0 0 1 67 20596 1659008420 1659008420 bcm2837-rpi-cm3-io3.dtb.bak
< Skipped 69 - 79 >
80: 1 0 0 1 68 20820 1659008420 1659008420 bcm2837-rpi-3-a-plus.dtb.bak
81: 1 0 0 1 80 21269 1659008422 1659008422 bcm2837-rpi-3-b.dtb.bak
82: 1 0 0 1 81 47640 1659008422 1659008422 bcm2711-rpi-4-b.dtb.bak
83: 1 0 0 1 82 29343 1659008422 1659008422 bcm2710-rpi-3-b-plus.dtb.bak
84: 1 0 0 1 83 27226 1659008422 1659008422 bcm2710-rpi-2-b.dtb.bak
85: 1 0 0 1 84 558456 1655149344 1655149344 uboot_rpi_arm64.bin
86: 1 0 0 1 85 2241504 1659008414 1659008414 start4.elf.bak
87: 1 0 0 1 86 8426 1659008416 1659008416 fixup4db.dat.bak
88: 1 0 0 1 87 2965696 1659008416 1659008416 start.elf.bak
89: 1 0 0 1 88 2993544 1659008416 1659008416 start4x.elf.bak
90: 1 0 0 1 89 10269 1659008416 1659008416 fixup_x.dat.bak
91: 1 0 0 1 90 3737928 1659008416 1659008416 start4db.elf.bak
92: 1 0 0 1 91 3213 1659008416 1659008416 fixup4cd.dat.bak
93: 1 0 0 1 92 801564 1659008416 1659008416 start4cd.elf.bak
94: 1 0 0 1 93 10269 1659008416 1659008416 fixup_db.dat.bak
95: 1 0 0 1 94 7279 1659008418 1659008418 fixup.dat.bak
96: 1 0 0 1 95 52456 1659008418 1659008418 bootcode.bin.bak
97: 1 0 0 1 96 8420 1659008418 1659008418 fixup4x.dat.bak
98: 1 0 0 1 97 4809800 1659008418 1659008418 start_db.elf.bak
99: 1 0 0 1 98 5411 1659008418 1659008418 fixup4.dat.bak
100: 1 0 0 1 99 801564 1659008418 1659008418 start_cd.elf.bak
101: 1 0 0 1 100 3213 1659008418 1659008418 fixup_cd.dat.bak
102: 1 0 0 1 101 3717256 1659008418 1659008418 start_x.elf.bak
103: 1 0 0 1 102 47801 1659009158 1659009158 bcm2711-rpi-400.dtb
104: 1 0 0 1 103 47773 1659009158 1659009158 bcm2711-rpi-cm4.dtb
105: 1 0 0 1 104 27893 1659009160 1659009160 bcm2710-rpi-zero-2.dtb
106: 1 0 0 1 105 47801 1659008420 1659008420 bcm2711-rpi-400.dtb.bak
107: 1 0 0 1 106 47773 1659008420 1659008420 bcm2711-rpi-cm4.dtb.bak
108: 1 0 0 1 107 27893 1659008422 1659008422 bcm2710-rpi-zero-2.dtb.bak
109: 1 0 0 1 108 23859712 1655150214 1655150214 vmlinux.bak
110: 1 0 0 1 109 114 1659008474 1659008474 check.md5
111: 1 1 0 1 110 0 1655196726 1655196728 System Volume Information
Drive # 2 Selected

 Space Used = 0
Filesystem Size = 0

It is picking up the fat volume correctly though
 
@mjs513 - As far as the warnings go, those have not been implemented yet. I have not tried an HDD yet. Just a USB stick and SD card both formatted as ext4. Also a USB stick formatted as EXFAT. Also have not tried mixed fs partition types on one USB stick. Will check it out.
 
@mjs513 - As far as the warnings go, those have not been implemented yet. I have not tried an HDD yet. Just a USB stick and SD card both formatted as ext4. Also a USB stick formatted as EXFAT. Also have not tried mixed fs partition types on one USB stick. Will check it out.

Did some more testing, formatted two partitions on one 16G thumb drive. First one as a FAT32 partition and the second one as an ext4 partition.

This is the console output:
Code:
Ram Drive of size: 65536 initialized
Set Storage Index drive to 0
Initializing USB Drives ...
 === Drive index 0 found ===

Try Partition list
Partition Table
        part,boot,bgnCHS[3],type,endCHS[3],start,length
FAT32:  1,0,0x4,0x1,0x4,0xB,0xFE,0xC2,0xFF,2048,15108096
ext2/3/4:       2,0,0x8F,0xE4,0xAC,0x83,0xFE,0xFF,0xFF,15110144,15108096
pt_#0:  3,0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0,0
pt_#0:  4,0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0,0
         < unused area starting at: 30218240 length 601 >
Found new Volume:0
[COLOR="#FF0000"]myext4fs1.begin(sda1) Failed: Drive plugged in?[/COLOR]
myext4fs2.begin(sda2): passed...
Set Storage Index drive 2 to 2
SD card is inserted...
myext4fs4.begin(sdd1): passed...
Set Storage Index drive 3 to 3
Initializaton complete.

Menu Options:
        1 - List Drives
        2 - Select USB Drive
        l - List files on disk
        e - Erase files on disk
        r - reset MTP
        u - unmount MTP
        h - Menu

Note: line marked in red is due to that partition being FAT32 and not recognized as an ext4 partition. it is still picked up by SdFat.

This shows the list dump:

Code:
Dump Storage list(4)
store:0 storage:10001 name:RAM fs:20001cfc
store:1 storage:20001 name:MSC0-16GFAT32P1 fs:2001ada0
store:2 storage:30001 name:16GUSBEXT4P2 fs:20010a40
store:3 storage:40001 name:32GSDEXT4 fs:20011080

Dump Index List
0: 0 1 0 65535 0 0 0 0 /
1: 1 1 1 65535 0 29 0 0 /
2: 2 1 1 65535 0 26 0 0 /
3: 3 1 1 65535 0 28 0 0 /
16: 1 0 0 1 0 974 1662475676 1645481610 pathname.c
17: 1 0 0 1 16 15753 1662475676 1653934478 playFSwav.cpp
18: 1 0 0 1 17 32768000 1662475680 1546329644 32MEGfile.dat
< Skipped 19 - 19 >
20: 1 0 0 1 18 5776 1662475680 1646674534 qsortTest.o
21: 1 0 0 1 20 0 1662475680 1649477016 minicom.cap
22: 1 0 0 1 21 1159168 1662475680 1653938398 NINA_W102-1.7.4.bin
23: 1 0 0 1 22 5147 1662475680 1654738410 PLAYALL_SD_ONLY-Bckup.txt
24: 1 0 0 1 23 54 1662475680 1546329604 test.txt
25: 1 0 0 1 24 54 1662475680 1662326924 test1.txt
26: 2 1 0 2 0 0 0 1660776021 lost+found
27: 3 1 0 3 0 0 0 0 lost+found
28: 3 0 0 3 27 63 0 1662202848 datalog.bin
< Skipped 29 - 29 >

This is a screenshot of 16G thumb drive and ext4 formatted SD card:
Screenshot at 2022-09-05 09-28-47.png

One thing about USB HDD drives. They can take up to 30 seconds to come online. In the sketch there is a delay in line #133. I increased that to 20000 and that gave time for my HDD drive to become ready.
 
Last edited:
@wwatson
Put the HDD into the PC and ran a EaseUS Partition Master just to see what it showed:
Capture.PNG

so the 2nd drive which does show as writable, but the new stuff doesn;t show correctly???

NOTE:
I did see
Code:
0: 0 1 0 65535 0 0 0 0 /
1: 1 1 1 65535 0 111 0 0 /
2: 2 1 1 65535 0 17 0 0 /
16: 2 1 0 2 0 0 0 1596127730 lost+found
17: 2 1 1 2 16 18 0 1659009147 boot
18: 2 1 1 17 0 0 0 1597148352 firmware
those directories in windows but did not see any files?
 
@wwatson
Put the HDD into the PC and ran a EaseUS Partition Master just to see what it showed:
View attachment 29306

so the 2nd drive which does show as writable, but the new stuff doesn;t show correctly???

NOTE:
I did see
Code:
0: 0 1 0 65535 0 0 0 0 /
1: 1 1 1 65535 0 111 0 0 /
2: 2 1 1 65535 0 17 0 0 /
16: 2 1 0 2 0 0 0 1596127730 lost+found
17: 2 1 1 2 16 18 0 1659009147 boot
18: 2 1 1 17 0 0 0 1597148352 firmware
those directories in windows but did not see any files?

I'm wondering if it has any thing to do with permissions. I think by default that it should be the root user. Will check it out and let you know.
 
@mjs513 - Sorry... My mistake. In the sketch early on while testing I made a change starting at about line #202:
Code:
    case '2':
      Serial.printf("Drive # %d Selected\n", drive_index);
//      SelectedFS = MTP.getFilesystemByIndex(drive_index);
      SelectedFS = myext4fsp[sdxx];
      break;

Forgot to change it back to:
Code:
    case '2':
      Serial.printf("Drive # %d Selected\n", drive_index);
      SelectedFS = MTP.getFilesystemByIndex(drive_index);
      break;

Code:
Ram Drive of size: 65536 initialized
Set Storage Index drive to 0
Initializing USB Drives ...
 === Drive index 0 found ===

Try Partition list
Partition Table
	part,boot,bgnCHS[3],type,endCHS[3],start,length
FAT32:	1,0,0x4,0x1,0x4,0xB,0xFE,0xC2,0xFF,2048,15108096
ext2/3/4:	2,0,0x8F,0xE4,0xAC,0x83,0xFE,0xFF,0xFF,15110144,15108096
pt_#0:	3,0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0,0
pt_#0:	4,0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0,0
	 < unused area starting at: 30218240 length 601 >
Found new Volume:0
myext4fs1.begin(sda1) Failed: Drive plugged in?
myext4fs2.begin(sda2): passed...
Set Storage Index drive 2 to 2
SD card is inserted...
myext4fs4.begin(sdd1): passed...
Set Storage Index drive 3 to 3
Initializaton complete.

Menu Options:
	1 - List Drives
	2 - Select USB Drive
	l - List files on disk
	e - Erase files on disk
	r - reset MTP
	u - unmount MTP
	h - Menu


Dump Storage list(4)
store:0 storage:10001 name:RAM fs:20001cfc
store:1 storage:20001 name:MSC0-16GFAT32P1 fs:2001ada0
store:2 storage:30001 name:16GUSBEXT4P2 fs:20010a40
store:3 storage:40001 name:32GSDEXT4 fs:20011080

Dump Index List
Drive # 1 Selected

 Space Used = 33976320
Filesystem Size = 7720247296
pathname.c                           C: 09/05/2022 14:47 M: 02/21/2022 22:13  974
playFSwav.cpp                        C: 09/05/2022 14:47 M: 05/29/2022 18:14  15753
32MEGfile.dat                        C: 09/05/2022 14:48 M: 01/01/2019 08:00  32768000
qsortTest.o                          C: 09/05/2022 14:48 M: 03/06/2022 17:35  5776
minicom.cap                          C: 09/05/2022 14:48 M: 04/08/2022 04:03  0
NINA_W102-1.7.4.bin                  C: 09/05/2022 14:48 M: 05/29/2022 19:19  1159168
PLAYALL_SD_ONLY-Bckup.txt            C: 09/05/2022 14:48 M: 06/08/2022 01:33  5147
test.txt                             C: 09/05/2022 14:48 M: 01/01/2019 08:00  54
test1.txt                            C: 09/05/2022 14:48 M: 09/03/2022 21:28  54
Drive # 2 Selected

 Space Used = 205602816
Filesystem Size = 7735345152
lost+found                           M: 08/16/2022 22:40  /
boxgetput.bas                         756
Drive # 3 Selected

 Space Used = 568545280
Filesystem Size = 32009879552
lost+found                            /
datalog.bin                          M: 09/02/2022 11:00  63

Now can select available drives and get directory listings for them.
 
@wwatson - been there got the tea shirt many times over :)

Made the change
Code:
Dump Storage list(3)
store:0 storage:10001 name:RAM fs:20001d0c
store:1 storage:20001 name:MSC0-system-boot fs:2001ada0
store:2 storage:30001 name:writable fs:20010a40

Dump Index List
Drive # 2 Selected

 Space Used = 28950286336
Filesystem Size = 499839406080
lost+found                           M: 07/31/2020 16:48  /
boot                                 M: 07/27/2022 11:52  /
  firmware                           M: 08/12/2020 12:19  /

but thats all its printing and if I go into explorer it shows those directories as empty.

by contrast the FAT16 vol shows:
Code:
 Space Used = 173899776
Filesystem Size = 267231232
overlays                             C: 07/27/2022 11:53 M: 07/27/2022 11:53  /
  adau7002-simple.dtbo               C: 07/27/2022 11:52 M: 07/27/2022 11:52  1587
  act-led.dtbo                       C: 07/27/2022 11:53 M: 07/27/2022 11:53  569
  adau1977-adc.dtbo                  C: 07/27/2022 11:53 M: 07/27/2022 11:53  1027
  akkordion-iqdacplus.dtbo           C: 07/27/2022 11:52 M: 07/27/2022 11:52  1387
  ads1015.dtbo                       C: 07/27/2022 11:53 M: 07/27/2022 11:53  2517
  ads1115.dtbo                       C: 07/27/2022 11:53 M: 07/27/2022 11:53  2517
  ads7846.dtbo                       C: 07/27/2022 11:52 M: 07/27/2022 11:52  2402
  adv7282m.dtbo                      C: 07/27/2022 11:52 M: 07/27/2022 11:52  1654
  adv728x-m.dtbo                     C: 07/27/2022 11:53 M: 07/27/2022 11:53  2138
  audioinjector-addons.dtbo          C: 07/27/2022 11:53 M: 07/27/2022 11:53  1866
  anyspi.dtbo                        C: 07/27/2022 11:53 M: 07/27/2022 11:53  3895
  allo-boss-dac-pcm512x-audio.dtbo   C: 07/27/2022 11:53 M: 07/27/2022 11:53  1469
  allo-digione.dtbo                  C: 07/27/2022 11:53 M: 07/27/2022 11:53  1208
  allo-katana-dac-audio.dtbo         C: 07/27/2022 11:52 M: 07/27/2022 11:52  1659
  allo-piano-dac-pcm512x-audio.dtbo  C: 07/27/2022 11:52 M: 07/27/2022 11:52  1011
  allo-piano-dac-plus-pcm512x-audio.dtbo C: 07/27/2022 11:53 M: 07/27/2022 11:53  1639
  apds9960.dtbo                      C: 07/27/2022 11:53 M: 07/27/2022 11:53  1338
  applepi-dac.dtbo                   C: 07/27/2022 11:53 M: 07/27/2022 11:53  1454
  at86rf233.dtbo                     C: 07/27/2022 11:52 M: 07/27/2022 11:52  1632
  dionaudio-loco-v2.dtbo             C: 07/27/2022 11:52 M: 07/27/2022 11:52  1027
  audremap.dtbo                      C: 07/27/2022 11:52 M: 07/27/2022 11:52  971
  audioinjector-isolated-soundcard.dtbo C: 07/27/2022 11:53 M: 07/27/2022 11:53  1602
  audioinjector-ultra.dtbo           C: 07/27/2022 11:53 M: 07/27/2022 11:53  1890
  audioinjector-wm8731-audio.dtbo    C: 07/27/2022 11:53 M: 07/27/2022 11:53  787
  audiosense-pi.dtbo                 C: 07/27/2022 11:53 M: 07/27/2022 11:53  2187
  balena-fin.dtbo                    C: 07/27/2022 11:52 M: 07/27/2022 11:52  2927
  cma.dtbo                           C: 07/27/2022 11:52 M: 07/27/2022 11:52  964
  dht11.dtbo                         C: 07/27/2022 11:53 M: 07/27/2022 11:53  1019
  i-sabre-q2m.dtbo.bak               C: 07/27/2022 11:40 M: 07/27/2022 11:40  893
  dionaudio-loco.dtbo                C: 07/27/2022 11:53 M: 07/27/2022 11:53  663
  disable-bt.dtbo                    C: 07/27/2022 11:52 M: 07/27/2022 11:52  1073
  disable-wifi.dtbo                  C: 07/27/2022 11:53 M: 07/27/2022 11:53  387
  dpi18.dtbo                         C: 07/27/2022 11:53 M: 07/27/2022 11:53  951
  dpi24.dtbo                         C: 07/27/2022 11:52 M: 07/27/2022 11:52  975
  draws.dtbo                         C: 07/27/2022 11:52 M: 07/27/2022 11:52  6079
  dwc-otg.dtbo                       C: 07/27/2022 11:52 M: 07/27/2022 11:52  293
  dwc2.dtbo                          C: 07/27/2022 11:53 M: 07/27/2022 11:53  801
  enc28j60-spi2.dtbo                 C: 07/27/2022 11:53 M: 07/27/2022 11:53  1279
  enc28j60.dtbo                      C: 07/27/2022 11:53 M: 07/27/2022 11:53  1403
  exc3000.dtbo                       C: 07/27/2022 11:52 M: 07/27/2022 11:52  1562
  fe-pi-audio.dtbo                   C: 07/27/2022 11:53 M: 07/27/2022 11:53  1908
  goodix.dtbo                        C: 07/27/2022 11:52 M: 07/27/2022 11:52  1437
  googlevoicehat-soundcard.dtbo      C: 07/27/2022 11:52 M: 07/27/2022 11:52  1259
  gpio-fan.dtbo                      C: 07/27/2022 11:53 M: 07/27/2022 11:53  1259
  gpio-ir-tx.dtbo                    C: 07/27/2022 11:53 M: 07/27/2022 11:53  1096
  gpio-ir.dtbo                       C: 07/27/2022 11:53 M: 07/27/2022 11:53  1259
  gpio-key.dtbo                      C: 07/27/2022 11:52 M: 07/27/2022 11:52  1373
  gpio-no-bank0-irq.dtbo             C: 07/27/2022 11:53 M: 07/27/2022 11:53  274
  gpio-no-irq.dtbo                   C: 07/27/2022 11:52 M: 07/27/2022 11:52  258
  gpio-poweroff.dtbo                 C: 07/27/2022 11:53 M: 07/27/2022 11:53  1053
  gpio-shutdown.dtbo                 C: 07/27/2022 11:52 M: 07/27/2022 11:52  1345
  hd44780-lcd.dtbo                   C: 07/27/2022 11:53 M: 07/27/2022 11:53  1662
  hdmi-backlight-hwhack-gpio.dtbo    C: 07/27/2022 11:53 M: 07/27/2022 11:53  1166
  hifiberry-amp.dtbo                 C: 07/27/2022 11:53 M: 07/27/2022 11:53  779
  hifiberry-dac.dtbo                 C: 07/27/2022 11:53 M: 07/27/2022 11:53  655
  hifiberry-dacplus.dtbo             C: 07/27/2022 11:53 M: 07/27/2022 11:53  1916
  hifiberry-dacplusadc.dtbo          C: 07/27/2022 11:52 M: 07/27/2022 11:52  2004
  hifiberry-dacplusadcpro.dtbo       C: 07/27/2022 11:53 M: 07/27/2022 11:53  1921
  hifiberry-dacplusdsp.dtbo          C: 07/27/2022 11:53 M: 07/27/2022 11:53  699
  hifiberry-dacplushd.dtbo           C: 07/27/2022 11:52 M: 07/27/2022 11:52  2007
  hifiberry-digi-pro.dtbo            C: 07/27/2022 11:53 M: 07/27/2022 11:53  1125
  hifiberry-digi.dtbo                C: 07/27/2022 11:52 M: 07/27/2022 11:52  959
  highperi.dtbo                      C: 07/27/2022 11:52 M: 07/27/2022 11:52  1103
  hy28a.dtbo                         C: 07/27/2022 11:53 M: 07/27/2022 11:53  2444
  hy28b-2017.dtbo                    C: 07/27/2022 11:53 M: 07/27/2022 11:53  2893
  hy28b.dtbo                         C: 07/27/2022 11:52 M: 07/27/2022 11:52  2915
  i-sabre-q2m.dtbo                   C: 07/27/2022 11:52 M: 07/27/2022 11:52  893
  i2c-bcm2708.dtbo                   C: 07/27/2022 11:53 M: 07/27/2022 11:53  270
  i2c-gpio.dtbo                      C: 07/27/2022 11:52 M: 07/27/2022 11:52  1055
  i2c-mux.dtbo                       C: 07/27/2022 11:52 M: 07/27/2022 11:52  2185
  i2c-pwm-pca9685a.dtbo              C: 07/27/2022 11:53 M: 07/27/2022 11:53  648
  i2c-rtc-gpio.dtbo                  C: 07/27/2022 11:53 M: 07/27/2022 11:53  5680
  i2c-rtc.dtbo                       C: 07/27/2022 11:52 M: 07/27/2022 11:52  5954
  i2c-sensor.dtbo                    C: 07/27/2022 11:53 M: 07/27/2022 11:53  5336
  i2c0.dtbo                          C: 07/27/2022 11:53 M: 07/27/2022 11:53  1651
  i2c1.dtbo                          C: 07/27/2022 11:53 M: 07/27/2022 11:53  1004
  i2c3.dtbo                          C: 07/27/2022 11:52 M: 07/27/2022 11:52  907
  i2c4.dtbo                          C: 07/27/2022 11:53 M: 07/27/2022 11:53  907
  i2c5.dtbo                          C: 07/27/2022 11:53 M: 07/27/2022 11:53  911
  i2c6.dtbo                          C: 07/27/2022 11:53 M: 07/27/2022 11:53  909
  i2s-gpio28-31.dtbo                 C: 07/27/2022 11:53 M: 07/27/2022 11:53  307
  ilitek251x.dtbo                    C: 07/27/2022 11:53 M: 07/27/2022 11:53  1373
  imx219.dtbo                        C: 07/27/2022 11:52 M: 07/27/2022 11:52  3108
  imx477.dtbo                        C: 07/27/2022 11:52 M: 07/27/2022 11:52  3141
  iqaudio-codec.dtbo                 C: 07/27/2022 11:53 M: 07/27/2022 11:53  895
  iqaudio-dac.dtbo                   C: 07/27/2022 11:53 M: 07/27/2022 11:53  1272
  iqaudio-dacplus.dtbo               C: 07/27/2022 11:53 M: 07/27/2022 11:53  1511
  iqaudio-digi-wm8804-audio.dtbo     C: 07/27/2022 11:52 M: 07/27/2022 11:52  1326
  irs1125.dtbo                       C: 07/27/2022 11:53 M: 07/27/2022 11:53  2171
  jedec-spi-nor.dtbo                 C: 07/27/2022 11:52 M: 07/27/2022 11:52  5188
  justboom-both.dtbo                 C: 07/27/2022 11:53 M: 07/27/2022 11:53  1640
  justboom-dac.dtbo                  C: 07/27/2022 11:53 M: 07/27/2022 11:53  1276
  justboom-digi.dtbo                 C: 07/27/2022 11:53 M: 07/27/2022 11:52  955
  ltc294x.dtbo                       C: 07/27/2022 11:53 M: 07/27/2022 11:53  1916
  max98357a.dtbo                     C: 07/27/2022 11:53 M: 07/27/2022 11:53  1933
  mbed-dac.dtbo                      C: 07/27/2022 11:52 M: 07/27/2022 11:52  1605
  mcp23017.dtbo                      C: 07/27/2022 11:53 M: 07/27/2022 11:53  1658
  mcp23s17.dtbo                      C: 07/27/2022 11:53 M: 07/27/2022 11:53  15205
  mcp2515-can0.dtbo                  C: 07/27/2022 11:53 M: 07/27/2022 11:53  1793
  mcp2515-can1.dtbo                  C: 07/27/2022 11:53 M: 07/27/2022 11:53  1793
  mcp3008.dtbo                       C: 07/27/2022 11:53 M: 07/27/2022 11:53  4309
  mcp3202.dtbo                       C: 07/27/2022 11:52 M: 07/27/2022 11:52  4213
  mcp342x.dtbo                       C: 07/27/2022 11:52 M: 07/27/2022 11:52  2854
  media-center.dtbo                  C: 07/27/2022 11:52 M: 07/27/2022 11:52  3414
  merus-amp.dtbo                     C: 07/27/2022 11:53 M: 07/27/2022 11:53  1951
  midi-uart0.dtbo                    C: 07/27/2022 11:53 M: 07/27/2022 11:53  716
  midi-uart1.dtbo                    C: 07/27/2022 11:53 M: 07/27/2022 11:53  857
  miniuart-bt.dtbo                   C: 07/27/2022 11:53 M: 07/27/2022 11:53  1819
  mmc.dtbo                           C: 07/27/2022 11:53 M: 07/27/2022 11:53  1221
  mpu6050.dtbo                       C: 07/27/2022 11:53 M: 07/27/2022 11:53  841
  mz61581.dtbo                       C: 07/27/2022 11:53 M: 07/27/2022 11:53  2826
  ov5647.dtbo                        C: 07/27/2022 11:52 M: 07/27/2022 11:52  2440
  papirus.dtbo                       C: 07/27/2022 11:52 M: 07/27/2022 11:52  2356
  pibell.dtbo                        C: 07/27/2022 11:52 M: 07/27/2022 11:52  2334
  piglow.dtbo                        C: 07/27/2022 11:52 M: 07/27/2022 11:52  1594
  piscreen.dtbo                      C: 07/27/2022 11:52 M: 07/27/2022 11:52  2689
  piscreen2r.dtbo                    C: 07/27/2022 11:53 M: 07/27/2022 11:53  2593
  pisound.dtbo                       C: 07/27/2022 11:52 M: 07/27/2022 11:52  2454
  pitft22.dtbo                       C: 07/27/2022 11:52 M: 07/27/2022 11:52  1520
  pitft28-capacitive.dtbo            C: 07/27/2022 11:53 M: 07/27/2022 11:53  2361
  pitft28-resistive.dtbo             C: 07/27/2022 11:52 M: 07/27/2022 11:52  2746
  pitft35-resistive.dtbo             C: 07/27/2022 11:52 M: 07/27/2022 11:52  2766
  pps-gpio.dtbo                      C: 07/27/2022 11:52 M: 07/27/2022 11:52  1145
  pwm-2chan.dtbo                     C: 07/27/2022 11:53 M: 07/27/2022 11:53  1096
  pwm-ir-tx.dtbo                     C: 07/27/2022 11:53 M: 07/27/2022 11:53  1031
  pwm.dtbo                           C: 07/27/2022 11:53 M: 07/27/2022 11:53  985
  qca7000.dtbo                       C: 07/27/2022 11:53 M: 07/27/2022 11:53  1395
  rotary-encoder.dtbo                C: 07/27/2022 11:53 M: 07/27/2022 11:53  1922
  rpi-backlight.dtbo                 C: 07/27/2022 11:53 M: 07/27/2022 11:53  489
  rpi-cirrus-wm5102.dtbo             C: 07/27/2022 11:52 M: 07/27/2022 11:52  4081
  rpi-dac.dtbo                       C: 07/27/2022 11:53 M: 07/27/2022 11:53  643
  rpi-display.dtbo                   C: 07/27/2022 11:52 M: 07/27/2022 11:52  2574
  rpi-ft5406.dtbo                    C: 07/27/2022 11:52 M: 07/27/2022 11:52  842
  rpi-poe.dtbo                       C: 07/27/2022 11:53 M: 07/27/2022 11:53  2937
  rpi-proto.dtbo                     C: 07/27/2022 11:53 M: 07/27/2022 11:53  771
  rpi-sense.dtbo                     C: 07/27/2022 11:53 M: 07/27/2022 11:53  893
  rpi-tv.dtbo                        C: 07/27/2022 11:53 M: 07/27/2022 11:53  567
  rpivid-v4l2.dtbo                   C: 07/27/2022 11:53 M: 07/27/2022 11:53  1226
  rra-digidac1-wm8741-audio.dtbo     C: 07/27/2022 11:53 M: 07/27/2022 11:53  1298
  sc16is750-i2c.dtbo                 C: 07/27/2022 11:53 M: 07/27/2022 11:53  1353
  sc16is752-i2c.dtbo                 C: 07/27/2022 11:52 M: 07/27/2022 11:52  1353
  sc16is752-spi0.dtbo                C: 07/27/2022 11:53 M: 07/27/2022 11:53  1405
  sc16is752-spi1.dtbo                C: 07/27/2022 11:53 M: 07/27/2022 11:53  1921
  sdhost.dtbo                        C: 07/27/2022 11:52 M: 07/27/2022 11:52  968
  sdio.dtbo                          C: 07/27/2022 11:53 M: 07/27/2022 11:53  1889
  sdtweak.dtbo                       C: 06/12/2022 19:10 M: 06/12/2022 19:10  804
  sh1106-spi.dtbo                    C: 07/27/2022 11:52 M: 07/27/2022 11:52  2095
  smi-dev.dtbo                       C: 07/27/2022 11:53 M: 07/27/2022 11:53  404
  smi-nand.dtbo                      C: 07/27/2022 11:52 M: 07/27/2022 11:52  1476
  smi.dtbo                           C: 07/27/2022 11:53 M: 07/27/2022 11:53  981
  spi-gpio35-39.dtbo                 C: 07/27/2022 11:53 M: 07/27/2022 11:53  630
  spi-gpio40-45.dtbo                 C: 07/27/2022 11:52 M: 07/27/2022 11:52  795
  spi-rtc.dtbo                       C: 07/27/2022 11:53 M: 07/27/2022 11:53  635
  spi0-cs.dtbo                       C: 06/12/2022 19:10 M: 06/12/2022 19:10  895
  spi0-hw-cs.dtbo                    C: 06/12/2022 19:10 M: 06/12/2022 19:10  456
  spi1-1cs.dtbo                      C: 07/27/2022 11:53 M: 07/27/2022 11:53  1523
  spi1-2cs.dtbo                      C: 07/27/2022 11:53 M: 07/27/2022 11:53  1896
  spi1-3cs.dtbo                      C: 07/27/2022 11:53 M: 07/27/2022 11:53  2269
  spi2-1cs.dtbo                      C: 07/27/2022 11:53 M: 07/27/2022 11:53  1523
  spi2-2cs.dtbo                      C: 07/27/2022 11:52 M: 07/27/2022 11:52  1896
  spi2-3cs.dtbo                      C: 07/27/2022 11:52 M: 07/27/2022 11:52  2269
  spi3-1cs.dtbo                      C: 07/27/2022 11:52 M: 07/27/2022 11:52  1289
  spi3-2cs.dtbo                      C: 07/27/2022 11:52 M: 07/27/2022 11:52  1662
  spi4-1cs.dtbo                      C: 07/27/2022 11:53 M: 07/27/2022 11:53  1289
  spi4-2cs.dtbo                      C: 07/27/2022 11:53 M: 07/27/2022 11:53  1662
  spi5-1cs.dtbo                      C: 07/27/2022 11:53 M: 07/27/2022 11:53  1289
  spi5-2cs.dtbo                      C: 07/27/2022 11:52 M: 07/27/2022 11:52  1662
  spi6-1cs.dtbo                      C: 07/27/2022 11:52 M: 07/27/2022 11:52  1289
  spi6-2cs.dtbo                      C: 07/27/2022 11:52 M: 07/27/2022 11:52  1662
  ssd1306-spi.dtbo                   C: 07/27/2022 11:52 M: 07/27/2022 11:52  2096
  ssd1306.dtbo                       C: 07/27/2022 11:53 M: 07/27/2022 11:53  1122
  ssd1351-spi.dtbo                   C: 07/27/2022 11:53 M: 07/27/2022 11:53  2044
  superaudioboard.dtbo               C: 07/27/2022 11:53 M: 07/27/2022 11:53  1968
  sx150x.dtbo                        C: 07/27/2022 11:53 M: 07/27/2022 11:53  35570
  tc358743-audio.dtbo                C: 07/27/2022 11:53 M: 07/27/2022 11:53  1529
  tc358743.dtbo                      C: 07/27/2022 11:53 M: 07/27/2022 11:53  2363
  tinylcd35.dtbo                     C: 07/27/2022 11:53 M: 07/27/2022 11:53  4822
  tpm-slb9670.dtbo                   C: 07/27/2022 11:52 M: 07/27/2022 11:52  779
  uart0.dtbo                         C: 07/27/2022 11:53 M: 07/27/2022 11:53  928
  uart1.dtbo                         C: 07/27/2022 11:52 M: 07/27/2022 11:52  980
  uart2.dtbo                         C: 07/27/2022 11:52 M: 07/27/2022 11:52  589
  uart3.dtbo                         C: 07/27/2022 11:53 M: 07/27/2022 11:53  589
  uart4.dtbo                         C: 07/27/2022 11:53 M: 07/27/2022 11:53  589
  uart5.dtbo                         C: 07/27/2022 11:53 M: 07/27/2022 11:53  589
  udrc.dtbo                          C: 07/27/2022 11:52 M: 07/27/2022 11:52  3532
  upstream-pi4.dtbo                  C: 07/27/2022 11:53 M: 07/27/2022 11:53  2778
  upstream.dtbo                      C: 07/27/2022 11:53 M: 07/27/2022 11:53  2057
  vc4-fkms-v3d.dtbo                  C: 07/27/2022 11:53 M: 07/27/2022 11:53  1446
  vc4-kms-kippah-7inch.dtbo          C: 07/27/2022 11:52 M: 07/27/2022 11:52  1112
  vc4-kms-v3d-pi4.dtbo               C: 07/27/2022 11:52 M: 07/27/2022 11:52  3710
  vc4-kms-v3d.dtbo                   C: 07/27/2022 11:53 M: 07/27/2022 11:53  2689
  vga666.dtbo                        C: 07/27/2022 11:52 M: 07/27/2022 11:52  758
  w1-gpio-pullup.dtbo                C: 07/27/2022 11:53 M: 07/27/2022 11:53  1171
  w1-gpio.dtbo                       C: 07/27/2022 11:53 M: 07/27/2022 11:53  1036
  w5500.dtbo                         C: 07/27/2022 11:53 M: 07/27/2022 11:53  1558
  wittypi.dtbo                       C: 07/27/2022 11:53 M: 07/27/2022 11:53  1056
  jedec-spi-nor.dtbo.bak             C: 07/27/2022 11:40 M: 07/27/2022 11:40  5188
  ads7846.dtbo.bak                   C: 07/27/2022 11:40 M: 07/27/2022 11:40  2402
  dwc-otg.dtbo.bak                   C: 07/27/2022 11:40 M: 07/27/2022 11:40  293
  highperi.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1103
  ov5647.dtbo.bak                    C: 07/27/2022 11:40 M: 07/27/2022 11:40  2440
  uart2.dtbo.bak                     C: 07/27/2022 11:40 M: 07/27/2022 11:40  589
  pitft22.dtbo.bak                   C: 07/27/2022 11:40 M: 07/27/2022 11:40  1520
  spi2-3cs.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  2269
  i2c-mux.dtbo.bak                   C: 07/27/2022 11:40 M: 07/27/2022 11:40  2185
  media-center.dtbo.bak              C: 07/27/2022 11:40 M: 07/27/2022 11:40  3414
  spi5-2cs.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1662
  ssd1306-spi.dtbo.bak               C: 07/27/2022 11:40 M: 07/27/2022 11:40  2096
  rpi-cirrus-wm5102.dtbo.bak         C: 07/27/2022 11:40 M: 07/27/2022 11:40  4081
  adv7282m.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1654
  spi2-2cs.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1896
  dionaudio-loco-v2.dtbo.bak         C: 07/27/2022 11:40 M: 07/27/2022 11:40  1027
  balena-fin.dtbo.bak                C: 07/27/2022 11:40 M: 07/27/2022 11:40  2927
  adau7002-simple.dtbo.bak           C: 07/27/2022 11:40 M: 07/27/2022 11:40  1587
  vc4-kms-v3d-pi4.dtbo.bak           C: 07/27/2022 11:40 M: 07/27/2022 11:40  3710
  vga666.dtbo.bak                    C: 07/27/2022 11:40 M: 07/27/2022 11:40  758
  pps-gpio.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1145
  i2c3.dtbo.bak                      C: 07/27/2022 11:40 M: 07/27/2022 11:40  907
  dpi24.dtbo.bak                     C: 07/27/2022 11:40 M: 07/27/2022 11:40  975
  piscreen.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  2689
  sc16is752-i2c.dtbo.bak             C: 07/27/2022 11:40 M: 07/27/2022 11:40  1353
  sdtweak.dtbo.bak                   C: 06/12/2022 19:09 M: 06/12/2022 19:09  804
  cma.dtbo.bak                       C: 07/27/2022 11:40 M: 07/27/2022 11:40  964
  udrc.dtbo.bak                      C: 07/27/2022 11:40 M: 07/27/2022 11:40  3532
  gpio-no-irq.dtbo.bak               C: 07/27/2022 11:40 M: 07/27/2022 11:40  258
  goodix.dtbo.bak                    C: 07/27/2022 11:40 M: 07/27/2022 11:40  1437
  mcp342x.dtbo.bak                   C: 07/27/2022 11:40 M: 07/27/2022 11:40  2854
  piglow.dtbo.bak                    C: 07/27/2022 11:40 M: 07/27/2022 11:40  1594
  pibell.dtbo.bak                    C: 07/27/2022 11:40 M: 07/27/2022 11:40  2334
  audremap.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  971
  allo-katana-dac-audio.dtbo.bak     C: 07/27/2022 11:40 M: 07/27/2022 11:40  1659
  draws.dtbo.bak                     C: 07/27/2022 11:40 M: 07/27/2022 11:40  6079
  i2c-gpio.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1055
  allo-piano-dac-pcm512x-audio.dtbo.bak C: 07/27/2022 11:40 M: 07/27/2022 11:40  1011
  gpio-key.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1373
  imx219.dtbo.bak                    C: 07/27/2022 11:40 M: 07/27/2022 11:40  3108
  rpi-ft5406.dtbo.bak                C: 07/27/2022 11:40 M: 07/27/2022 11:40  842
  disable-bt.dtbo.bak                C: 07/27/2022 11:40 M: 07/27/2022 11:40  1073
  hifiberry-digi.dtbo.bak            C: 07/27/2022 11:40 M: 07/27/2022 11:40  959
  pitft35-resistive.dtbo.bak         C: 07/27/2022 11:40 M: 07/27/2022 11:40  2766
  uart1.dtbo.bak                     C: 07/27/2022 11:40 M: 07/27/2022 11:40  980
  spi0-hw-cs.dtbo.bak                C: 06/12/2022 19:09 M: 06/12/2022 19:09  456
  i2c-rtc.dtbo.bak                   C: 07/27/2022 11:40 M: 07/27/2022 11:40  5954
  at86rf233.dtbo.bak                 C: 07/27/2022 11:40 M: 07/27/2022 11:40  1632
  exc3000.dtbo.bak                   C: 07/27/2022 11:40 M: 07/27/2022 11:40  1562
  rpi-display.dtbo.bak               C: 07/27/2022 11:40 M: 07/27/2022 11:40  2574
  iqaudio-digi-wm8804-audio.dtbo.bak C: 07/27/2022 11:40 M: 07/27/2022 11:40  1326
  papirus.dtbo.bak                   C: 07/27/2022 11:40 M: 07/27/2022 11:40  2356
  hy28b.dtbo.bak                     C: 07/27/2022 11:40 M: 07/27/2022 11:40  2915
  googlevoicehat-soundcard.dtbo.bak  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1259
  hifiberry-dacplushd.dtbo.bak       C: 07/27/2022 11:40 M: 07/27/2022 11:40  2007
  spi-gpio40-45.dtbo.bak             C: 07/27/2022 11:40 M: 07/27/2022 11:40  795
  gpio-shutdown.dtbo.bak             C: 07/27/2022 11:40 M: 07/27/2022 11:40  1345
  akkordion-iqdacplus.dtbo.bak       C: 07/27/2022 11:40 M: 07/27/2022 11:40  1387
  vc4-kms-kippah-7inch.dtbo.bak      C: 07/27/2022 11:40 M: 07/27/2022 11:40  1112
  sh1106-spi.dtbo.bak                C: 07/27/2022 11:40 M: 07/27/2022 11:40  2095
  mcp3202.dtbo.bak                   C: 07/27/2022 11:40 M: 07/27/2022 11:40  4213
  mbed-dac.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1605
  spi6-2cs.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1662
  imx477.dtbo.bak                    C: 07/27/2022 11:40 M: 07/27/2022 11:40  3141
  spi3-2cs.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1662
  tpm-slb9670.dtbo.bak               C: 07/27/2022 11:40 M: 07/27/2022 11:40  779
  spi6-1cs.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1289
  sdhost.dtbo.bak                    C: 07/27/2022 11:40 M: 07/27/2022 11:40  968
  hifiberry-dacplusadc.dtbo.bak      C: 07/27/2022 11:40 M: 07/27/2022 11:40  2004
  spi3-1cs.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1289
  smi-nand.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1476
  pisound.dtbo.bak                   C: 07/27/2022 11:40 M: 07/27/2022 11:40  2454
  pitft28-resistive.dtbo.bak         C: 07/27/2022 11:40 M: 07/27/2022 11:40  2746
  justboom-digi.dtbo.bak             C: 07/27/2022 11:40 M: 07/27/2022 11:40  955
  dwc2.dtbo.bak                      C: 07/27/2022 11:40 M: 07/27/2022 11:40  801
  uart5.dtbo.bak                     C: 07/27/2022 11:40 M: 07/27/2022 11:40  589
  ltc294x.dtbo.bak                   C: 07/27/2022 11:40 M: 07/27/2022 11:40  1916
  gpio-ir.dtbo.bak                   C: 07/27/2022 11:40 M: 07/27/2022 11:40  1259
  hifiberry-dacplusadcpro.dtbo.bak   C: 07/27/2022 11:40 M: 07/27/2022 11:40  1921
  ssd1351-spi.dtbo.bak               C: 07/27/2022 11:40 M: 07/27/2022 11:40  2044
  tc358743.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  2363
  apds9960.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1338
  sc16is750-i2c.dtbo.bak             C: 07/27/2022 11:40 M: 07/27/2022 11:40  1353
  uart0.dtbo.bak                     C: 07/27/2022 11:40 M: 07/27/2022 11:40  928
  disable-wifi.dtbo.bak              C: 07/27/2022 11:40 M: 07/27/2022 11:40  387
  allo-piano-dac-plus-pcm512x-audio.dtbo.bak C: 07/27/2022 11:40 M: 07/27/2022 11:40  1639
  sdio.dtbo.bak                      C: 07/27/2022 11:40 M: 07/27/2022 11:40  1889
  pwm.dtbo.bak                       C: 07/27/2022 11:40 M: 07/27/2022 11:40  985
  applepi-dac.dtbo.bak               C: 07/27/2022 11:40 M: 07/27/2022 11:40  1454
  rotary-encoder.dtbo.bak            C: 07/27/2022 11:40 M: 07/27/2022 11:40  1922
  mcp23s17.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  15205
  hy28a.dtbo.bak                     C: 07/27/2022 11:40 M: 07/27/2022 11:40  2444
  hifiberry-dacplusdsp.dtbo.bak      C: 07/27/2022 11:40 M: 07/27/2022 11:40  699
  i2c-pwm-pca9685a.dtbo.bak          C: 07/27/2022 11:40 M: 07/27/2022 11:40  648
  audioinjector-ultra.dtbo.bak       C: 07/27/2022 11:40 M: 07/27/2022 11:40  1890
  i2c6.dtbo.bak                      C: 07/27/2022 11:40 M: 07/27/2022 11:40  909
  enc28j60-spi2.dtbo.bak             C: 07/27/2022 11:40 M: 07/27/2022 11:40  1279
  spi-gpio35-39.dtbo.bak             C: 07/27/2022 11:40 M: 07/27/2022 11:40  630
  smi-dev.dtbo.bak                   C: 07/27/2022 11:40 M: 07/27/2022 11:40  404
  i2c1.dtbo.bak                      C: 07/27/2022 11:40 M: 07/27/2022 11:40  1004
  justboom-dac.dtbo.bak              C: 07/27/2022 11:40 M: 07/27/2022 11:40  1276
  tinylcd35.dtbo.bak                 C: 07/27/2022 11:40 M: 07/27/2022 11:40  4822
  rpi-dac.dtbo.bak                   C: 07/27/2022 11:40 M: 07/27/2022 11:40  643
  superaudioboard.dtbo.bak           C: 07/27/2022 11:40 M: 07/27/2022 11:40  1968
  mcp23017.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1658
  sx150x.dtbo.bak                    C: 07/27/2022 11:40 M: 07/27/2022 11:40  35570
  hifiberry-amp.dtbo.bak             C: 07/27/2022 11:40 M: 07/27/2022 11:40  779
  upstream-pi4.dtbo.bak              C: 07/27/2022 11:40 M: 07/27/2022 11:40  2778
  sc16is752-spi1.dtbo.bak            C: 07/27/2022 11:40 M: 07/27/2022 11:40  1921
  piscreen2r.dtbo.bak                C: 07/27/2022 11:40 M: 07/27/2022 11:40  2593
  gpio-poweroff.dtbo.bak             C: 07/27/2022 11:40 M: 07/27/2022 11:40  1053
  spi0-cs.dtbo.bak                   C: 06/12/2022 19:09 M: 06/12/2022 19:09  895
  tc358743-audio.dtbo.bak            C: 07/27/2022 11:40 M: 07/27/2022 11:40  1529
  dionaudio-loco.dtbo.bak            C: 07/27/2022 11:40 M: 07/27/2022 11:40  663
  ilitek251x.dtbo.bak                C: 07/27/2022 11:40 M: 07/27/2022 11:40  1373
  allo-digione.dtbo.bak              C: 07/27/2022 11:40 M: 07/27/2022 11:40  1208
  i2c-rtc-gpio.dtbo.bak              C: 07/27/2022 11:40 M: 07/27/2022 11:40  5680
  hy28b-2017.dtbo.bak                C: 07/27/2022 11:40 M: 07/27/2022 11:40  2893
  qca7000.dtbo.bak                   C: 07/27/2022 11:40 M: 07/27/2022 11:40  1395
  gpio-fan.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1259
  miniuart-bt.dtbo.bak               C: 07/27/2022 11:40 M: 07/27/2022 11:40  1819
  uart4.dtbo.bak                     C: 07/27/2022 11:40 M: 07/27/2022 11:40  589
  pwm-2chan.dtbo.bak                 C: 07/27/2022 11:40 M: 07/27/2022 11:40  1096
  smi.dtbo.bak                       C: 07/27/2022 11:40 M: 07/27/2022 11:40  981
  spi4-2cs.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1662
  act-led.dtbo.bak                   C: 07/27/2022 11:40 M: 07/27/2022 11:40  569
  midi-uart1.dtbo.bak                C: 07/27/2022 11:40 M: 07/27/2022 11:40  857
  mcp2515-can1.dtbo.bak              C: 07/27/2022 11:40 M: 07/27/2022 11:40  1793
  spi4-1cs.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1289
  i2c-sensor.dtbo.bak                C: 07/27/2022 11:40 M: 07/27/2022 11:40  5336
  rpi-poe.dtbo.bak                   C: 07/27/2022 11:40 M: 07/27/2022 11:40  2937
  spi1-1cs.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1523
  upstream.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  2057
  rpi-backlight.dtbo.bak             C: 07/27/2022 11:40 M: 07/27/2022 11:40  489
  pwm-ir-tx.dtbo.bak                 C: 07/27/2022 11:40 M: 07/27/2022 11:40  1031
  i2c5.dtbo.bak                      C: 07/27/2022 11:40 M: 07/27/2022 11:40  911
  dht11.dtbo.bak                     C: 07/27/2022 11:40 M: 07/27/2022 11:40  1019
  gpio-no-bank0-irq.dtbo.bak         C: 07/27/2022 11:40 M: 07/27/2022 11:40  274
  hifiberry-dacplus.dtbo.bak         C: 07/27/2022 11:40 M: 07/27/2022 11:40  1916
  w1-gpio.dtbo.bak                   C: 07/27/2022 11:40 M: 07/27/2022 11:40  1036
  wittypi.dtbo.bak                   C: 07/27/2022 11:40 M: 07/27/2022 11:40  1056
  i2c0.dtbo.bak                      C: 07/27/2022 11:40 M: 07/27/2022 11:40  1651
  i2s-gpio28-31.dtbo.bak             C: 07/27/2022 11:41 M: 07/27/2022 11:41  307
  justboom-both.dtbo.bak             C: 07/27/2022 11:41 M: 07/27/2022 11:41  1640
  audioinjector-addons.dtbo.bak      C: 07/27/2022 11:41 M: 07/27/2022 11:41  1866
  spi1-3cs.dtbo.bak                  C: 07/27/2022 11:41 M: 07/27/2022 11:41  2269
  pitft28-capacitive.dtbo.bak        C: 07/27/2022 11:41 M: 07/27/2022 11:41  2361
  audioinjector-wm8731-audio.dtbo.bak C: 07/27/2022 11:41 M: 07/27/2022 11:41  787
  irs1125.dtbo.bak                   C: 07/27/2022 11:41 M: 07/27/2022 11:41  2171
  sc16is752-spi0.dtbo.bak            C: 07/27/2022 11:41 M: 07/27/2022 11:41  1405
  spi1-2cs.dtbo.bak                  C: 07/27/2022 11:41 M: 07/27/2022 11:41  1896
  fe-pi-audio.dtbo.bak               C: 07/27/2022 11:41 M: 07/27/2022 11:41  1908
  i2c-bcm2708.dtbo.bak               C: 07/27/2022 11:41 M: 07/27/2022 11:41  270
  hdmi-backlight-hwhack-gpio.dtbo.bak C: 07/27/2022 11:41 M: 07/27/2022 11:41  1166
  vc4-kms-v3d.dtbo.bak               C: 07/27/2022 11:41 M: 07/27/2022 11:41  2689
  hd44780-lcd.dtbo.bak               C: 07/27/2022 11:41 M: 07/27/2022 11:41  1662
  adau1977-adc.dtbo.bak              C: 07/27/2022 11:41 M: 07/27/2022 11:41  1027
  rra-digidac1-wm8741-audio.dtbo.bak C: 07/27/2022 11:41 M: 07/27/2022 11:41  1298
  uart3.dtbo.bak                     C: 07/27/2022 11:41 M: 07/27/2022 11:41  589
  mpu6050.dtbo.bak                   C: 07/27/2022 11:41 M: 07/27/2022 11:41  841
  hifiberry-digi-pro.dtbo.bak        C: 07/27/2022 11:41 M: 07/27/2022 11:41  1125
  rpi-tv.dtbo.bak                    C: 07/27/2022 11:41 M: 07/27/2022 11:41  567
  midi-uart0.dtbo.bak                C: 07/27/2022 11:41 M: 07/27/2022 11:41  716
  audioinjector-isolated-soundcard.dtbo.bak C: 07/27/2022 11:41 M: 07/27/2022 11:41  1602
  rpivid-v4l2.dtbo.bak               C: 07/27/2022 11:41 M: 07/27/2022 11:41  1226
  anyspi.dtbo.bak                    C: 07/27/2022 11:41 M: 07/27/2022 11:41  3895
  mcp2515-can0.dtbo.bak              C: 07/27/2022 11:41 M: 07/27/2022 11:41  1793
  gpio-ir-tx.dtbo.bak                C: 07/27/2022 11:41 M: 07/27/2022 11:41  1096
  dpi18.dtbo.bak                     C: 07/27/2022 11:41 M: 07/27/2022 11:41  951
  adv728x-m.dtbo.bak                 C: 07/27/2022 11:41 M: 07/27/2022 11:41  2138
  enc28j60.dtbo.bak                  C: 07/27/2022 11:41 M: 07/27/2022 11:41  1403
  audiosense-pi.dtbo.bak             C: 07/27/2022 11:41 M: 07/27/2022 11:41  2187
  mcp3008.dtbo.bak                   C: 07/27/2022 11:41 M: 07/27/2022 11:41  4309
  ads1115.dtbo.bak                   C: 07/27/2022 11:41 M: 07/27/2022 11:41  2517
  vc4-fkms-v3d.dtbo.bak              C: 07/27/2022 11:41 M: 07/27/2022 11:41  1446
  merus-amp.dtbo.bak                 C: 07/27/2022 11:41 M: 07/27/2022 11:41  1951
  iqaudio-dac.dtbo.bak               C: 07/27/2022 11:41 M: 07/27/2022 11:41  1272
  rpi-sense.dtbo.bak                 C: 07/27/2022 11:41 M: 07/27/2022 11:41  893
  i2c4.dtbo.bak                      C: 07/27/2022 11:41 M: 07/27/2022 11:41  907
  ssd1306.dtbo.bak                   C: 07/27/2022 11:41 M: 07/27/2022 11:41  1122
  allo-boss-dac-pcm512x-audio.dtbo.bak C: 07/27/2022 11:41 M: 07/27/2022 11:41  1469
  iqaudio-codec.dtbo.bak             C: 07/27/2022 11:41 M: 07/27/2022 11:41  895
  w1-gpio-pullup.dtbo.bak            C: 07/27/2022 11:41 M: 07/27/2022 11:41  1171
  mmc.dtbo.bak                       C: 07/27/2022 11:41 M: 07/27/2022 11:41  1221
  rpi-proto.dtbo.bak                 C: 07/27/2022 11:41 M: 07/27/2022 11:41  771
  ads1015.dtbo.bak                   C: 07/27/2022 11:41 M: 07/27/2022 11:41  2517
  max98357a.dtbo.bak                 C: 07/27/2022 11:41 M: 07/27/2022 11:41  1933
  spi5-1cs.dtbo.bak                  C: 07/27/2022 11:41 M: 07/27/2022 11:41  1289
  iqaudio-dacplus.dtbo.bak           C: 07/27/2022 11:41 M: 07/27/2022 11:41  1511
  mz61581.dtbo.bak                   C: 07/27/2022 11:41 M: 07/27/2022 11:41  2826
  hifiberry-dac.dtbo.bak             C: 07/27/2022 11:41 M: 07/27/2022 11:41  655
  spi-rtc.dtbo.bak                   C: 07/27/2022 11:41 M: 07/27/2022 11:41  635
  spi2-1cs.dtbo.bak                  C: 07/27/2022 11:41 M: 07/27/2022 11:41  1523
  w5500.dtbo.bak                     C: 07/27/2022 11:41 M: 07/27/2022 11:41  1558
  ov9281.dtbo                        C: 07/27/2022 11:52 M: 07/27/2022 11:52  2981
  seeed-can-fd-hat-v2.dtbo           C: 07/27/2022 11:52 M: 07/27/2022 11:52  2873
  wm8960-soundcard.dtbo              C: 07/27/2022 11:52 M: 07/27/2022 11:52  2287
  adafruit18.dtbo                    C: 07/27/2022 11:52 M: 07/27/2022 11:52  1624
  ghost-amp.dtbo                     C: 07/27/2022 11:52 M: 07/27/2022 11:52  2606
  pcie-32bit-dma.dtbo                C: 07/27/2022 11:52 M: 07/27/2022 11:52  209
  spi0-2cs.dtbo                      C: 07/27/2022 11:52 M: 07/27/2022 11:52  1045
  spi0-1cs.dtbo                      C: 07/27/2022 11:53 M: 07/27/2022 11:53  1045
  hifiberry-amp100.dtbo              C: 07/27/2022 11:53 M: 07/27/2022 11:53  2070
  mcp251xfd.dtbo                     C: 07/27/2022 11:53 M: 07/27/2022 11:53  6428
  seeed-can-fd-hat-v1.dtbo           C: 07/27/2022 11:53 M: 07/27/2022 11:53  3387
  allo-boss2-dac-audio.dtbo          C: 07/27/2022 11:53 M: 07/27/2022 11:53  1832
  ov7251.dtbo                        C: 07/27/2022 11:53 M: 07/27/2022 11:53  2979
  sainsmart18.dtbo                   C: 07/27/2022 11:53 M: 07/27/2022 11:53  1420
  pifi-40.dtbo                       C: 07/27/2022 11:53 M: 07/27/2022 11:53  1382
  fsm-demo.dtbo                      C: 07/27/2022 11:53 M: 07/27/2022 11:53  1940
  maxtherm.dtbo                      C: 07/27/2022 11:53 M: 07/27/2022 11:53  3620
  imx290.dtbo                        C: 07/27/2022 11:53 M: 07/27/2022 11:53  3836
  pifacedigital.dtbo                 C: 07/27/2022 11:53 M: 07/27/2022 11:53  1709
  pca953x.dtbo                       C: 07/27/2022 11:53 M: 07/27/2022 11:53  5037
  ov9281.dtbo.bak                    C: 07/27/2022 11:40 M: 07/27/2022 11:40  2981
  seeed-can-fd-hat-v2.dtbo.bak       C: 07/27/2022 11:40 M: 07/27/2022 11:40  2873
  wm8960-soundcard.dtbo.bak          C: 07/27/2022 11:40 M: 07/27/2022 11:40  2287
  adafruit18.dtbo.bak                C: 07/27/2022 11:40 M: 07/27/2022 11:40  1624
  ghost-amp.dtbo.bak                 C: 07/27/2022 11:40 M: 07/27/2022 11:40  2606
  pcie-32bit-dma.dtbo.bak            C: 07/27/2022 11:40 M: 07/27/2022 11:40  209
  spi0-2cs.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1045
  spi0-1cs.dtbo.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1045
  hifiberry-amp100.dtbo.bak          C: 07/27/2022 11:40 M: 07/27/2022 11:40  2070
  mcp251xfd.dtbo.bak                 C: 07/27/2022 11:40 M: 07/27/2022 11:40  6428
  seeed-can-fd-hat-v1.dtbo.bak       C: 07/27/2022 11:40 M: 07/27/2022 11:40  3387
  allo-boss2-dac-audio.dtbo.bak      C: 07/27/2022 11:40 M: 07/27/2022 11:40  1832
  ov7251.dtbo.bak                    C: 07/27/2022 11:40 M: 07/27/2022 11:40  2979
  sainsmart18.dtbo.bak               C: 07/27/2022 11:41 M: 07/27/2022 11:41  1420
  pifi-40.dtbo.bak                   C: 07/27/2022 11:41 M: 07/27/2022 11:41  1382
  fsm-demo.dtbo.bak                  C: 07/27/2022 11:41 M: 07/27/2022 11:41  1940
  maxtherm.dtbo.bak                  C: 07/27/2022 11:41 M: 07/27/2022 11:41  3620
  imx290.dtbo.bak                    C: 07/27/2022 11:41 M: 07/27/2022 11:41  3836
  pifacedigital.dtbo.bak             C: 07/27/2022 11:41 M: 07/27/2022 11:41  1709
  pca953x.dtbo.bak                   C: 07/27/2022 11:41 M: 07/27/2022 11:41  5037
README                               C: 08/12/2020 12:19 M: 07/31/2020 16:48  1514
bootcode.bin                         C: 07/27/2022 11:52 M: 07/27/2022 11:52  52456
cmdline.txt                          C: 08/12/2020 12:19 M: 08/10/2020 13:21  186
config.txt                           C: 09/06/2020 00:12 M: 09/06/2020 00:12  1233
fixup.dat                            C: 07/27/2022 11:52 M: 07/27/2022 11:52  7279
fixup4.dat                           C: 07/27/2022 11:52 M: 07/27/2022 11:52  5411
fixup4cd.dat                         C: 07/27/2022 11:52 M: 07/27/2022 11:52  3213
fixup4db.dat                         C: 07/27/2022 11:52 M: 07/27/2022 11:52  8426
fixup4x.dat                          C: 07/27/2022 11:52 M: 07/27/2022 11:52  8420
fixup_cd.dat                         C: 07/27/2022 11:52 M: 07/27/2022 11:52  3213
fixup_db.dat                         C: 07/27/2022 11:52 M: 07/27/2022 11:52  10269
fixup_x.dat                          C: 07/27/2022 11:52 M: 07/27/2022 11:52  10269
start.elf                            C: 07/27/2022 11:52 M: 07/27/2022 11:52  2965696
start4.elf                           C: 07/27/2022 11:52 M: 07/27/2022 11:52  2241504
start4cd.elf                         C: 07/27/2022 11:52 M: 07/27/2022 11:52  801564
start4db.elf                         C: 07/27/2022 11:52 M: 07/27/2022 11:52  3737928
start4x.elf                          C: 07/27/2022 11:52 M: 07/27/2022 11:52  2993544
start_cd.elf                         C: 07/27/2022 11:52 M: 07/27/2022 11:52  801564
start_db.elf                         C: 07/27/2022 11:52 M: 07/27/2022 11:52  4809800
start_x.elf                          C: 07/27/2022 11:52 M: 07/27/2022 11:52  3717256
vmlinux                              C: 07/27/2022 11:41 M: 07/27/2022 11:41  23859712
vmlinuz.bak                          C: 07/27/2022 11:40 M: 07/27/2022 11:40  8504670
bcm2710-rpi-2-b.dtb                  C: 07/27/2022 11:52 M: 07/27/2022 11:52  27226
bcm2710-rpi-3-b-plus.dtb             C: 07/27/2022 11:52 M: 07/27/2022 11:52  29343
bcm2710-rpi-3-b.dtb                  C: 07/27/2022 11:52 M: 07/27/2022 11:52  28724
bcm2710-rpi-cm3.dtb                  C: 07/27/2022 11:52 M: 07/27/2022 11:52  27033
bcm2711-rpi-4-b.dtb                  C: 07/27/2022 11:52 M: 07/27/2022 11:52  47640
bcm2837-rpi-3-a-plus.dtb             C: 07/27/2022 11:52 M: 07/27/2022 11:52  20820
bcm2837-rpi-3-b-plus.dtb             C: 07/27/2022 11:52 M: 07/27/2022 11:52  21689
bcm2837-rpi-3-b.dtb                  C: 07/27/2022 11:52 M: 07/27/2022 11:52  21269
bcm2837-rpi-cm3-io3.dtb              C: 07/27/2022 11:52 M: 07/27/2022 11:52  20596
boot.scr                             C: 07/27/2022 11:52 M: 07/27/2022 11:52  4624
initrd.img                           C: 07/27/2022 11:52 M: 07/27/2022 11:52  29173774
meta-data                            C: 08/12/2020 12:19 M: 07/31/2020 16:48  240
overlay_map.dtb                      C: 07/27/2022 11:52 M: 07/27/2022 11:52  1559
syscfg.txt                           C: 08/12/2020 12:19 M: 07/31/2020 16:48  327
uboot_rpi_3.bin                      C: 06/12/2022 19:42 M: 06/12/2022 19:42  516416
uboot_rpi_4.bin                      C: 06/12/2022 19:42 M: 06/12/2022 19:42  572064
user-data                            C: 08/12/2020 12:19 M: 07/31/2020 16:48  2114
usercfg.txt                          C: 06/15/2022 22:43 M: 06/15/2022 22:43  474
vmlinuz                              C: 07/27/2022 11:52 M: 07/27/2022 11:52  8504670
initrd.img.bak                       C: 07/27/2022 11:40 M: 07/27/2022 11:40  29172470
auto_decompress_kernel               C: 09/06/2020 00:13 M: 09/06/2020 00:13  1078
boot.scr.bak                         C: 07/27/2022 11:40 M: 07/27/2022 11:40  4624
bcm2710-rpi-3-b.dtb.bak              C: 07/27/2022 11:40 M: 07/27/2022 11:40  28724
bcm2710-rpi-cm3.dtb.bak              C: 07/27/2022 11:40 M: 07/27/2022 11:40  27033
overlay_map.dtb.bak                  C: 07/27/2022 11:40 M: 07/27/2022 11:40  1559
bcm2837-rpi-3-b-plus.dtb.bak         C: 07/27/2022 11:40 M: 07/27/2022 11:40  21689
bcm2837-rpi-cm3-io3.dtb.bak          C: 07/27/2022 11:40 M: 07/27/2022 11:40  20596
bcm2837-rpi-3-a-plus.dtb.bak         C: 07/27/2022 11:40 M: 07/27/2022 11:40  20820
bcm2837-rpi-3-b.dtb.bak              C: 07/27/2022 11:40 M: 07/27/2022 11:40  21269
bcm2711-rpi-4-b.dtb.bak              C: 07/27/2022 11:40 M: 07/27/2022 11:40  47640
bcm2710-rpi-3-b-plus.dtb.bak         C: 07/27/2022 11:40 M: 07/27/2022 11:40  29343
bcm2710-rpi-2-b.dtb.bak              C: 07/27/2022 11:40 M: 07/27/2022 11:40  27226
uboot_rpi_arm64.bin                  C: 06/12/2022 19:42 M: 06/12/2022 19:42  558456
start4.elf.bak                       C: 07/27/2022 11:40 M: 07/27/2022 11:40  2241504
fixup4db.dat.bak                     C: 07/27/2022 11:40 M: 07/27/2022 11:40  8426
start.elf.bak                        C: 07/27/2022 11:40 M: 07/27/2022 11:40  2965696
start4x.elf.bak                      C: 07/27/2022 11:40 M: 07/27/2022 11:40  2993544
fixup_x.dat.bak                      C: 07/27/2022 11:40 M: 07/27/2022 11:40  10269
start4db.elf.bak                     C: 07/27/2022 11:40 M: 07/27/2022 11:40  3737928
fixup4cd.dat.bak                     C: 07/27/2022 11:40 M: 07/27/2022 11:40  3213
start4cd.elf.bak                     C: 07/27/2022 11:40 M: 07/27/2022 11:40  801564
fixup_db.dat.bak                     C: 07/27/2022 11:40 M: 07/27/2022 11:40  10269
fixup.dat.bak                        C: 07/27/2022 11:40 M: 07/27/2022 11:40  7279
bootcode.bin.bak                     C: 07/27/2022 11:40 M: 07/27/2022 11:40  52456
fixup4x.dat.bak                      C: 07/27/2022 11:40 M: 07/27/2022 11:40  8420
start_db.elf.bak                     C: 07/27/2022 11:40 M: 07/27/2022 11:40  4809800
fixup4.dat.bak                       C: 07/27/2022 11:40 M: 07/27/2022 11:40  5411
start_cd.elf.bak                     C: 07/27/2022 11:40 M: 07/27/2022 11:40  801564
fixup_cd.dat.bak                     C: 07/27/2022 11:40 M: 07/27/2022 11:40  3213
start_x.elf.bak                      C: 07/27/2022 11:40 M: 07/27/2022 11:40  3717256
bcm2711-rpi-400.dtb                  C: 07/27/2022 11:52 M: 07/27/2022 11:52  47801
bcm2711-rpi-cm4.dtb                  C: 07/27/2022 11:52 M: 07/27/2022 11:52  47773
bcm2710-rpi-zero-2.dtb               C: 07/27/2022 11:52 M: 07/27/2022 11:52  27893
bcm2711-rpi-400.dtb.bak              C: 07/27/2022 11:40 M: 07/27/2022 11:40  47801
bcm2711-rpi-cm4.dtb.bak              C: 07/27/2022 11:40 M: 07/27/2022 11:40  47773
bcm2710-rpi-zero-2.dtb.bak           C: 07/27/2022 11:40 M: 07/27/2022 11:40  27893
vmlinux.bak                          C: 06/12/2022 19:56 M: 06/12/2022 19:56  23859712
check.md5                            C: 07/27/2022 11:41 M: 07/27/2022 11:41  114
System Volume Information            C: 06/13/2022 08:52 M: 06/13/2022 08:52  /
  WPSettings.dat                     C: 06/13/2022 08:52 M: 06/13/2022 08:52  12
  IndexerVolumeGuid                  C: 06/13/2022 08:52 M: 06/13/2022 08:52  76
  EDP                                C: 08/02/2022 08:34 M: 08/02/2022 08:34  /
    Recovery                         C: 08/02/2022 08:34 M: 08/02/2022 08:34  /
 
@mjs513 - It's getting interesting now:)

Here is the output from an ext4 formatted thumb drive 2nd partition.
Code:
Ram Drive of size: 65536 initialized
Set Storage Index drive to 0
Initializing USB Drives ...
 === Drive index 0 found ===

Try Partition list
Partition Table
	part,boot,bgnCHS[3],type,endCHS[3],start,length
FAT32:	1,0,0x4,0x1,0x4,0xB,0xFE,0xC2,0xFF,2048,15108096
ext2/3/4:	2,0,0x8F,0xE4,0xAC,0x83,0xFE,0xFF,0xFF,15110144,15108096
pt_#0:	3,0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0,0
pt_#0:	4,0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0,0
	 < unused area starting at: 30218240 length 601 >
Found new Volume:0
myext4fs1.begin(sda1) Failed: Drive plugged in?
myext4fs2.begin(sda2): passed...
Set Storage Index drive 2 to 2
SD card is inserted...
myext4fs4.begin(sdd1): passed...
Set Storage Index drive 3 to 3
Initializaton complete.

Menu Options:
	1 - List Drives
	2 - Select USB Drive
	l - List files on disk
	e - Erase files on disk
	r - reset MTP
	u - unmount MTP
	h - Menu


Dump Storage list(4)
store:0 storage:10001 name:RAM fs:20001cfc
store:1 storage:20001 name:MSC0-16GFAT32P1 fs:2001ada0
store:2 storage:30001 name:16GUSBEXT4P2 fs:20010a40
store:3 storage:40001 name:32GSDEXT4 fs:20011080

Dump Index List
Drive # 2 Selected

 Space Used = 206655488
Filesystem Size = 7735345152
lost+found                           M: 08/16/2022 22:40  /
boxgetput.bas                         756
TeensyEXT4V3                         M: 09/04/2022 02:37  /
  .gitignore                         M: 09/04/2022 02:37  270
  LICENSE                            M: 09/04/2022 02:37  1071
  README.md                          M: 09/04/2022 02:37  3067
  library.properties                 M: 09/04/2022 02:37  155
  examples                           M: 09/04/2022 02:37  /
    Datalogger                       M: 09/04/2022 02:37  /
      Datalogger.ino                 M: 09/04/2022 02:37  4082
    DumpFile                         M: 09/04/2022 02:37  /
      DumpFile.ino                   M: 09/04/2022 02:37  3700
    Files                            M: 09/04/2022 02:37  /
      Files.ino                      M: 09/04/2022 02:37  4191
    ListFiles                        M: 09/04/2022 02:37  /
      ListFiles.ino                  M: 09/04/2022 02:37  4975
    ReadWrite                        M: 09/04/2022 02:37  /
      ReadWrite.ino                  M: 09/04/2022 02:37  4106
    TeensyEXT4test                   M: 09/04/2022 02:37  /
      TeensyEXT4test.ino             M: 09/04/2022 02:37  12156
    copyFilesUSB                     M: 09/04/2022 02:37  /
      copyFilesUSB.ino               M: 09/04/2022 02:37  12927
    ext4DeviceInfo                   M: 09/04/2022 02:37  /
      ext4DeviceInfo.ino             M: 09/04/2022 02:37  4599
    ext4Formatter                    M: 09/04/2022 02:37  /
      ext4Formatter.ino              M: 09/04/2022 02:37  2859
    ext4Usage                        M: 09/04/2022 02:37  /
      ext4Usage.ino                  M: 09/04/2022 02:37  8887
    wavePlayerExt4                   M: 09/04/2022 02:37  /
      play_FS_wav.cpp                M: 09/04/2022 02:37  17575
      play_FS_wav.h                  M: 09/04/2022 02:37  2738
      wavePlayerExt4.ino             M: 09/04/2022 02:37  6773
  extras                             M: 09/04/2022 02:37  /
    32MEGfile.dat.zip                M: 09/04/2022 02:37  38616
  src                                M: 09/04/2022 02:37  /
    ext4                             M: 09/04/2022 02:37  /
      ext4.c                         M: 09/04/2022 02:37  66585
      ext4.h                         M: 09/04/2022 02:37  18237
      ext4_balloc.c                  M: 09/04/2022 02:37  18455
      ext4_balloc.h                  M: 09/04/2022 02:37  3823
      ext4_bcache.c                  M: 09/04/2022 02:37  8118
      ext4_bcache.h                  M: 09/04/2022 02:37  8551
      ext4_bitmap.c                  M: 09/04/2022 02:37  3325
      ext4_bitmap.h                  M: 09/04/2022 02:37  3188
      ext4_block_group.c             M: 09/04/2022 02:37  4308
      ext4_block_group.h             M: 09/04/2022 02:37  9959
      ext4_blockdev.c                M: 09/04/2022 02:37  10624
      ext4_blockdev.h                M: 09/04/2022 02:37  9328
      ext4_config.h                  M: 09/04/2022 02:37  5621
      ext4_crc32.c                   M: 09/04/2022 02:37  9619
      ext4_crc32.h                   M: 09/04/2022 02:37  2318
      ext4_debug.c                   M: 09/04/2022 02:37  3174
      ext4_debug.h                   M: 09/04/2022 02:37  5443
      ext4_dir.c                     M: 09/04/2022 02:37  19347
      ext4_dir.h                     M: 09/04/2022 02:37  8973
      ext4_dir_idx.c                 M: 09/04/2022 02:37  39969
      ext4_dir_idx.h                 M: 09/04/2022 02:37  3517
      ext4_errno.h                   M: 09/04/2022 02:37  2955
      ext4_extent.c                  M: 09/04/2022 02:37  58568
      ext4_extent.h                  M: 09/04/2022 02:37  2475
      ext4_fs.c                      M: 09/04/2022 02:37  49057
      ext4_fs.h                      M: 09/04/2022 02:37  8774
      ext4_hash.c                    M: 09/04/2022 02:37  8810
      ext4_hash.h                    M: 09/04/2022 02:37  2368
      ext4_ialloc.c                  M: 09/04/2022 02:37  10247
      ext4_ialloc.h                  M: 09/04/2022 02:37  2882
      ext4_inode.c                   M: 09/04/2022 02:37  10674
      ext4_inode.h                   M: 09/04/2022 02:37  11164
      ext4_journal.c                 M: 09/04/2022 02:37  61421
      ext4_journal.h                 M: 09/04/2022 02:37  4137
      ext4_mbr.c                     M: 09/04/2022 02:37  5645
      ext4_mbr.h                     M: 09/04/2022 02:37  2294
      ext4_misc.h                    M: 09/04/2022 02:37  4889
      ext4_mkfs.c                    M: 09/04/2022 02:37  24038
      ext4_mkfs.h                    M: 09/04/2022 02:37  2452
      ext4_oflags.h                  M: 09/04/2022 02:37  2531
      ext4_super.c                   M: 09/04/2022 02:37  7226
      ext4_super.h                   M: 09/04/2022 02:37  7534
      ext4_trans.c                   M: 09/04/2022 02:37  3049
      ext4_trans.h                   M: 09/04/2022 02:37  3097
      ext4_types.h                   M: 09/04/2022 02:37  27821
      ext4_xattr.c                   M: 09/04/2022 02:37  41023
      ext4_xattr.h                   M: 09/04/2022 02:37  3204
    ext4FS.cpp                       M: 09/04/2022 02:37  16746
    ext4FS.h                         M: 09/04/2022 02:37  14424
    misc                             M: 09/04/2022 02:37  /
      queue.h                        M: 09/04/2022 02:37  23861
      tree.h                         M: 09/04/2022 02:37  27507

And a screenshot from the filemanager:
Screenshot at 2022-09-05 13-51-17.png

I also tried the listfiles sketch in the TeensyEXTV3 examples folder:
Code:
Teensy lwext file list

Initializing ext4FS ...
Please wait...
SD card is inserted...
myext4fs.begin(sda2): passed...
Volume Name: 16GUSBEXT4P2
Space Used = 206655488
Filesystem Size = 7735345152
Directory
---------
lost+found/
boxgetput.bas                         756
TeensyEXT4V3/
  .gitignore                          270    02:37  September 4, 2022
  LICENSE                             1071    02:37  September 4, 2022
  README.md                           3067    02:37  September 4, 2022
  library.properties                  155    02:37  September 4, 2022
  examples/
    Datalogger/
      Datalogger.ino                  4082    02:37  September 4, 2022
    DumpFile/
      DumpFile.ino                    3700    02:37  September 4, 2022
    Files/
      Files.ino                       4191    02:37  September 4, 2022
    ListFiles/
      ListFiles.ino                   4975    02:37  September 4, 2022
    ReadWrite/
      ReadWrite.ino                   4106    02:37  September 4, 2022
    TeensyEXT4test/
      TeensyEXT4test.ino              12156    02:37  September 4, 2022
    copyFilesUSB/
      copyFilesUSB.ino                12927    02:37  September 4, 2022
    ext4DeviceInfo/
      ext4DeviceInfo.ino              4599    02:37  September 4, 2022
    ext4Formatter/
      ext4Formatter.ino               2859    02:37  September 4, 2022
    ext4Usage/
      ext4Usage.ino                   8887    02:37  September 4, 2022
    wavePlayerExt4/
      play_FS_wav.cpp                 17575    02:37  September 4, 2022
      play_FS_wav.h                   2738    02:37  September 4, 2022
      wavePlayerExt4.ino              6773    02:37  September 4, 2022
  extras/
    32MEGfile.dat.zip                 38616    02:37  September 4, 2022
  src/
    ext4/
      ext4.c                          66585    02:37  September 4, 2022
      ext4.h                          18237    02:37  September 4, 2022
      ext4_balloc.c                   18455    02:37  September 4, 2022
      ext4_balloc.h                   3823    02:37  September 4, 2022
      ext4_bcache.c                   8118    02:37  September 4, 2022
      ext4_bcache.h                   8551    02:37  September 4, 2022
      ext4_bitmap.c                   3325    02:37  September 4, 2022
      ext4_bitmap.h                   3188    02:37  September 4, 2022
      ext4_block_group.c              4308    02:37  September 4, 2022
      ext4_block_group.h              9959    02:37  September 4, 2022
      ext4_blockdev.c                 10624    02:37  September 4, 2022
      ext4_blockdev.h                 9328    02:37  September 4, 2022
      ext4_config.h                   5621    02:37  September 4, 2022
      ext4_crc32.c                    9619    02:37  September 4, 2022
      ext4_crc32.h                    2318    02:37  September 4, 2022
      ext4_debug.c                    3174    02:37  September 4, 2022
      ext4_debug.h                    5443    02:37  September 4, 2022
      ext4_dir.c                      19347    02:37  September 4, 2022
      ext4_dir.h                      8973    02:37  September 4, 2022
      ext4_dir_idx.c                  39969    02:37  September 4, 2022
      ext4_dir_idx.h                  3517    02:37  September 4, 2022
      ext4_errno.h                    2955    02:37  September 4, 2022
      ext4_extent.c                   58568    02:37  September 4, 2022
      ext4_extent.h                   2475    02:37  September 4, 2022
      ext4_fs.c                       49057    02:37  September 4, 2022
      ext4_fs.h                       8774    02:37  September 4, 2022
      ext4_hash.c                     8810    02:37  September 4, 2022
      ext4_hash.h                     2368    02:37  September 4, 2022
      ext4_ialloc.c                   10247    02:37  September 4, 2022
      ext4_ialloc.h                   2882    02:37  September 4, 2022
      ext4_inode.c                    10674    02:37  September 4, 2022
      ext4_inode.h                    11164    02:37  September 4, 2022
      ext4_journal.c                  61421    02:37  September 4, 2022
      ext4_journal.h                  4137    02:37  September 4, 2022
      ext4_mbr.c                      5645    02:37  September 4, 2022
      ext4_mbr.h                      2294    02:37  September 4, 2022
      ext4_misc.h                     4889    02:37  September 4, 2022
      ext4_mkfs.c                     24038    02:37  September 4, 2022
      ext4_mkfs.h                     2452    02:37  September 4, 2022
      ext4_oflags.h                   2531    02:37  September 4, 2022
      ext4_super.c                    7226    02:37  September 4, 2022
      ext4_super.h                    7534    02:37  September 4, 2022
      ext4_trans.c                    3049    02:37  September 4, 2022
      ext4_trans.h                    3097    02:37  September 4, 2022
      ext4_types.h                    27821    02:37  September 4, 2022
      ext4_xattr.c                    41023    02:37  September 4, 2022
      ext4_xattr.h                    3204    02:37  September 4, 2022
    ext4FS.cpp                        16746    02:37  September 4, 2022
    ext4FS.h                          14424    02:37  September 4, 2022
    misc/
      queue.h                         23861    02:37  September 4, 2022
      tree.h                          27507    02:37  September 4, 2022

Unmounting sda2...

In this case the ext4 partition was partition 2 so I set:
Code:
// Set this to one of the above devices.
#define sdxx sda2
sdxx to sda2 (second partition on device sda).

Not sure what is going on with your drive?
 
@wwatson - made second post just to be sure you see the update. I tried setting sdxx to sda2 since the ext4 partition is on the 2 partition:
Code:
Try Partition list
Partition Table
	part,boot,bgnCHS[3],type,endCHS[3],start,length
FAT32:	1,80,0x20,0x21,0x0,0xB,0xFE,0xFF,0xFF,2048,522240
ext2/3/4:	2,0,0xA2,0x3,0x20,0x83,0xFE,0xFF,0xFF,524288,976248832
pt_#0:	3,0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0,0
pt_#0:	4,0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0,0
	 < unused area starting at: 976773120 length 47 >
Found new Volume:0
myext4fs1.begin(sda1) Failed: Drive plugged in?
myext4fs2.begin(sda2): passed...
Set Storage Index drive 2 to 2
SD card is NOT inserted...
myext4fs4.begin(sdd1) Failed: Drive plugged in?
Initializaton complete.

but still only see a couple of the directories but no files:
Code:
Dump Storage list(3)
store:0 storage:10001 name:RAM fs:20001d0c
store:1 storage:20001 name:MSC0-system-boot fs:2001ada0
store:2 storage:30001 name:writable fs:20010a40

Dump Index List
Drive # 2 Selected

 Space Used = 29770113024
Filesystem Size = 499839401984
lost+found                           M: 07/31/2020 16:48  /
boot                                 M: 08/27/2022 18:12  /
  firmware                           M: 08/12/2020 12:19  /

unless there is something strange with the rpi4 boot drive.

As you said maybe permissions?
 
@wwatson - made second post just to be sure you see the update. I tried setting sdxx to sda2 since the ext4 partition is on the 2 partition:
Code:
Try Partition list
Partition Table
	part,boot,bgnCHS[3],type,endCHS[3],start,length
FAT32:	1,80,0x20,0x21,0x0,0xB,0xFE,0xFF,0xFF,2048,522240
ext2/3/4:	2,0,0xA2,0x3,0x20,0x83,0xFE,0xFF,0xFF,524288,976248832
pt_#0:	3,0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0,0
pt_#0:	4,0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0,0
	 < unused area starting at: 976773120 length 47 >
Found new Volume:0
myext4fs1.begin(sda1) Failed: Drive plugged in?
myext4fs2.begin(sda2): passed...
Set Storage Index drive 2 to 2
SD card is NOT inserted...
myext4fs4.begin(sdd1) Failed: Drive plugged in?
Initializaton complete.

but still only see a couple of the directories but no files:
Code:
Dump Storage list(3)
store:0 storage:10001 name:RAM fs:20001d0c
store:1 storage:20001 name:MSC0-system-boot fs:2001ada0
store:2 storage:30001 name:writable fs:20010a40

Dump Index List
Drive # 2 Selected

 Space Used = 29770113024
Filesystem Size = 499839401984
lost+found                           M: 07/31/2020 16:48  /
boot                                 M: 08/27/2022 18:12  /
  firmware                           M: 08/12/2020 12:19  /

unless there is something strange with the rpi4 boot drive.

As you said maybe permissions?

Yeah, I just checked with two different ext4 formatted thumb drives. One I set the file permissions to 'root' and the other I set to 'wwatson'. Did not make a difference to TeensyEXT4 running through MTP. Which makes sense. Must be something with the formatting. I has to be an ext4 format.

Edit: If you have a Linux machine you can format a USB stick to ext4 or you can try formatting a SD card to ext4. There are also Widows app's that can do it as well.
 
Last edited:
I built and like @mjs513 I tried plugged in the SSD drive that runs an RP4...
Screenshot.jpg

Now should try building another Disk.
 
Back
Top