- 论坛徽章:
- 54
|
本帖最后由 lsstarboy 于 2015-05-22 21:48 编辑
近日一直在折腾vt,感觉这是FreeBSD的一大进步,最大的意义在于:可以通过非常小的代价来显示汉字,包括安装在内的一些步骤,以后就可以用汉字或其他多字节语言了,不必再被英文不好的同学所鄙视。
无意中竟然发现一个彩蛋,就是在某些情况下,会出现一个黑白的FreeBSD的logo,这个logo虽然小一些,但有终究比没有强。
(没有flash不能上传图片,图见二楼)
![]()
显示方法:
使用通用内核,在loader.conf中添加以下三行,然后重启:
- hw.vga.textmode=”0”
- kern.vty=”vt”
- boot_mute="YES"
复制代码 显示限制:
1、这个splash(其实这本质上就是一个splash)只能是黑白的,彩色的不行,灰度的也不行。
2、这个logo的分辨率只有257x219,也就是中间的那么一块,整个屏幕是640x480。
Logo显示源代码追踪:
通过查看logo的源代码,可以看出这个限制:
1、 图像是嵌入在c语言当中的,没有办法自定义图片,大致看了一下,觉得数据有些不对劲,有时间再分析一下,看能不能把windows的bmp转为这个logo。
2、logo位置:/usr/src/sys/dev/vt/logo/logo_freebsd.c,从这里可以看到图像的大小的颜色深度:- ……
- unsigned int vt_logo_width = 257;
- unsigned int vt_logo_height = 219;
- unsigned int vt_logo_depth = 1;
-
- unsigned char vt_logo_image[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00
- ……
复制代码 3、显示部分,从这部分可以看到显示的条件:(1)用vt模式;(2)boot_mute;(3)logo的色彩深度为1;(4)有splash。- ……
- /* Display a nice boot splash. */
- if (!(vd->vd_flags & VDF_TEXTMODE) && (boothowto & RB_MUTE)) {
-
- top = (vd->vd_height - vt_logo_height) / 2;
- left = (vd->vd_width - vt_logo_width) / 2;
- switch (vt_logo_depth) {
- case 1:
- /* XXX: Unhardcode colors! */
- vd->vd_driver->vd_bitblt_bmp(vd, vd->vd_curwindow,
- vt_logo_image, NULL, vt_logo_width, vt_logo_height,
- left, top, TC_WHITE, TC_BLACK);
- }
- vd->vd_flags |= VDF_SPLASH;
- }
- ……
复制代码
自定义内核:
1、有splash选项;
2、有vt、vt_vga选项;
后续:
对比了bmp格式,发现跟windows中的不一样,甚至顺序都不一样,看来还要深入源代码才能找真相——话说显示bmp,本身的代码就挺复杂,不信你搜一下,清一色使用mfc来显示,C语言都极为罕见!
另发于:http://bbs.landingbj.com/t-0-256951-1.html
|
|