最后的挣扎:
数据结构基本完全解析,但是仍旧有少量???未知的部分,回过头来看ConnectorFlags参数,有非常重要的实际意义,具体涉及到接口能不能准确工作。回到上次的内容。一个完整的连接器描述符包含12个字节,FFFFFFFF表示连接器参数,参数意义暂时未知???,一般类型如下: - 40 00 00 00 Dummy
- 30 00 00 00 LVDS
- 30 02 00 00 (DualLink)LVDS(高分屏需要双LVDS传输才能保证带宽
- 07 01 00 00/81 00 00 00 DVI
- 09 00 00 00 VGA
- 07 01 00 00 DP
- 06 00 00 00 HDMI
复制代码逆向的角度。FF FF FF FF四个字节构成32个位,目前可以在逆向查找得到的有使用的标识位 10h也就是10000b,使用了BIT4,这么多的条件测试,有什么意义呢? 几乎每一个出现BIT4的条件判断都和背光控制有关,所以可以断定BIT4就是使能背光的标识位。
- 80h也就是10000000b,使用了BIT7
- 100h也就是100000000b,使用了BIT8
- 400h也就是10000000000b,使用了BIT10
复制代码这三个BIT为别对应eDP/DP驱动列表的不同起始位置(eDP/DP驱动列表包含多个不同的LCD驱动时序表) 200h也就是1000000000b,对应BIT9,从对LVDS寄存器的操作可以看出,BIT9就是打开双路LVDS的配置。 有点凌乱,再次列个表。 位 |
背光
|
eDP/DP驱动表位置0
|
eDP/DP驱动表位置1
|
eDP/DP驱动表位置2
|
双路LVDS模式
| BIT4 |
1
|
|
|
|
| BIT7 |
|
1
|
|
|
| BIT8 |
|
|
1
|
|
| BIT9 |
|
|
|
|
1
| BIT10 |
|
|
|
1
|
|
有了这个认知,就可以很容易理解参数的含义。 例如30 02 0000 (DualLink)LVDS 4字节30 02 0000 对应到32位无符号数是230h,对应的二进制是1000110000b。(最右边是BIT0位),也就是BIT9是1,BIT4是1,BIT5是1,对应表格就是使能双路LVDS模式,使能背光,BIT5目前并没有看到什么意义(从10.12.6的驱动来),因为使用的是LVDS接口,所以不需要eDP/DP的驱动列表的起始LCD时序位置。 至于剩下的极少数???,驱动中暂时也没有找到相关的使用,可以认为无效的0填充,至此基本上可以完全可以解析和理解整个FrameBuffer结构的意义。
|