jak odczytać plik bez filesystemu w ramie

0

Hej
Mam taki problem. Jestem w uboocie. I tam jest zainstalowany filesystem na flashu, ale nie ma na ramie. Umiem pobrać plik z flasha i wrzucić kontent tego pliku do RAMu fizycznie pod jakiś adres X.
I jak to zrobię to jak ja mogę odczytać taki plik za pomocą API w C? Bo jak masz funkcję fopen to musisz podać ścieżkę a tu w uboocie nie ma filesystemu to nie jestem w stanie podać ścieżki. To tego zadania nie da się zrobić funkcjami fopen, fread, fseek itp jeżeli nie jestem w stanie podać ścieżki, prawda? Muszę kombinować tak na pałę odczytując komórki pamięci od adresu X. Tylko czego się spodziewać jak plik zawiera np. linie:

12\n
Ala ma kota

Interesuje mnie tylko pierwsza linia, więc jak to odczytać.
1.) Zadeklarować jakąś pamięć na stercie
2.) Wczytywać bajt po bajcie aż napotkasz znak \n. Jak napotkasz ten znak to zamień go na '\0'
3.) Oczywiście w punktach 2 kontroluj czy poza zarezerwowany obszar pamięci nie wyszedłeś, w razie czego zaalokuj sobie więcej
4.) Taki bufor już mozna wyprintowac na konsolę printf-em i %s.
Czy mam rację że tu takie jest najoptymalniejsze rozwiązanie przy braku filesystemu?

0

Może użyć fmemopen na adresie by mieć możliwość korzystania z reszty funkcji bibliotecznych ze <stdio.h>...?

0

Umiem pobrać plik z flasha i wrzucić kontent tego pliku do RAMu fizycznie pod jakiś adres X

Jeżeli dysponujesz tylko adresem fizycznym w RAM to musisz napisać drajwer w trybie kernela, który zmapuje fizyczny zakres na zakres wirtualny oferowany przez kernel. Z "user space" masz dostęp tylko do tej wirtualnej pamięci, adresy pamięci nie są fizycznymi adresami RAM.

Jest też coś takiego jak direct memory access, ale wiem jedynie że takie hasło istnieje i nigdy go nie dotykalem.

2
tomek1985 napisał(a):

Hej
Mam taki problem. Jestem w uboocie. I tam jest zainstalowany filesystem na flashu, ale nie ma na ramie. Umiem pobrać plik z flasha i wrzucić kontent tego pliku do RAMu fizycznie pod jakiś adres X.
I jak to zrobię to jak ja mogę odczytać taki plik za pomocą API w C?

Ale po co?
Zazwyczaj celem czytania czegokolwiek z pliku jest, by mieć to w RAMie, a skoro masz już to w RAMie to…?

0
Azarien napisał(a):
tomek1985 napisał(a):

Hej
Mam taki problem. Jestem w uboocie. I tam jest zainstalowany filesystem na flashu, ale nie ma na ramie. Umiem pobrać plik z flasha i wrzucić kontent tego pliku do RAMu fizycznie pod jakiś adres X.
I jak to zrobię to jak ja mogę odczytać taki plik za pomocą API w C?

Ale po co?
Zazwyczaj celem czytania czegokolwiek z pliku jest, by mieć to w RAMie, a skoro masz już to w RAMie to…?

Ala ja muszę przeczytać tą pierwszą linie i na bazie tego wykonać jeden albo drugi warunek. To taki specjalny kejs, ficzer że na bazie kontentu pliku na flashu zrób to albo to.
uboot czu u-boot dla mnie jeden grzyb.
W uboocie to nie będzie wirtualny adres bo to bare metal to tam na adresach fizycznych się operuje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1