Próbowałem wyszukać ten temat w google i tej witrynie, ale nie mogę znaleźć prawidłowej odpowiedzi.Alokacja pamięci podczas uruchamiania systemu Linux?
Próbuję przydzielić duży ciągły blok pamięci (kilka MB) na ustalonym adresie fizycznym podczas procesu uruchamiania systemu Linux. Ale nadal nie jestem jasne, gdzie powinienem umieścić moją funkcję "alloc_bootmem". Używam Linuxa na procesorze ARM.
AFAIK, istnieje sposób, aby utworzyć sterownik, który zawiera wezwanie do „alloc_bootmem”, a następnie skompilować tego sterownika bezpośrednio w jądro.
Inną metodą jest dodanie "alloc_bootmem" gdzieś w źródle jądra Linuksa.
Ostatnia metoda, o której myślę, że istnieje, to utworzenie pliku ustawień, takiego jak boot.rc? (Nie jestem pewien), aby podczas rozruchu system Linux zarezerwował pamięć, którą chcę przydzielić.
Jeśli istnieje wyraźny sposób lub link do odpowiedzi na to pytanie, naprawdę doceniam pomoc każdej osoby. Podstawowym pytaniem jest "gdzie powinienem zadzwonić" alloc_bootmem ", aby działał podczas uruchamiania?"
Dzięki Shahril
If "ustawiony" adres fizyczny jest podyktowany przez sprzęt, to jest czwarta metoda, aby upewnić się, że jądro nigdy nie uważa tej pamięci za pamięć RAM ogólnego przeznaczenia. Niech bootloader (na przykład U-Boot) wykluczy ten fizyczny region pamięci z listy pamięci dostarczonej do jądra w wierszach poleceń ATAG (lub DT) i/lub jądra. Utwórz nowy wpis ATAG (lub DT), aby przekazać zarezerwowany zasób pamięci do sterownika urządzenia, który go użyje. Trochę więcej szczegółów [tutaj] (http://stackoverflow.com/questions/11580285/pass-large-amount-of-binary-data-from--boot-to-linux-kernel/12137511#12137511). – sawdust