ฉันจะบูต Linux ด้วย rootfs ใน RAM ได้อย่างไร


16

rootfs เป็นรูปภาพ squashfs และ bootloader ของฉันกำลังโหลดลงในที่อยู่ใน SDRAM ฉันต้องส่งพารามิเตอร์ใดไปยังเคอร์เนลเพื่อให้สามารถเมานต์รูทได้จากตรงนั้น การรองรับ Squashfs นั้นมีมาให้แล้วและสามารถใช้งานได้แล้ว

root=/dev/mtdblock2 rootfstype=squashfs  

สำหรับการบูทจากแฟลช

แก้ไข: นี่คืออุปกรณ์ฝังตัว MIPS โดยใช้ bootloader ที่กำหนดเอง โดยปกติ bootloader จะแยกเคอร์เนลที่ถูกบีบอัดจากแฟลชไปยัง SDRAM จากนั้นเคอร์เนลจะเมานต์ / dev / mtdblock2 เป็นรูท ฉันพยายามปรับปรุง bootloader เพื่อให้สามารถดาวน์โหลดรูปภาพไปที่ RAM และบูตโดยไม่ต้องเขียนลงแฟลช

ฉันไม่สามารถหาวิธีทำให้ Linux ติดตั้งอิมเมจระบบไฟล์ใน RAM เป็นรูท


โปรดอธิบายให้ดีกว่านี้คุณกำลังพยายามทำอะไรหากคุณรู้ว่าสควอชใช้งานได้ คุณรู้ได้อย่างไรว่ามันใช้งานได้? เกิดอะไรขึ้น? และที่สำคัญที่สุดคืออะไรไม่ทำงานในแบบที่คุณต้องการ?
rozcietrzewiacz

1
นอกจากนี้bootloaderใช้อุปกรณ์อะไร?
rozcietrzewiacz

ฉันคิดว่าถ้าคุณใช้ memdisk (จาก SYSLINUX) เป็นเคอร์เนลมันจะโหลดภาพทั้งหมดในหน่วยความจำแล้วก็บูทจากมัน
golimar

คำตอบ:


10

ฉันจะใช้ initramfs ( http://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt )

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

ประโยชน์ของ initramfs เหนือ initrd คือ initramfs ใช้ระบบไฟล์ tmpfs ในขณะที่ initrd ใช้อุปกรณ์ ram block ความแตกต่างที่สำคัญที่นี่คือสำหรับ initrd คุณต้องจัดสรรพื้นที่ทั้งหมดล่วงหน้าสำหรับระบบไฟล์แม้ว่าคุณจะไม่ได้ใช้พื้นที่นั้นทั้งหมด ดังนั้นหากคุณไม่ได้ใช้พื้นที่ระบบไฟล์คุณจะเสีย RAM ซึ่งอยู่บนอุปกรณ์ฝังตัวซึ่งมักจะเป็นทรัพยากรที่หายาก Tmpfs เป็นระบบไฟล์ที่ใช้หน่วยความจำหมด แต่ใช้ RAM ได้มากเท่าที่ใช้งานอยู่ในระบบไฟล์ ดังนั้นหากคุณลบไฟล์ออกจาก tmpfs ram นั้นจะถูกทำให้เป็นอิสระทันที

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


ดังนั้นฉันจริง ๆ แล้วพยายามตั้งค่าระบบที่เรียกใช้ "ออกจาก initramfs ไปเรื่อย ๆ " ระบบใช้งานเป็นส่วนใหญ่ แต่ฉันมีปัญหาบางอย่าง - ฉันสงสัยว่าคุณจะสามารถส่องแสงได้หรือไม่? คำถามโพสต์ที่นี่
dtmland


0

ฉันใช้phramไดรเวอร์เพื่อจุดประสงค์นี้: มันจำลองอุปกรณ์ MTD โดยใช้หน่วยความจำทางกายภาพซึ่งหมายความว่าคุณสามารถใช้อิมเมจ rootfs เดียวกันสำหรับการทดสอบ / พัฒนาที่คุณจะเขียนลงในแฟลชจริงในภายหลัง เวทมนตร์ที่จำเป็นในบรรทัดคำสั่งเคอร์เนลจะเป็นสิ่งที่ต้องการ

phram.phram=rootfs,0x100000,9Mi root=/dev/mtdblock0 memmap=9M\$100000

โปรดทราบว่าคุณต้องการmemmapอาร์กิวเมนต์เพื่อให้แน่ใจว่าเคอร์เนลไม่ได้พยายามใช้หน่วยความจำนั้นเพื่อตัวเอง 9MB นั้นเป็นอย่างไร rootfs ของฉันมีขนาดใหญ่ (หรือเคย) จำเป็นต้องใช้ \ before $ ใน bootloader ของฉันซึ่งอาจไม่ใช่ของคุณ ที่อยู่ที่ฉันเลือกมีข้อ จำกัด เพราะฉันไม่รู้ว่าหน่วยความจำกายภาพถูกวางบนอุปกรณ์ของคุณอย่างไรดังนั้นเลือกที่เหมาะสมสำหรับคุณ ฉันสมมติว่าคุณเคยใช้ tftp หรืออะไรบางอย่างเพื่อโหลดรูทของคุณในที่อยู่นั้น

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