2013-09-04 74 views
5

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.

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

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

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

+0

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

Trả lời

1

Hãy xem tại địa chỉ: http://lwn.net/Kernel/LDD3/ chương 8 nó giải thích việc phân bổ bộ nhớ cho giai đoạn khởi động sớm.

Thông tin thêm về khởi động phân bổ bộ nhớ có thể được tìm thấy ở đây:

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

Tính năng này được sử dụng để phân bổ khối bộ nhớ lớn trong hệ thống khởi động lên và nó sử dụng vật lý chứ không phải là bộ nhớ ảo. Sau MMU khởi động và chạy không có cách nào có thể truy cập vào bộ nhớ AFAIK

Nếu bạn đang tìm kiếm một phân bổ bộ nhớ lớn tiếp tục có lẽ bạn nên sử dụng cấp phát khác nhau hãy xem tại địa chỉ:

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