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.