vfs — virtuaalisen tiedostojärjestelmän hallinta#
vfs-moduuli sisältää funktioita tiedostojärjestelmäobjektien luomiseen sekä niiden liittämiseen ja irrottamiseen virtuaalisessa tiedostojärjestelmässä.
Tiedostojärjestelmän liittäminen#
Jotkin portit tarjoavat virtuaalisen tiedostojärjestelmän (VFS) ja mahdollisuuden liittää useita ”todellisia” tiedostojärjestelmiä tähän VFS:ään. Tiedostojärjestelmäobjektit voidaan liittää joko VFS:n juureen tai juuressa sijaitsevaan alihakemistoon. Tämä mahdollistaa Python-ohjelmien näkemän tiedostojärjestelmän dynaamisen ja joustavan määrittelyn. Portit, joissa on tämä toiminnallisuus, tarjoavat funktiot mount() ja umount() sekä mahdollisesti erilaisia tiedostojärjestelmätoteutuksia, joita edustavat VFS-luokat.
- vfs.mount(fsobj: Any, mount_point: str, *, readonly: bool = False) None#
Liittää tiedostojärjestelmäobjektin fsobj VFS:ssä paikkaan, jonka mount_point-merkkijono määrittää. fsobj voi olla VFS-objekti, jolla on
mount()-metodi, tai lohkolaite. Jos kyseessä on lohkolaite, tiedostojärjestelmän tyyppi tunnistetaan automaattisesti (poikkeus nostetaan, jos mitään tiedostojärjestelmää ei tunnistettu). mount_point voi olla'/', jolloin fsobj liitetään juureen, tai'/<name>', jolloin se liitetään juuren alla olevaan alihakemistoon.Jos readonly on
True, tiedostojärjestelmä liitetään vain luku -tilassa.Liittämisen aikana tiedostojärjestelmäobjektin
mount()-metodia kutsutaan.Nostaa
OSError(EPERM), jos mount_point on jo liitetty.
- vfs.mount() List[Tuple[Any, str]]
Kun
mount()kutsutaan ilman argumentteja, palautetaan lista monikoista, jotka edustavat kaikkia aktiivisia liitospisteitä.Palautettu lista on muotoa [(fsobj, mount_point), …].
- vfs.umount(mount_point: str | Any) None#
Irrottaa tiedostojärjestelmän. mount_point voi olla merkkijono, joka nimeää liitospaikan, tai aiemmin liitetty tiedostojärjestelmäobjekti. Irrotuksen aikana tiedostojärjestelmäobjektin
umount()-metodia kutsutaan.Nostaa
OSError(EINVAL), jos mount_point -liitospistettä ei löydy.
- class vfs.VfsFat(block_dev: AbstractBlockDev)#
Luo tiedostojärjestelmäobjektin, joka käyttää FAT-tiedostojärjestelmämuotoa. FAT-tiedostojärjestelmän tallennustila tarjotaan block_dev:n kautta. Tällä konstruktorilla luodut objektit voidaan liittää funktiolla
mount().- static mkfs(block_dev: AbstractBlockDev) None#
Rakentaa FAT-tiedostojärjestelmän block_dev:hen.
- class vfs.VfsRom(buffer: bytes | bytearray | memoryview)#
Luo tiedostojärjestelmäobjektin, joka käyttää ROMFS-pohjaista vain luku -tiedostojärjestelmämuotoa.
buffertäytyy olla puskuriprotokollaa tukeva objekti (bytes,bytearraytaimemoryview), joka sisältää kelvollisen ROMFS-vedoksen.Tällä konstruktorilla luodut objektit voidaan liittää funktiolla
mount().Katso ROMFS:n käyttö saadaksesi täydelliset tiedot, mukaan lukien kuinka ROMFS-vedoksia rakennetaan ja otetaan käyttöön työkalulla mpremote.
- vfs.rom_ioctl(op: int, *args: Any) Any#
Matalan tason rajapinta laitteen vain luku -muistin (ROM) osioiden käyttöön. Tuetut toiminnot ovat:
Kutsu
Toiminta
rom_ioctl(1)Palauttaa käytettävissä olevien ROM-osioiden määrän.
rom_ioctl(2, id)Palauttaa osion
idmuodossamemoryview.rom_ioctl(3, id, length)Tyhjentää osion
idensimmäisetlengthtavua kirjoituksen valmistelua varten. Palauttaa kirjoituksen vähimmäiskohdistuksen tavuina.rom_ioctl(4, id, offset, buf)Kirjoittaa
buf:n osioonidtavusiirtymäänoffset.rom_ioctl(5, id)Viimeistelee kirjoitussekvenssin osioon
id(tyhjentää välimuistit jne.).Nämä toiminnot kutsutaan yleensä epäsuorasti työkalulla mpremote ROMFS-vedosta käyttöön otettaessa; useimpien sovellusten ei tarvitse kutsua niitä suoraan.
- class vfs.VfsPosix(root: str | None = None)#
Luo tiedostojärjestelmäobjektin, joka käyttää isäntäkoneen POSIX-tiedostojärjestelmää. Jos root on määritetty, sen tulisi olla isäntäkoneen tiedostojärjestelmän polku, jota käytetään
VfsPosix-objektin juurena. Muutoin käytetään isäntäkoneen tiedostojärjestelmän nykyistä hakemistoa.Muista
VfsPosixon saatavilla vain MicroPythonin Unix-portissa; sitä ei ole OpenMV Camin laiteohjelmistossa.
Lohkolaitteet#
Lohkolaite on objekti, joka toteuttaa lohkoprotokollan. Tämä mahdollistaa laitteen tukemaan MicroPython-tiedostojärjestelmiä. Fyysistä laitteistoa edustaa käyttäjän määrittelemä luokka. AbstractBlockDev-luokka on malli tällaisen luokan suunnittelulle: MicroPython ei itse asiassa tarjoa tätä luokkaa, mutta varsinaisen lohkolaiteluokan täytyy toteuttaa alla kuvatut metodit.
Tämän luokan konkreettinen toteutus mahdollistaa yleensä pääsyn jonkin laitteiston muistinkaltaiseen toiminnallisuuteen (kuten flash-muistiin). Lohkolaite voidaan alustaa mihin tahansa tuettuun tiedostojärjestelmään ja liittää os-metodien avulla.
Katso Tiedostojärjestelmien käyttö saadaksesi esimerkkitoteutuksia lohkolaitteista, jotka käyttävät alla kuvattuja lohkoprotokollan kahta muunnelmaa.
Yksinkertainen ja laajennettu rajapinta#
Metodeille readblocks ja writeblocks on kaksi yhteensopivaa signatuuria (katso alla), jotta voidaan tukea erilaisia käyttötapauksia. Tietty lohkolaite voi toteuttaa yhden tai toisen muodon tai molemmat samanaikaisesti. Toiseen muotoon (offset-parametrilla) viitataan ”laajennettuna rajapintana”.
Jotkin tiedostojärjestelmät vaativat enemmän hallintaa kirjoitusoperaatioiden suhteen – esimerkiksi alilohkoalueille kirjoittamista ilman tyhjentämistä – ja edellyttävät, että lohkolaite tukee laajennettua rajapintaa.
- class vfs.AbstractBlockDev#
Dokumentaatiomalli lohkolaiteprotokollalle. MicroPython ei itse asiassa altista tätä luokkaa — se näytetään tässä vain dokumentoimaan metodit, jotka käyttäjän määrittelemän lohkolaiteluokan täytyy toteuttaa. Konstruktorin argumentit ovat täysin toteutuksen päätettävissä (tyypillisesti esimerkiksi flash-väylä, chip-select-nasta, sektorin koko jne.).
- readblocks(block_num: int, buf: bytearray) None#
- readblocks(block_num: int, buf: bytearray, offset: int) None
Lukee tavuja laitteesta puskuriin buf. Kaksi ylikuormitusta altistaa yksinkertaisen ja laajennetun rajapinnan.
Yksinkertainen muoto (
readblocks(block_num, buf)): lukee kokonaisia lohkoja alkaen lohkoindeksistä block_num.len(buf)täytyy olla lohkokoon monikerta, ja luettujen lohkojen määrä onlen(buf) // block_size.Laajennettu muoto (
readblocks(block_num, buf, offset)): lukeelen(buf)tavua – ei välttämättä kokonaista lohkomäärää – alkaen tavusiirtymästäoffsetlohkon block_num sisällä. Käytä tätä muotoa, kun tiedostojärjestelmä tarvitsee alilohkotason lukukäytön.
- writeblocks(block_num: int, buf: bytes) None#
- writeblocks(block_num: int, buf: bytes, offset: int) None
Kirjoittaa tavuja puskurista buf laitteeseen.
Yksinkertainen muoto (
writeblocks(block_num, buf)): kirjoittaa kokonaisia lohkoja alkaen lohkoindeksistä block_num.len(buf)täytyy olla lohkokoon monikerta, ja kirjoitettujen lohkojen määrä onlen(buf) // block_size. Toteutus vastaa kunkin kohdelohkon tyhjentämisestä ensin, jos taustalla oleva laitteisto sitä vaatii.Laajennettu muoto (
writeblocks(block_num, buf, offset)): kirjoittaalen(buf)tavua – ei välttämättä kokonaista lohkomäärää – alkaen tavusiirtymästäoffsetlohkon block_num sisällä. Vain kirjoitettavat tavut voivat muuttua; kutsuja vastaa siitä, että vaikutuksen alaiset lohkot on tyhjennetty aiemmallaioctl(6, block_num)-kutsulla. Tämän muodon toteutukset eivät saa koskaan implisiittisesti tyhjentää lohkoa, edes silloin kunoffseton nolla.
- ioctl(op: int, arg: int) int | None#
Ohjaa lohkolaitetta ja kysyy sen parametreja. Suoritettava operaatio annetaan parametrilla op, joka on jokin seuraavista kokonaisluvuista:
1 – alustaa laitteen (arg ei ole käytössä)
2 – sammuttaa laitteen (arg ei ole käytössä)
3 – synkronoi laitteen (arg ei ole käytössä)
4 – hakee lohkojen lukumäärän, palauttaa kokonaisluvun (arg ei ole käytössä)
5 – hakee lohkon tavujen määrän, palauttaa kokonaisluvun tai
None, jolloin käytetään oletusarvoa 512 (arg ei ole käytössä)6 – tyhjentää lohkon, arg on tyhjennettävän lohkon numero
Vähintään
ioctl(4, ...)täytyy siepata; laajennettua rajapintaa käyttävät tiedostojärjestelmät vaativat lisäksiioctl(6, ...). Muiden operaatioiden tarve on laitteistosta riippuvainen.Ennen jokaista
writeblocks(block, ...)-kutsua laajennettua rajapintaa käyttävä tiedostojärjestelmä antaa kutsunioctl(6, block), jotta ajuri voi tyhjentää lohkon ensin, jos laitteisto sitä vaatii. Ajuri voi vaihtoehtoisesti siepata kutsunioctl(6, block)ja palauttaa 0 (onnistuminen) ottaen itse vastuun sen tunnistamisesta, milloin tyhjennystä tarvitaan.Ellei toisin mainita,
ioctl(op, arg)voi palauttaaNone. Näin ollen toteutus voi jättää huomiotta käyttämättömätop-arvot. Kunopsiepataan, operaatioiden 4 ja 5 palautusarvot ovat yllä kuvatun mukaiset. Muiden operaatioiden tulisi palauttaa 0 onnistuessaan ja nollasta poikkeava arvo epäonnistuessaan, jolloin palautettu arvo onOSError-errno-koodi.