免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6186 | 回复: 2
打印 上一主题 下一主题

[FreeBSD] vt启动时的彩蛋 [复制链接]

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-22 21:45 |只看该作者 |倒序浏览
本帖最后由 lsstarboy 于 2015-05-22 21:48 编辑

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

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

(没有flash不能上传图片,图见二楼)


显示方法:

使用通用内核,在loader.conf中添加以下三行,然后重启:

  1. hw.vga.textmode=”0”
  2. kern.vty=”vt”
  3. 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,从这里可以看到图像的大小的颜色深度:
  1. ……
  2. unsigned int vt_logo_width = 257;
  3. unsigned int vt_logo_height = 219;
  4. unsigned int vt_logo_depth = 1;

  5. unsigned char vt_logo_image[] = {
  6.         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
  7.         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  8.         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  9.         0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  10.         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00
  11. ……
复制代码
3、显示部分,从这部分可以看到显示的条件:(1)用vt模式;(2)boot_mute;(3)logo的色彩深度为1;(4)有splash。
  1. ……
  2.         /* Display a nice boot splash. */
  3.         if (!(vd->vd_flags & VDF_TEXTMODE) && (boothowto & RB_MUTE)) {
  4.   
  5.                 top = (vd->vd_height - vt_logo_height) / 2;     
  6.                 left = (vd->vd_width - vt_logo_width) / 2;
  7.                 switch (vt_logo_depth) {
  8.                 case 1:
  9.                         /* XXX: Unhardcode colors! */
  10.                         vd->vd_driver->vd_bitblt_bmp(vd, vd->vd_curwindow,
  11.                             vt_logo_image, NULL, vt_logo_width, vt_logo_height,
  12.                             left, top, TC_WHITE, TC_BLACK);
  13.                 }
  14.                 vd->vd_flags |= VDF_SPLASH;
  15.         }

  16. ……

复制代码



自定义内核:

1、有splash选项;
2、有vt、vt_vga选项;



后续:

对比了bmp格式,发现跟windows中的不一样,甚至顺序都不一样,看来还要深入源代码才能找真相——话说显示bmp,本身的代码就挺复杂,不信你搜一下,清一色使用mfc来显示,C语言都极为罕见!














另发于:http://bbs.landingbj.com/t-0-256951-1.html

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
2 [报告]
发表于 2015-05-22 21:45 |只看该作者

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-08-07 06:20:00
3 [报告]
发表于 2015-07-15 16:17 |只看该作者
不错,挺会玩的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP