Skip to content

Dodać wsparcie dla dmffs #35

@JohnAmadis

Description

@JohnAmadis

Mamy moduł dmffs (Flash File System):
https://github.com/choco-technologies/dmffs

który pozwala na stworzenie systemu plików typu read-only na podstawie wybranego katalogu - czyli mozemy podac jakis katalog, stworzyc z niego plik binarny, wbudowac do naszego firmware'u, załadować moduł dmffs, zamontować go w wybranej ścieżce i odczytywać pliki w firmwerze.

Tworzymy katalog modules i dodajemy w nim dmffs jako subrepo. Jako, że katalog modules musi być kompilowany z parametrem -DDMOD_MODE=DMOD_MODULE, a cała reszta z -DDMOD_MODE=DMOD_SYSTEM, to musimy w modules stworzyć osobny katalog build/, dodać go do ignorowanych i to w nim będziemy mieć zbudowane nasze moduły, z których na koniec zrobimy paczkę za pomocą narzędzia todmp z repozytorium dmod. Możesz założyć, że todmp jest już dostępne w ścieżkach (na CI wystarczy, że użyjesz dockerowego obrazu chocotechnologies/dmboot:1.0.0, który już zawiera to narzędzie w PATH. Nie wiem czy możesz używać dockera do testów, ale jeśli tak - to też możesz je wziąć z tamtąd. Jeśli nie możesz, to po prostu sobie sklonuj repo dmod gdzies na boku i zbuduj je z toolsami dla x86. Paczka stworzona przez nas z katalogu modules powinna nazywać się modules.dmp i być umieszczona w firmwarze w podobny sposób jak startup.dmp

Chcialbym abysmy rozszerzyli nasza implementacje o wbudowane wsparcie dla tego modułu. Widziałbym to tak:

  1. Do konfiguracji cmake przekazujemy parametr -DDMBOOT_ROMFS_DIR=./rom-fs
  2. Jeśli ten parametr jest wykryty, to musimy użyć dmod_loader z modułem make_dmffs.dmf (zbudowanym dla x86) aby stworzyć plik binarny, który umieścimy we flashu podobnie jak user_data. Moduł make_dmffs jest już też dostępny w obrazie dockerowym, nawet jest już tam alias make_dmffs który odpala moduł przez dmod_loader. Możesz sobie sprawdzić Dockerfile jeśli chcesz zrozumieć jak to działa
  3. Jak już mamy romfs.bin w fw, to w main.c ładujemy paczkę modules.dmp i montujemy romfs w katalogu /romfs/

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions