qemu: lumia550.dts, pbl_stub WIP, build-emmc.sh, launch-wsl.sh dry-run
This commit is contained in:
Executable
+26
@@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
# Сборка emmc.img = Boot1 + Boot2 + RPMB + User. WIP без orig FFU.
|
||||
set -e
|
||||
BOOT_MB=${BOOT_MB:-4}
|
||||
RPMB_MB=${RPMB_MB:-4}
|
||||
USER_MB=${USER_MB:-7456}
|
||||
OUT=${1:-images/emmc.img}
|
||||
FW_DIR=fw
|
||||
|
||||
usage() { echo "usage: $0 [--help] [out.img]"; echo " Нужны fw/orig.ffu или fw/dump.bin. Без них — нулевой WIP-образ для проверки геометрии."; }
|
||||
|
||||
if [ "$1" == "--help" ] || [ "$1" == "-h" ]; then usage; exit 0; fi
|
||||
mkdir -p "$(dirname "$OUT")"
|
||||
|
||||
# WIP: пока нет orig FFU (2GB не влезет в 4.1G на сервере) — строим нулевой образ верной геометрии
|
||||
# Boot1/Boot2 кратно 128K, одинаковые. User кратно 512B.
|
||||
echo "[build-emmc] WIP: orig FFU не найден в $FW_DIR — строю нулевой образ геометрии"
|
||||
echo "[build-emmc] Положи в fw/orig.ffu и перезапусти для реальной GPT40"
|
||||
echo "[build-emmc] Boot=${BOOT_MB}M RPMB=${RPMB_MB}M User=${USER_MB}M -> $OUT"
|
||||
|
||||
BOOT_KB=$((BOOT_MB*1024)); RPMB_KB=$((RPMB_MB*1024)); USER_KB=$((USER_MB*1024))
|
||||
TOTAL_KB=$((BOOT_KB*2+RPMB_KB+USER_KB))
|
||||
dd if=/dev/zero of="$OUT" bs=1K count=1024 status=none
|
||||
truncate -s "${TOTAL_KB}K" "$OUT"
|
||||
echo "[build-emmc] OK: $OUT ($(du -h "$OUT" | cut -f1)) — НУЛЕВОЙ, не шить в прод!"
|
||||
echo "[build-emmc] TODO: mkemmc.sh + ffureader GPT + CID Samsung + EXT_CSD REV5"
|
||||
Executable
+23
@@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
# Запуск эмулятора под linux/amd64 (WSL). WIP: проверяет окружение, показывает команду.
|
||||
set -e
|
||||
if [ "$1" == "--help" ] || [ "$1" == "-h" ] || [ $# -eq 0 ]; then
|
||||
cat <<'EOF'
|
||||
usage: ./qemu/launch-wsl.sh [--check|--dry-run]
|
||||
--check проверить qemu-system-arm, WSLg, образ
|
||||
--dry-run показать команду запуска (по умолчанию)
|
||||
Мобильное окно: portrait 720x1280, mouse=touch absolute, GTK.
|
||||
thor2/WDRT только из Windows-хоста через usbip (см. compat/).
|
||||
EOF
|
||||
exit 0
|
||||
fi
|
||||
IMG=images/emmc.img
|
||||
echo "[launch] WIP dry-run:"
|
||||
echo "qemu-system-arm -M none -cpu cortex-a7 -m 1024 \\"
|
||||
echo " -kernel qemu/pbl_stub.py \\"
|
||||
echo " -drive file=$IMG,if=none,format=raw,id=emmc \\"
|
||||
echo " -device sdhci-pci -device sd-card,drive=emmc \\"
|
||||
echo " -serial stdio -display gtk,window-close=off"
|
||||
echo "[launch] ВНИМАНИЕ: -M none/saimaa еще нет, sdhci-pci временный (нужен platform 0x07824000)."
|
||||
echo "[launch] Видео WIP: ramfb 0x83000000, без virtio-gpu (палится)."
|
||||
if [ "$1" == "--check" ]; then ../lumia-emu/tools/check-env.sh 2>/dev/null || ./tools/check-env.sh; fi
|
||||
@@ -0,0 +1,100 @@
|
||||
/dts-v1/;
|
||||
|
||||
/ {
|
||||
model = "Microsoft Lumia 550 Saimaa RM-1127";
|
||||
compatible = "microsoft,saimaa", "qcom,msm8909";
|
||||
qcom,msm-id = <245 0>;
|
||||
qcom,board-id = <0 0>;
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial0:115200n8";
|
||||
bootargs = "earlycon console=ttyMSM0,115200n8";
|
||||
};
|
||||
|
||||
memory@80000000 {
|
||||
device_type = "memory";
|
||||
reg = <0x80000000 0x40000000>; /* 1GB, верх обрезан HLOS */
|
||||
};
|
||||
|
||||
reserved-memory {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
qseecom@87a00000 { reg = <0x87a00000 0x200000>; no-map; };
|
||||
modem_adsp@88000000 { reg = <0x88000000 0x5500000>; no-map; }; /* WIP: stub */
|
||||
peripheral@8d500000 { reg = <0x8d500000 0x500000>; no-map; };
|
||||
splash@83000000 { reg = <0x83000000 0xc00000>; no-map; };
|
||||
};
|
||||
|
||||
cpus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
cpu@0 { compatible = "arm,cortex-a7"; reg = <0>; };
|
||||
cpu@1 { compatible = "arm,cortex-a7"; reg = <1>; };
|
||||
cpu@2 { compatible = "arm,cortex-a7"; reg = <2>; };
|
||||
cpu@3 { compatible = "arm,cortex-a7"; reg = <3>; };
|
||||
};
|
||||
|
||||
soc {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges = <0 0 0 0xffffffff>;
|
||||
|
||||
tlmm: pinctrl@1000000 {
|
||||
compatible = "qcom,msm8909-tlmm";
|
||||
reg = <0x1000000 0x300000>;
|
||||
};
|
||||
|
||||
imem@8600000 {
|
||||
compatible = "qcom,msm-imem";
|
||||
reg = <0x08600000 0x1000>;
|
||||
};
|
||||
|
||||
sdhc_1: sdhci@7824000 {
|
||||
compatible = "qcom,sdhci-msm";
|
||||
reg = <0x07824900 0x11c>, <0x07824000 0x800>;
|
||||
qcom,bus-width = <8>;
|
||||
non-removable;
|
||||
status = "okay"; /* eMMC User, Boot1/2 нули WIP */
|
||||
};
|
||||
|
||||
sdhc_2: sdhci@7864000 {
|
||||
compatible = "qcom,sdhci-msm";
|
||||
reg = <0x07864900 0x11c>, <0x07864000 0x800>;
|
||||
qcom,bus-width = <4>;
|
||||
status = "okay"; /* microSD */
|
||||
};
|
||||
|
||||
serial0: serial@78af000 {
|
||||
compatible = "qcom,msm-uartdm-v1.4";
|
||||
reg = <0x78af000 0x200>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usb@78d9000 {
|
||||
compatible = "qcom,hsusb-otg";
|
||||
reg = <0x78d9000 0x400>;
|
||||
qcom,hsusb-otg-mode = <1>;
|
||||
status = "okay"; /* 05C6:9008 / 045E:9006 см. compat/ */
|
||||
};
|
||||
|
||||
spmi@200f000 {
|
||||
compatible = "qcom,spmi-pmic-arb";
|
||||
reg = <0x200f000 0x1000>;
|
||||
status = "okay"; /* PM8909 WIP-stub */
|
||||
};
|
||||
};
|
||||
|
||||
gpio-keys {
|
||||
compatible = "gpio-keys";
|
||||
vol-up { label = "Volume Up"; gpios = <&tlmm 90 1>; linux,code = <115>; };
|
||||
cam-focus { label = "Camera Focus"; gpios = <&tlmm 91 1>; linux,code = <528>; };
|
||||
cam-snap { label = "Camera Snapshot"; gpios = <&tlmm 92 1>; linux,code = <766>; };
|
||||
/* PWR/VolDown через pm8909_pon: 116/114 */
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env python3
|
||||
"""PBL-stub WIP: имитирует PBL MSM8909 для эмуляции.
|
||||
Оригинал ROM 0x00100000 сверяет SBL1 по PK_HASH и уходит в EDL при ошибке.
|
||||
Стуб: читает SBL1 из emmc User LBA 32768, кладет в IMEM-макет, прыгает.
|
||||
EDL cookie 0x193D100 bit0 -> Sahara-Hello заглушка.
|
||||
WIP: SecureBoot скипнут! Для 1:1 нужен QFPROM/PK_HASH из живого дампа.
|
||||
"""
|
||||
import struct, sys
|
||||
|
||||
PBL_ADDR = 0x00100000
|
||||
IMEM_ADDR = 0x08600000
|
||||
SBL1_LBA = 32768
|
||||
EDL_COOKIE_ADDR = 0x193D100
|
||||
|
||||
def main(img="images/emmc.img"):
|
||||
print(f"[pbl-stub] PBL @0x{PBL_ADDR:08X} (WIP, SecureBoot SKIPPED)")
|
||||
print(f"[pbl-stub] check EDL cookie @0x{EDL_COOKIE_ADDR:08X} ... 0 (boot normal)")
|
||||
print(f"[pbl-stub] would load SBL1 from User LBA {SBL1_LBA} -> IMEM 0x{IMEM_ADDR:08X}")
|
||||
print("[pbl-stub] WIP: нужен fw/SBL1.bin из ffureader. Пока только лог.")
|
||||
print("[pbl-stub] Sahara-Hello stub: 05C6:9008 ready (см. compat/)")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(sys.argv[1] if len(sys.argv) > 1 else "images/emmc.img")
|
||||
Reference in New Issue
Block a user