Tôi đã cố gắng tìm kiếm chủ đề này trên google và trang web này nhưng tôi không thể tìm thấy câu trả lời thích hợp.Phân bổ bộ nhớ trong khi khởi động Linux?
Tôi đang cố gắng phân bổ khối bộ nhớ liên tục lớn (một vài MB) tại một địa chỉ vật lý được đặt trong quá trình khởi động Linux. Nhưng tôi vẫn chưa rõ nơi tôi nên đặt chức năng "alloc_bootmem" của mình. Tôi đang chạy Linux trên một bộ xử lý ARM.
AFAIK, có một cách để tạo ra một trình điều khiển, trong đó có một cuộc gọi đến "alloc_bootmem" và sau đó biên dịch tài xế trực tiếp để vào kernel.
Phương pháp khác là thêm "alloc_bootmem" vào một nơi nào đó trong nguồn nhân Linux.
Phương pháp cuối cùng mà tôi nghĩ tồn tại là tạo tệp cài đặt như boot.rc? (Không chắc chắn) để trong khi khởi động Linux sẽ đặt trước bộ nhớ tôi muốn cấp phát.
Nếu có cách rõ ràng hoặc liên kết đến câu trả lời cho câu hỏi này, tôi thực sự đánh giá cao sự giúp đỡ của mọi người. Câu hỏi cơ bản là "tôi nên gọi" alloc_bootmem "ở đâu để nó hoạt động trong khi khởi động?"
Cảm ơn, Shahril
Nếu "set" địa chỉ vật lý được quyết định bởi phần cứng, sau đó có một phương pháp thứ tư để đảm bảo rằng hạt nhân không bao giờ coi bộ nhớ đó là RAM mục đích chung. Để bộ nạp khởi động (ví dụ: U-Boot) loại trừ vùng bộ nhớ vật lý này khỏi (các) danh sách bộ nhớ được cung cấp cho hạt nhân trong dòng lệnh ATAGs (hoặc DT) và/hoặc hạt nhân. Tạo một ATAG mới (hoặc mục nhập DT) để chuyển tài nguyên bộ nhớ dành riêng này cho trình điều khiển thiết bị sẽ sử dụng nó. Chi tiết hơn một chút là [ở đây] (http://stackoverflow.com/questions/11580285/pass-large-amount-of-binary-data-from-u-boot-to-linux-kernel/12137511#12137511). – sawdust