สำรองพื้นที่หน่วยความจำ RAM คงที่เป็นอุปกรณ์บล็อก (ด้วยที่อยู่ทางกายภาพเริ่มต้นที่กำหนด)


11

มีคำถามมากมายเกี่ยวกับ RAM Disks และฉันทราบ ramfs และ tmpfs ที่อนุญาตให้ใช้ ram เป็นอุปกรณ์บล็อก อย่างไรก็ตามสิ่งที่ฉันสนใจคือใช้ช่วงที่อยู่หน่วยความจำคงที่เป็นอุปกรณ์บล็อก

สิ่งนี้เกิดจากความจำเป็นในการใช้ RAM ที่ไม่ลบเลือนซึ่งมีอยู่ในระบบของฉัน ฉันมี RAM 6GB และมี RAM ที่ไม่ลบเลือนถึง 8GB ผลลัพธ์ของ / proc / iomem ให้ฉันดังต่อไปนี้

100000000-17fffffff: RAM ระบบ

180000000-37fffffff: สงวนไว้

ที่นี่พื้นที่จาก 6GB ถึง 14GB สอดคล้องกับภูมิภาค RAM แบบไม่ลบเลือนซึ่งทำเครื่องหมายด้วยแผนที่หน่วยความจำ BIOS E820 ตามที่สงวนไว้ ความตั้งใจหลักของฉันคือการใช้ NVRAM นี้เป็นอุปกรณ์บล็อกใน linux สิ่งนี้มีประโยชน์สำหรับการทดสอบระบบ NVRAM มีคำสั่ง linux อยู่แล้วซึ่งจะอนุญาตให้ฉันใช้พื้นที่นี้เป็นอุปกรณ์บล็อกหรือฉันต้องเขียนไดรเวอร์อุปกรณ์เคอร์เนลของตัวเองเพื่ออำนวยความสะดวกเหมือนกันหรือไม่?


2
แค่อยากรู้อยากเห็นทำไมคุณต้องการทำเช่นนี้?
mtak

มันมีวิธีง่าย ๆ ในการทดสอบระบบไฟล์ที่ออกแบบมาสำหรับ Non-Volatile RAM บน linux
qstack

คำตอบ:


2

ฉันไม่ใช่ผู้เชี่ยวชาญเกี่ยวกับไดรเวอร์อุปกรณ์ แต่นี่คือตัวชี้สำหรับการวิจัยและพัฒนาของคุณ:

  1. หากหน่วยความจำถูกทำเครื่องหมายว่า "สงวนไว้" ระบบปฏิบัติการจะไม่สามารถแตะได้ คุณจะต้องหาวิธีที่จะทำเครื่องหมายไบออสว่าใช้ได้กับระบบปฏิบัติการหรือใช้ioctlระดับต่ำโดยตรงเพื่อควบคุม
  2. ถ้าลีนุกซ์เห็นหน่วยความจำคุณก็ยังไม่มีวิธีง่าย ๆ ในการป้องกันไม่ให้ลีนุกซ์ใช้เป็นบล็อกอื่น ๆ ของ RAM ความพยายามสามารถทำได้โดยการทำเครื่องหมาย RAM เช่น "ไม่ดี" จากนั้นทำการปรับเปลี่ยนเคอร์เนลเพื่อให้ยังคงใช้งานได้เป็นพิเศษ (โปรดตรวจสอบเอกสารเกี่ยวกับเคอร์เนลเกี่ยวกับเรื่องนี้มันมีการเปลี่ยนแปลงมากมายตั้งแต่ครั้งล่าสุดที่ฉันเจาะเข้าไป ด้วยความเร็วที่ยอดเยี่ยม)
  3. จากการพิจารณาข้างต้นเป็นการศึกษาความเป็นไปได้เบื้องต้น (และไม่ชัดเจนและไม่ละเอียด) ฉันจะบอกว่าการเขียน ramdisk blockdevice ไดรเวอร์ของคุณเป็นตัวเลือกที่มีสติมากที่สุดในกรณีของคุณและบางทีคุณควรมีส่วนร่วมกับเคอร์เนล Linux และ / หรือร่วมมือกับ คนที่ลองสิ่งนี้อยู่แล้ว (อาจเป็นที่ที่ดีกว่าสำหรับคำถามนี้คือลิสต์การส่งเมลเคอร์เนลหากคุณยังไม่ได้โพสต์ที่นั่น)

แหล่งข้อมูลที่เกี่ยวข้องอื่น ๆ :


1

ก่อนที่จะมีการเปิดตัวtmpfs/ initramfsมีramdiskการโหลดinitrdรูปภาพซึ่งเป็นอุปกรณ์บล็อกขนาดคงที่ที่กำหนดไว้ล่วงหน้าฉันคิดว่าต่อเนื่องกันอย่างน้อยก็ในการใช้งานก่อนหน้านี้

ตัวขับบล็อคนั้นไม่มีพารามิเตอร์สำหรับที่อยู่หน่วยความจำเพียงขนาด แต่เคอร์เนลที่ใช้ในการโหลดอิมเมจเริ่มต้นที่ที่อยู่ที่กำหนดไว้ล่วงหน้า (โดยการกำหนดค่า) เพื่อให้มองเข้าไปในเคอร์เนลหลัก / รหัสinitสามารถช่วยได้ จะแปลกใจถ้าramdiskไม่ได้รับการสนับสนุนอีกต่อไปสำหรับ initrd แต่เนื่องจากinitramfsใกล้เข้ามาหลายปีแล้วไม่เคยใช้ramdiskอีกต่อไป)

แหล่งที่มาขับรถเป็นคนขับรถ / บล็อก / rd.cถ้าผมเห็นอย่างถูกต้องในขณะนี้คือไดรเวอร์ / บล็อก / brd.c

อย่างอื่นกำลังมองหาramdiskฉันพบว่ามีการติดตั้งที่น่าสนใจ:

Disk on RAM - เล่นกับ Block Drivers

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.