[原创]FreeBSD下vt的启动logo彩蛋_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3267 | 回复: 0   主题: [原创]FreeBSD下vt的启动logo彩蛋        下一篇 
wulcan
版主
等级:中校
经验:1795
发帖:124
精华:0
注册:2014-3-19
状态:离线
发送短消息息给wulcan 加好友    发送短消息息给wulcan 发消息
发表于: IP:您无权察看 2015-5-22 20:37:48 | [全部帖] [楼主帖] 楼主

近日一直在折腾vt,感觉这是FreeBSD的一大进步,最大的意义在于:可以通过非常小的代价来显示汉字,包括安装在内的一些步骤,以后就可以用汉字或其他多字节语言了,不必再被英文不好的同学所鄙视。

无意中竟然发现一个彩蛋,就是在某些情况下,会出现一个黑白的FreeBSD的logo,这个logo虽然小一些,但有终究比没有强。

北京联动北方科技有限公司

显示方法:
使用通用内核,在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语言都极为罕见!




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论