Knotthailand Forum

Geek & Dev => Base => หัวข้อที่ตั้งโดย: Admin เมื่อ ก.พ 23, 2024, 04:50 หลังเที่ยง

ชื่อ: กระบวนการบูทของ Qualcomm MSM8953 :PBL-SBL1-(bootloader)LK-Android
โดย: Admin เมื่อ ก.พ 23, 2024, 04:50 หลังเที่ยง

 (https://img5.pic.in.th/file/secure-sv1/174e75e316f42cadb.jpeg)

(1) แกนประมวลผล

จากแผนภาพบล็อกด้านบนจะเห็นว่า MSM8953 มีโปรเซสเซอร์อยู่ 5 ตัว ได้แก่:

แอป, แกน Cortex A53, ใช้งาน Android;
RPM (Resource Power Manager) แกน CortexM3 ส่วนใหญ่ใช้สำหรับแอปพลิเคชันที่ใช้พลังงานต่ำ
โมเด็ม (MSS_QDSP6) ซึ่งเป็นตัวประมวลผลชุดคำสั่งของ Qualcomm เอง รองรับโปรโตคอลการสื่อสาร 3G, 4G ฯลฯ
Pronto (WCNSS) จัดการโค้ดที่เกี่ยวข้องกับ wifi
LPASS เกี่ยวกับเสียง
จะชัดเจนมากเมื่อดูบล็อกไดอะแกรมของโปรเซสเซอร์แต่ละตัวในไดอะแกรมโครงสร้างฮาร์ดแวร์ชิปด้านล่าง:

 (https://img2.pic.in.th/pic/276d9dcd363451122.png)

(2) เริ่มการแนะนำรูปภาพ

PBL (Primary Boot Loader) ซึ่งอยู่ใน ROM เป็นบรรทัดแรกของโค้ดจริงที่ดำเนินการหลังจากเปิดชิป SBL1 จะถูกโหลดในระหว่างกระบวนการเริ่มต้นระบบตามปกติ หากการเริ่มต้นทำงานผิดปกติ พอร์ต 9008 จะถูกจำลองเสมือนสำหรับการดาวน์โหลดฉุกเฉิน (ย่อพิน force_boot_from_usb บนบอร์ด (MSM8953 คือ gpio37) เป็น 1.8v เพื่อบังคับใช้โหมดดาวน์โหลดฉุกเฉิน)
SBL1 (Second BootLoader stage 1) ซึ่งอยู่ใน eMMC ถูกโหลดโดย PBL เริ่มต้นบัส DDR นาฬิกา ฯลฯ และจำลองพอร์ต 9006 ซึ่งใช้ในการดัมพ์ RAM เมื่อคอมพิวเตอร์ไม่สามารถบู๊ตได้
QSEE/TrustZone ที่เกี่ยวข้องกับความปลอดภัย เช่น ฟิวส์
ข้อมูลการกำหนดค่า DEVCFG OEM (เช่น OEMLock)
ดีบักนโยบายการดีบักที่เกี่ยวข้อง
APPSBL ซึ่งเป็น BootLoader ปัจจุบันใช้ LK (เคอร์เนลขนาดเล็ก);
HLOS (ระบบปฏิบัติการระดับสูง) ซึ่งเป็น Linux/Android;
Modem PBL คือ PBL ของตัวประมวลผลโมเด็ม
MBA (Modem BootAuthenticator) ตัวประมวลผลโมเด็มเริ่มการรับรองความถูกต้อง


(3) เริ่มกระบวนการ

ระบบเปิดอยู่ และ MSM8953 เริ่มทำงานจากการรีเซ็ตการเปิดเครื่อง
PBL ทำงานในโหลด Cortex A53:
        ก. โหลด SBL1 เซ็กเมนต์1 ไปยัง L2 (นั่นคือ TCM) จากอุปกรณ์บู๊ต (เช่น eMMC)

        b. โหลด SBL1 เซ็กเมนต์2 ลงใน RAM ของโปรเซสเซอร์ RPM

SBL1 เซ็กเมนต์ 1 จะเริ่มต้น DDR จากนั้นจึงทำการโหลดต่อไปนี้ให้เสร็จสิ้น:
        ก. โหลดอิมเมจ QSEE จากอุปกรณ์บู๊ตไปยัง DDR

        ข. โหลดอิมเมจ DEVCFG จากอุปกรณ์บู๊ตไปยัง DDR

        c. โหลดอิมเมจ Debug Policy จากอุปกรณ์บู๊ตไปยัง DDR

        d. โหลดอิมเมจ HLOS APPSBL จากอุปกรณ์บู๊ตไปยัง DDR

        จ. โหลดอิมเมจเฟิร์มแวร์ RPM จากอุปกรณ์บู๊ตลงใน RAM ของ RPM

SBL1 ส่งมอบการควบคุมการปฏิบัติงานให้กับ QSEE QSEE สร้างสภาพแวดล้อมการทำงานที่ปลอดภัย กำหนดค่า xPU และรองรับฟิวส์
        ก. SBL1 ทำงานในโหมด AArch32 ในขณะที่ QSEE ทำงานในโหมด AArch64 เพื่อเปลี่ยนเป็นโหมด AArch64 SBL1 จะเริ่มการแมปใหม่ ดำเนินการรีจิสเตอร์ RMR จากนั้นทริกเกอร์วอร์มรีเซ็ต ดังนั้น QSEE จึงสามารถทำงานในโหมด AArch64 ได้

QSEE แจ้งเตือน RPM เพื่อเริ่มต้นการทำงานของเฟิร์มแวร์ RPM
QSEE ถ่ายโอนการควบคุมการปฏิบัติงานไปยัง HLOS APPSBL:
        ก. APPSBL สามารถเริ่มทำงานในโหมด AArch32 เท่านั้น

        b. ในขณะนี้ การสลับโหมดการทำงานของ AArch32 เสร็จสมบูรณ์ในโหมด EL3/Monitor เมื่อดูที่ส่วนหัว ELF ของ APPSBL คุณจะทราบได้ว่าจำเป็นต้องทำงานภายใต้สถาปัตยกรรมชุดคำสั่งแบบ 32 บิต เปลี่ยนโหมด EL3/Monitor เป็นโหมด 32 บิต จากนั้นเริ่ม APPSBL

APPSBL โหลดและตรวจสอบเคอร์เนล APPSBL เปลี่ยนเป็นโหมด AArch64 ที่จำเป็นสำหรับเคอร์เนล HLOS ผ่านการเรียก SCM สิ่งนี้แตกต่างจาก LK ก่อนหน้าที่กระโดดโดยตรงไปยังเคอร์เนลเพื่อรัน
เคอร์เนล HLOS โหลด MBA เป็น DDR ผ่าน PIL
เคอร์เนล HLOS จะยกเลิกการตั้งค่า DSP ของโมเด็มหกเหลี่ยม
Modem PBL ยังคงเริ่มต้นทำงานต่อไป
เคอร์เนล HLOS โหลดอิมเมจโมเด็ม AMSS ไปยัง DDR ผ่าน PIL
โมเด็ม PBL ตรวจสอบความถูกต้องของ MBA จากนั้นข้ามไปที่ MBA
HLOS โหลดอิมเมจ WCNSS (Pronto) ไปยัง DDR ผ่าน PIL
HLOS ยกเลิกการตั้งค่า WCNSS (Pronto) เพื่อให้ Prontoimage สามารถเริ่มดำเนินการได้
HLOS โหลดอิมเมจ LPASS ไปยัง DDR ผ่าน PIL
HLOS ยกเลิกการตั้งค่า LPSAA เพื่อให้ LPASSimage สามารถเริ่มดำเนินการได้
ด้านล่างนี้เป็นแผนภาพแบบง่ายของกระบวนการ ซึ่งแยกความแตกต่างระหว่าง AArch32 และ AArch64 บิต QSEE/TrustZone:

 (https://img2.pic.in.th/pic/3ee38c0cca2c4534a.png)

(4) เกี่ยวกับเวลาเริ่มต้นของ eMMC และ DDR

จะเห็นได้ชัดเจนจากคำอธิบายข้างต้น เพื่อหลีกเลี่ยงความสับสน ลองมาดูแยกกัน:

PBL มีไดรเวอร์ eMMC มีความสามารถในการเข้าถึง eMMC และทำงานใน SRAM ภายในของ MCU
ยกเว้น img ของโปรแกรม PBL ซึ่งอยู่ใน MCU on-chip ROM ส่วนที่เหลือของ img จะถูกจัดเก็บไว้ใน eMMC
ขั้นแรก PBL จะโหลด SBL1 จาก eMMC ไปที่ L2 (แคชภายในไม่ใช่ DDR) และ SBL1 ยังทำงานใน SRAM บนชิปด้วย
หลังจากที่ SBL1 เริ่มต้นการกำหนดเวลาต่างๆ ของ DDR แล้ว DDR จะพร้อมใช้งานตั้งแต่นั้นเป็นต้นมา (eMMC จะพร้อมใช้งานเสมอ);
จากนั้น SBL1 จะโหลด img ที่เหลือไปที่ DDR จากนั้นเริ่มต้นตามลำดับปกติของ Linux