MSM8937平台bootloader调试之一

        MSM8937平台的AP是八核A53的处理器,分成两个cluster,最高主频支持1.4GHZ,PMIC有两种组合:PM8937+PMI8937和PM8937+PMI8952。

        高通平台启动是从PBL开始的,也就是内部ROM里开始运行,PBL加载SBL1和RPM部分后,SBL1开始运行,SBL1加载RPM部分,TZ,APPSBL(aboot)。加载完毕后应该启动lk,但是SBL1并不会直接启动lk,而是由TZ来启动的,TZ分为两个部分:QSEE,QHEE。SBL1的运行环境税32bit,而TZ是64bit。因此,在SBL1最后跳转到QSEE时候需要切换到aarch64,然后trigger一个warm reset,这样就会启动到QSEE的64bit运行环境中交由QSEE运行。QSEE会通知RPM开始运行,然后QHEE开始运行,最后由QHEE启动lk。

        SBL1里一般要修改的几个地方有:1)CDT,这里改平台信息,比如是MTP还是QRD等等,还有就是DDR的参数;2)UART口,如果要看SBL1里打印信息的话就必须要配置UART口,当然如果默认的UART口刚好跟硬件连线一致的话这个也不用改。如果不一致的话需要修改uart_sbl_8937.xml如下所示的地方:


根据硬件修改UART_PHY_DEVICE_X,X可以为1,2,3,4. 串口波特率为115200。

         调试的时候遇到一个很奇怪的问题就是中SBL1最后跳转到QSEE时trigger warm reset的时候系统重启了,由于TZ里面没有UART打印,搞不清楚是在切换到TZ的时候出了问题还是中运行TZ的时候出了问题还是在启动lk的时候出了问题。后来做了很多尝试发现可能跟UART口的控制有关。硬件连的UART口是UART1,而版本里默认的配置的是UART2,这个值SBL1中以及修改过了,但是TZ中还要进行配置,TZ中会对BLSP的各个QUP以及UART的访问权限接口控制。而UART1默认的访问权限是TZ,也就是只能由TZ访问,但是中lk的初始化中也需要对UART口进行初始化以便进行打印输出,这样就会造成冲突导致系统重启。需要修改的是TZ的一个xml文件。改了之后重新编译devcfg.mbn,这样系统就可以看到lk运行的log了。

你可能感兴趣的:(MSM8937平台bootloader调试之一)