fastboot boot ‹kernel› ทำงานภายในอย่างไร

Fastboot มีคุณลักษณะที่มีประโยชน์ดังต่อไปนี้ (หากการบูตอิมเมจที่กำหนดเองล้มเหลว อุปกรณ์จะบู๊ตอิมเมจเริ่มต้นอย่างน่าอัศจรรย์ในครั้งถัดไป) แล้วทุกอย่างจะโอเค):

ในการบูตด้วยอิมเมจเคอร์เนลฝั่งโฮสต์

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

บูต fastboot ‹ เคอร์เนล > [ ‹ ramdisk > ]

มีใครทราบบ้างว่ามันทำงานภายในอย่างไร เคอร์เนลถูกคัดลอกไปยังพาร์ติชันสำหรับเริ่มระบบพิเศษ ก่อนที่จะรีบูตอุปกรณ์ หรือไม่ (อัปเดต: ตามที่คำตอบชี้ให้เห็น ไม่มีการรีบูต เนื่องจาก fastboot เป็นขั้นตอนในกระบวนการบูต ซึ่งทำให้คำถามของฉันไม่มีความหมายโดยทั่วไป) ฉันกำลังดูซอร์สโค้ดของ fastboot แต่ ดูเหมือนว่าจะมีเพียงสิ่งที่เกิดขึ้นในฝั่งโฮสต์เท่านั้น ไม่ใช่บนอุปกรณ์

ฉันหมายถึงว่าคุณลักษณะการกะพริบทำงานค่อนข้างง่าย ฉันสามารถเลียนแบบได้โดยเพียงแค่คัดลอกอิมเมจสำหรับบูตด้วยเคอร์เนลที่กำหนดเองไปยังพาร์ติชัน boot เช่นผ่าน:

dd if='<my_boot.img>' of='/dev/block/platform/msm_sdcc.1/by-name/boot'

อย่างไรก็ตาม: ฉันกำลังถามคำถามเพราะแอปที่ฉันกำลังพัฒนา ฉันต้องการบูตเคอร์เนลที่กำหนดเองแบบ "ปราศจากความเสี่ยง" โดยตรง จาก อุปกรณ์ที่จัดเก็บเคอร์เนลไว้ เช่น บนการ์ด SD


person jckuester    schedule 08.01.2016    source แหล่งที่มา


คำตอบ (1)


เคอร์เนลถูกคัดลอกไปยังพาร์ติชันสำหรับเริ่มระบบพิเศษก่อนรีบูตอุปกรณ์หรือไม่

ไม่ จะไม่มีการแก้ไขพาร์ติชันใดๆ
การบูตเคอร์เนลหมายถึงการโหลด (เช่น การอ่านลงในหน่วยความจำ) อิมเมจเคอร์เนลจากอุปกรณ์จัดเก็บข้อมูล fastboot นี้คล้ายกับ netboot เช่น อิมเมจเคอร์เนลถูกโหลดจากเซิร์ฟเวอร์/โฮสต์ผ่านลิงก์อีเทอร์เน็ตโดยใช้ TFTP หากจุดประสงค์เดียวคือการบูตระบบโดยใช้อิมเมจเคอร์เนล ก็ไม่มีเหตุผลที่จะต้องเขียนเคอร์เนลอิมเมจลงในพาร์ติชันด้วย โดยเฉพาะอย่างยิ่งเมื่อไม่ได้ระบุพาร์ติชันไว้อย่างชัดเจน

ระบบไฟล์รูทเสริมของการดำเนินการนี้ระบุไว้อย่างชัดเจนว่าเป็นอิมเมจ ramdisk ซึ่งไม่จำเป็นต้องเขียนหรือจัดเก็บข้อมูลในพาร์ติชัน

ไม่มีใครรู้ว่ามันทำงานภายในอย่างไร?

โปรแกรม fastboot เป็นโปรแกรมโหลดบูตสำรองที่ทำงานหลังจากที่คุณรีบูตอุปกรณ์
เคอร์เนลที่โหลดจากโฮสต์ผ่าน USB เข้าสู่หน่วยความจำ rootfs ที่เป็นทางเลือก (ramdisk หรืออาจเป็นอิมเมจ initramfs) ก็สามารถโหลดจากโฮสต์ผ่าน USB ลงในหน่วยความจำได้เช่นกัน เมื่อโหลดแล้ว การบูตเคอร์เนลแบบธรรมดาก็สามารถเริ่มต้นได้

อย่างไรก็ตาม: ฉันกำลังถามคำถามเพราะแอปที่ฉันกำลังพัฒนา ฉันต้องการบูตเคอร์เนลแบบกำหนดเองแบบ "ปราศจากความเสี่ยง" โดยตรงจากอุปกรณ์ที่จัดเก็บเคอร์เนลไว้ เช่น บนการ์ด SD

คุณอาจต้องใช้ bootloader/วิธีการอื่นนอกเหนือจาก fastboot นี้

person sawdust    schedule 08.01.2016
comment
ฉันสันนิษฐานผิด ๆ ว่าอุปกรณ์จะรีบูตอีกครั้งหลังจากโหมด fastboot; แต่มันสมเหตุสมผลอย่างยิ่งที่อุปกรณ์จะเข้าสู่ขั้นตอนการบู๊ตถัดไปโดยใช้เคอร์เนลที่คัดลอกไปยังหน่วยความจำ ขอบคุณสำหรับการชี้แจง! ดังนั้นความคิดของฉันในการบูทจากอุปกรณ์หนึ่งครั้งอาจทำได้ยาก หรืออย่างน้อยก็เป็นงานที่เสี่ยงต่อข้อผิดพลาด เนื่องจาก bootloader แบบกำหนดเองเป็นอุปกรณ์เฉพาะ - person jckuester; 09.01.2016
comment
ใช่ โดยทั่วไปแล้ว bootloader จะเป็นอุปกรณ์/บอร์ดโดยเฉพาะ ดูเหมือนว่า Fastboot จะเป็นส่วนหน้า GUI ของ bootloader ที่แท้จริงของโทรศัพท์ อาจเป็น U-Boot ลองเล่นกับคำสั่ง getvar ด้วย ตัวแปรสภาพแวดล้อม U-Boot เช่น < ข>bootargs และ bootcmd คำสั่ง devices รายงานการตรวจจับ SDcard หรือไม่ (U-Boot อาจเรียกว่า mmc แทนที่จะเป็น SDcard) - person sawdust; 09.01.2016
comment
ทำไมคุณไม่บูตเคอร์เนลที่คุณกำหนดเองผ่าน fastboot? โบนัสคือหากไม่ได้ผล คุณสามารถรีบูตเข้าสู่เคอร์เนลที่ใช้งานได้บนพื้นที่จัดเก็บข้อมูลได้ - person tangrs; 09.01.2016