Sheep Sun
Sheep Sun
Thank you for this. Actually I'm glad/surprised to see them provided GPL sources. My further plan includes further reversing the transport protocol strictly on-wire, then implement an opensource RVSWD debug...
@josuah Thank you for your interest in this project. Unfortunately, all existing WCH RISC-V implementation has [major breakage of the specification](https://github.com/fxsheep/openocd_wchlink-rv/wiki/WCH-RISC-V-Debug-Module-hardware-bugs). This is beyond custom 2/1-wire protocol ("physical layer"), to...
Thanks to the recent 4.19 kernel port, the problem seems to be clearer: > [ 2.845913] CFG_RCGR old frequency configuration 0x205 ! [ 2.845923] xo_board [ 2.845930] bi_tcxo [ 2.845937]...
TLDR:理论上可行,实际上很难;即使能够实现,也不一定具有实用价值。 首先,PBL补丁是通过修改页表映射实现的,修补后的PBL随着设备启动就消失了。但是,通过将关机替换为深度休眠来实现保留代码执行权限的思路是可行的。 如果你有能力: 1.修补关机程序可以通过修改EL3(TZ)来拦截HLOS的关机操作 2.不一定要保留DDR供电,可以尝试将SoC关闭到最小状态,保留一个程序在SRAM运行,关闭全部APSS,只保留RPM等待电源键事件 实际上,关闭到最小状态相对容易,从这个状态重新启动就相当困难了。我尝试过使用Reset Debug功能但是没能成功。 另外,“深度休眠”状态下功耗怎样也很难说,对于这种大型SoC来说,很可能和常规待机差不了多少。所以很可能最终成功了也意义不大。
这个也是我一直没解决的疑问了... 可以看到AlephSecurity的原文 https://alephsecurity.com/2018/01/22/qualcomm-edl-5/ 他们也没有解决ugglite上的emmc问题,但是在nokia上却没有遇到这个问题。 这个问题很玄学,这个项目能在land上工作都很玄学。我一开始选择基于lk开发的原因之一就是想利用其mmc函数干净地反初始化emmc,事实上确实有效,因为我过了PBL,而Aleph在PBL里就挂掉了;但是我在SBL1里依然会挂掉,于是我花了很多时间折腾这个问题(可以看到lk4edl里那么多的分支...),甚至想过绕过SBL1自己手动启动平台,但是还是太难了...最后我发现有几个版本的SBL1其实是能工作的,所以就用那个版本了;但是内核是无论如何都没法初始化emmc的,所以当时不得不切到sd卡上。同时,为了不破坏原版的emmc底层(能在不用USB的情况下正常启动),也不大量魔改SBL1,我就干脆把整个boot链子都搬到了sd卡上(qcom的SBL1是原生支持从sd卡启动的,一行代码都不用改,只不过mi签名的aboot不支持,所以原版固件做不到完全放sd卡上跑罢了)。 总结一下,目前我所了解的情况是: 1. BootROM在用lk的函数反初始化emmc后,是可以再初始化并访问emmc的 2. SBL1仅有部分版本正常工作 3. aboot/lk一直可以正常读取emmc(包括刚刚从EDL夺权以后,和从SBL1再次引导时) 4. kernel一直不能初始化emmc(至少3.18和4.9都是不行的,后面我就没关注了) 还有一点:我尝试过两个land,emmc vendor分别是Samsung和Toshiba,问题完全一致,因此基本可以排除emmc本身的问题。 和电源关系应该也不大,因为lk一直可以访问emmc。 其他情况我就不清楚了,也记不清了。 我的猜测只能是某些寄存器的配置在EDL启动路径上和正常启动不一样,并且它还不会被常规的block asynchronous reset之类的局部复位给清掉,导致后面的重新引导路径都受影响。但是我甚至手动对比过寄存器也一直没找到问题在哪。Nokia的底层版本、EDL版本和电路设计的组合或许刚好避开了这个问题。 如果你用emmc启动的话其实也有很多问题要解决,比如原版SBL1如何与patch版共存,可以改分区GUID但是也很麻烦;另外,原版的底层是不能删的,因为我试过,如果SoC冷启动直接进EDL,然后执行lk4edl的启动路径的话,后面的SBL1会直接甩进9008,具体什么情况我也不清楚,总之肯定又是某些模块的寄存器初始化的问题。 另外,其实KVM也一直是一路坎坷,在3.18内核上用qemu-kvm启动WoA到内核阶段会直接导致主机重启(UEFI阶段不会),主机内核应该是报了一个data abort。3.18的kvm启动Linux倒是没问题。不过4.9上两个都不行了,很无语。我记得最后我用一个配置启动过WoA,但我已经忘记当时怎么配的了。毕竟我是强行把主机内核改到EL2的,而8937原本底层是不用HYP,所以TZ估计根本没有考虑过EL2,出各种问题也不意外。 平台大了,底层也不开放的情况下,玄学问题会很多。这个问题最彻底的解决办法,大概就是了解清楚启动的细节,然后实现一个开源的SBL1罢,不过我在放弃land和qcom的兴趣之前,都一直没能实现它。8937本来就是各厂的secboot刚普及的那几代平台,况且mainline kernel的支持一直不是很有希望,我建议对底层感兴趣的话还是去玩8916吧...甚至还能从sd接口连jtag呢...