2013-09-04 20 views
5

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.

  1. 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.

  2. Inną metodą jest dodanie "alloc_bootmem" gdzieś w źródle jądra Linuksa.

  3. 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

+0

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

Odpowiedz

1

Spójrz: http://lwn.net/Kernel/LDD3/ rozdziale 8 Wyjaśnia alokację pamięci dla wczesnych etapów uruchamiania systemu.

Dalsze informacje na temat uruchamiania alokacji pamięci można znaleźć tutaj:

https://www.kernel.org/doc/gorman/html/understand/understand022.html

Ta funkcja służy do przydzielania duże ilości pamięci podczas startu systemu do góry i wykorzystuje fizyczne zamiast pamięci wirtualnej. Po MMU jest gotowy do pracy nie jest możliwe sposobem uzyskiwania dostępu do pamięci AFAIK

Jeśli szukasz duży kontynuuje alokacji pamięci powinieneś użyć innego przydzielania przyjrzeć:

http://lwn.net/Articles/396702/

Powiązane problemy