MI FB DEBUG SOP¶
REVISION HISTORY¶
| Revision No. | Description |
Date |
|---|---|---|
| 1.00 | 12/08/2023 | |
| 1.01 | 12/10/2024 |
1. 名词解释¶
-
disp_path
MI_FB直接在DISP模块上显示UI和硬件鼠标的方式,FB的图像能够直接通过DISP模块输出到屏幕上,该方式适用于DISP支持GOP硬件的芯片。
-
video_path
MI_FB通过MI_RGN将FB的画面间接叠加到RGN支持贴OSD的模块上(SCL/VENC/DISP等),该方式适用于用户想以Framebuffer的方式叠加画面到视频流上或者DISP不支持GOP硬件的芯片。
-
像素alpha值
不同颜色格式的像素的alpha分量计算方式不同。MI_FB中的alpha值越小代表越透明,0代表完全透明,最大值代表完全不透明(ARGB1555格式需要是例外)。
-
RGB格式(例如RGB565)像素所有的alpha值默认为255。
-
ARGB格式(例如ARGB8888、ARGB4444、ARGB1555)像素alpha值需要参考像素中alpha分量的bits。ARGB8888像素的alpha分量占bit[24:31]共8bits,取值范围是0-255;ARGB4444像素的alpha分量占bit[12:15]共4bits,取值范围是0-15;ARGB1555像素的alpha分量占bit[15]共1bit,取值范围是0-1,bit[15] = 0的像素实际像素alpha值等于alpha属性中"alpha0"的值,bit[15] = 1的像素实际像素alpha值等于alpha属性中"alpha1"的值。
-
Index格式(例如I2、I4、I8)像素值只存储了Index,具体的ARGB值需要查表"Cmap"("video_path"时,FB 的Cmap不能设置,用户需要设置MI_RGN的palette table来替代)来确定,"Cmap"中的格式为ARGB8888,其中alpha分量有8bits,取值范围是0-255。
-
-
水线值
GOP硬件使用DMA FIFO来缓存MIU返回的数据,并从DMA FIFO中读数据去显示。FIFO中缓存的数据默认有一个阈值,称为“水线值”。 当FIFO中剩余的数据小于等于“水线值”时,GOP硬件会再次向MIU发请求,获得新的数据。正常显示情况下无需调整“水线值”。
-
“水线值”越大,FIFO 中数据不易被取空,UI不易显示错位/闪烁。
-
“水线值”越小,FIFO 中数据容易被取空,UI容易显示错位/闪烁。
-
2. FB常见问题¶
2.1. mi_fb.ko加载失败¶
-
确认问题步骤:
-
查看加载mi_fb.ko失败的日志,确认失败类型:
(1). 日志:
insmod: can't insert '/xxx/mi_fb.ko': unknown symbol in module or invalid parameter(2). 日志:
Must support at least one disp path, please check memuconfig config(3). 日志:
parsing ini config failed
-
-
出现"unknown symbol"日志的原因
缺少mi_fb.ko依赖,需要进一步获取Linux的kmsg的log才能知道具体缺少那些依赖。
cat /proc/kmsg缺少symbol类型 示例 原因 解决方式 Linux framebuffer框架 register_framebuffer、framebuffer_alloc...Linux framebuffer框架被编译成模块(fb.ko)并且fb.ko没有在mi_fb.ko之前加载。 加载mi_fb.ko之前先加载fb.ko或者把Linux framebuffer框架编译进内核里。 DISP MHAL_DISP_DeviceGetInstance、MHAL_DISP_DeviceGetDisplayInfo...没有先加载mi_disp.ko。 加载mi_fb.ko之前先加载mi_disp.ko;或者关闭fb的"disp_path"(如果用户不需要在DISP模块上显示FB UI)。 RGN mi_rgn_GetWinInstance、MHAL_RGN_GetInternalApis没有先加载mi_rgn.ko。 加载mi_fb.ko之前先加载mi_rgn.ko;如果只提示缺少 mi_rgn_GetWinInstance且用户不需要在DISP以外的模块上显示FB UI,可以选择关闭fb的"video_path"。 -
出现"please check menuconfig config"日志的原因
编译MI_FB时"disp_path"和"video_path"都没有打开。MI_FB要求编译时必须至少打开"disp_path"或"video_path"中的一个选项。

