Робота з файловими системами¶
Цей посібник описує, як OpenMV Cam забезпечує файлову систему на пристрої, дозволяючи використовувати стандартні методи Python для роботи з файлами разом зі збереженням даних.
OpenMV Cam створює конфігурацію за замовчуванням і автоматично виявляє та монтує основну файлову систему при увімкненні живлення, тому цей посібник здебільшого корисний, якщо ви хочете перерозбити розділи флеш-пам’яті, змінити тип файлової системи або використати власний блочний пристрій.
Файлова система підтримується внутрішньою флеш-пам’яттю або SD-карткою, якщо вона встановлена.
VFS¶
MicroPython реалізує рівень Virtual File System (VFS) у стилі Unix. Усі змонтовані файлові системи об’єднуються в єдину віртуальну файлову систему, що починається з кореневого каталогу /. Файлові системи монтуються в директорії цієї структури, а під час запуску робочий каталог встановлюється на основну файлову систему.
На OpenMV Cam внутрішня флеш-пам’ять монтується в /flash і є робочим каталогом. Якщо встановлена SD-картка, вона монтується в /sdcard і стає робочим каталогом замість попереднього.
Блочні пристрої¶
Блочний пристрій — це екземпляр класу, що реалізує протокол vfs.AbstractBlockDev.
При увімкненні живлення OpenMV Cam намагається виявити файлову систему у внутрішній флеш-пам’яті (або на SD-картці) та автоматично налаштувати і змонтувати її. Якщо файлову систему не знайдено, створюється FAT-файлова система, що охоплює всю флеш-пам’ять. Найпростіший спосіб стерти або переформатувати вбудовану файлову систему — скористатись OpenMV IDE або виконати скидання до заводських налаштувань; наведений нижче низькорівневий Python API призначений для поглибленого або програмного використання.
Внутрішня флеш-пам’ять¶
На OpenMV Cams на базі STM32 клас pyb.Flash надає доступ до внутрішньої флеш-пам’яті. На платах із більшою зовнішньою флеш-пам’яттю буде використовуватися вона. Іменований аргумент start слід завжди вказувати, наприклад pyb.Flash(start=0).
Примітка: для зворотної сумісності, якщо об’єкт створено без аргументів (тобто pyb.Flash()), реалізується лише простий блочний інтерфейс, що відображає віртуальний пристрій, який надається USB-сховищу (тобто включає віртуальну таблицю розділів на початку).
Власні блочні пристрої¶
Ви також можете створити власний блочний пристрій на Python і змонтувати його — наприклад, RAM-диск. Наступний клас реалізує простий блочний пристрій, що зберігає дані в оперативній пам’яті за допомогою bytearray
class RAMBlockDev:
def __init__(self, block_size, num_blocks):
self.block_size = block_size
self.data = bytearray(block_size * num_blocks)
def readblocks(self, block_num, buf):
for i in range(len(buf)):
buf[i] = self.data[block_num * self.block_size + i]
def writeblocks(self, block_num, buf):
for i in range(len(buf)):
self.data[block_num * self.block_size + i] = buf[i]
def ioctl(self, op, arg):
if op == 4: # get number of blocks
return len(self.data) // self.block_size
if op == 5: # get block size
return self.block_size
Він може бути використаний таким чином:
import vfs
bdev = RAMBlockDev(512, 50)
vfs.VfsFat.mkfs(bdev)
vfs.mount(bdev, '/ramdisk')
Після монтування файлова система може використовуватися так само, як зазвичай з Python-коду, наприклад:
with open('/ramdisk/hello.txt', 'w') as f:
f.write('Hello world')
print(open('/ramdisk/hello.txt').read())
Файлові системи¶
OpenMV Cam форматує внутрішню флеш-пам’ять як FAT, щоб на платах, які надають доступ до файлової системи через USB-сховище, комп’ютер-хост міг читати та записувати її без додаткових драйверів.
FAT не є стійкою до збоїв живлення під час записування, що може призвести до пошкодження файлової системи. Від’єднайте/демонтуйте диск на хості перед відключенням камери, і надавайте перевагу SD-картці перед внутрішньою флеш-пам’яттю для даних, які скрипт записує.
На OpenMV Cams на базі STM32 внутрішню флеш-пам’ять можна переформатувати з Python:
import os, vfs, pyb
vfs.umount('/flash')
vfs.VfsFat.mkfs(pyb.Flash(start=0))
vfs.mount(pyb.Flash(start=0), '/flash')
os.chdir('/flash')