FBCon、VT 文本渲染与启动 Logo
1. 位置
fbcon源码位于drivers/video/fbdev/core/,只有CONFIG_FRAMEBUFFER_CONSOLE=y时链接进fb.o。
drivers/video/console/中的dummycon/vgacon等是其它VT console后端。
2. 调用关系
1 | printk/TTY/VT |
3. 绑定
fbcon注册后可在framebuffer出现时接管VT;fbcon=map:可指定VT到fb映射。VT_HW_CONSOLE_BINDING支持在console drivers间切换。
4. 字符渲染
bitblit根据font bitmap、前景/背景色和字符属性生成imageblit。滚屏可:
- copyarea移动像素;
- pan/wrap调整显示起点;
- redraw整屏。
选择取决于fb能力和配置。
5. Cursor
softcursor.c可软件反色/绘制光标;硬件fb_cursor由驱动提供。Cursor timer和VT切换需与console lock同步。
6. 旋转
可选0/90/180/270度转换,代码分布在fbcon_rotate/cw/ccw/ud。旋转增加CPU和内存带宽成本。
7. Blank
VT blank最终触发fb blank和可能的backlight/DPMS。解除blank需恢复mode、palette和console内容。
8. Logo
logo.c根据架构和颜色深度选择mono/VGA16/CLUT224 logo,在fbcon准备阶段绘制。
pnmtologo是构建host工具,将PBM/PPM转换为内核数据。
9. 启动时序
1 | early console |
过早移除firmware framebuffer会使console短暂黑屏,aperture handoff需协调。
10. 并发
fbcon运行于console/TTY路径,可能在panic或atomic上下文附近被调用。Driver drawing回调不能随意睡眠;慢速framebuffer常使用deferred I/O和专门约束。
11. RK3588
Rockchip vendor defconfig未显式列出CONFIG_FB/FRAMEBUFFER_CONSOLE,最终值受Kconfig和产品fragment影响。Android产品常不依赖fbcon,Linux控制台产品可能通过DRM fbdev emulation获得fbcon。
12. 调试
- kernel cmdline
console=、fbcon=; /proc/consoles;/sys/class/vtconsole/;/proc/fb;- DRM/fb probe顺序;
- 检查是否被
nomodeset影响。
正在加载留言…