-
出现"parsing ini config failed"日志的原因
MI_FB的配置文件
config.json不存在或者配置失败。请用户检查配置文件,如有需要可联系FAE协助.
2.2. FB UI不显示¶
-
确认问题步骤:
EXP:MI_FB /dev/fb0 UI没有显示出来。
-
获取FB proc信息(
cat /proc/mi_modules/mi_fb/mi_fbX"X即fb设备的副设备号"),以下是部分内容。
从以上proc信息可以看出:
-
"xres"、"yres"、"xres_virtual"、"yres_virtual"、"xoffset"、"yoffset"等属性确认UI的宽高分别为1024x600,且UI显示的内容在整张framebuffer的[0, 0]位置。
-
"Show"属性为TRUE,如果该属性为FALSE时FB UI不会显示。
-
"colorFmt"属性为I8,代表UI的颜色格式为Index-8格式,确定像素的颜色和透明度需要结合MI_FB设定的Cmap("video_path"的Cmap由MI_RGN API
MI_RGN_Init的参数确定)。 -
"Alpha Info"中"Channel"属性为1,代表透明模式为像素模式;"Invert"为0,代没有打开透明反转。如果像素的alpha分量为0,FB UI就不会显示。
-
"ColorKey Info"属性的"Enable"为0,代表没有使能ColorKey功能。如果使能了ColorKey且指定的颜色与FB UI像素的颜色一致,那部分像素就不会显示。
-
-
保存framebuffer到文件
cmd
cp /dev/fbX [path]/[file name]执行完后会在指定的[path]路径下生成名为[file name]的文件,推荐使用软件《7yuv》打开文件查看画面。如果用户没有把UI画到framebuffer的正确区域UI是无法正常显示的,如果UI像素对应的alpha分量最后表达的透明值为0(透明值接近0是UI也可能看不清楚),那么UI就不会显示出来。
-
-
出现UI不显示的原因
proc信息 原因 解决方式 "xres"、"yres"、"xres_virtual"、"yres_virtual" 框定的区域尺寸不符合用户预期。 如果用户不会调用ioctl FBIOPAN_DISPLAY、FBIOPUT_VSCREENINFO或FBIOSET_DISPLAYLAYER_ATTRIBUTES去修改framebuffer屏幕尺寸,那么需要用户去修改MI_FB的配置文件config.json中的"fb_width"和"fb_height"("xres"和"xres_virtual"的默认值为"fb_width","yres"的默认值为"fb_height","yres_virtual"不小于"yres");如果用户会在打开fb之后去修改屏幕尺寸,需要用户去检查参数是否有误。"xoffset"、"yoffset" 可见屏幕偏移位置不在用户更新framebuffer的位置。 需要用户确认调用ioctl FBIOPAN_DISPLAY的参数是否有误。"Show" UI显示属性为FALSE。 需要用户确认调用ioctl FBIOSET_SHOW的参数是否有误。可以通过echo命令快捷修改(cmdecho SHOW GUI [enable] > /proc/mi_modules/mi_fb/mi_fbX)"colorFmt"和"Alpha Info" 像素alpha属性最终表达值接近0。 这类情况需要结合用户保存的framebuffer文件一起分析(参考步骤2)。"Channel"属性为1时,透明模式为像素模式,该模式下用户需要确认每个像素的像素alpha值(参考本文"1. 名词解释"中"像素alpha值");"Channel"为0时,透明模式为全局模式,该模式下用户需要确认"GlobalAlphaValue"的值。然后确定透明反转的属性,如果"Invert"属性为1,代表打开了透明反转,实际透明值 = 255 - 当前透明值。最后计算出的实际透明值如果接近0,FB UI将不显示。如果确定是该原因,用户需要调整alpha属性(全局模式 cmd echo GLOBAL_ALPHA GUI [GlobalAlpha] > /proc/mi_modules/mi_fb/mi_fbx。像素模式且颜色格式为ARGB1555时 cmdecho ALPHA01 GUI [alpha0] [alpha1] > /proc/mi_modules/mi_fb/mi_fbX)或者UI的alpha分量。"ColorKey Info" ColorKey使能且指定的颜色与用户UI的颜色一致(一般是UI部分消失)。 关闭colorkey功能(cmd echo COLORKEY GUI 0 0 0 0 > /proc/mi_modules/mi_fb/mi_fbX),或者调整colorkey指定的颜色(cmdecho COLORKEY GUI 1 [R] [G] [B] > /proc/mi_modules/mi_fb/mi_fbX)或者UI的颜色。
2.3. FB UI颜色异常¶
-
确认问题步骤:
-
获取FB proc信息(
cat /proc/mi_modules/mi_fb/mi_fbX"X即fb设备的副设备号"),以下是部分内容。
从"colorFmt"属性可以看出FB的颜色格式为"I8",如果用户设定cmap没有成功UI显示的颜色就会不对(仅颜色格式为"I8"会有该类问题)。
-
-
出现问题的原因
-
用户没有使用正确颜色格式的UI。
-
cmap设定没有成功。("video_path"时,FB 的Cmap不能设置,用户需要设置MI_RGN的palette table来替代)
-
config.json 配置项中 "fb_hwlayer_dst" 和 "fb_hwlayer_outputcolor" 不匹配。
(1). 默认 DISP 视频层只开启第一个颜色空间转换单元,此时需确认 "fb_hwlayer_outputcolor = 0" 即可。
(2). 若 DISP 视频层只开启第二个颜色空间转换单元,此时需满足条件:
a. "fb_hwlayer_dst = 3" 且 "fb_hwlayer_outputcolor = 1"
b. "fb_hwlayer_dst = 12" 且 "fb_hwlayer_outputcolor = 0"
-