Chinaunix首页 | 论坛 | 博客
  • 博客访问: 64988
  • 博文数量: 28
  • 博客积分: 230
  • 博客等级: 二等列兵
  • 技术积分: 260
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-01 09:44
文章分类

全部博文(28)

文章存档

2016年(1)

2015年(2)

2014年(11)

2013年(7)

2012年(7)

我的朋友

分类: LINUX

2012-10-26 11:34:46

    这几天拿到一款预装ubuntu12.04系统的PC单板,遇到的问题是切换到console(Ctrl+Alt+F1)时没有显示,一片黑。
    现象:
        1 linux启动过程中没有任何信息输出,也是“黑屏”,修改/boot/grub/grub.cfg文件,去掉启动参数quiet,依然如此。
        2 仔细观察切换后,发现屏幕虽然也是黑的,但还是能感觉屏幕亮度有少许变化,并不是全黑,并且显示器灯一直正常亮,说明是有显示信号输出的。为了证实该想法,切换后,虽然黑屏,但盲打输入用户名密码,并且在当前目录创建一个新目录mkdir xxx,再切换回图形界面(Ctrl+Alt+F7),查看主目录下果然存在一个xxx的目录,说明我们遇到的只是一个显示问题。
        
        因为linux图形化系统启动后,其中的terminal工作正常,那么结合现象1,说明是启动时配置的显示参数有问题,尝试修改显示参数,经过验证如下设置是OK的:
1 首先确认系统可以设置的启动参数:
#hwinfo --framebuffer
  02: None 00.0: 11001 VESA Framebuffer
  [Created at bios.464]
  Unique ID: rdCR.QstqgPARaQB
  Hardware Class: framebuffer
  Model: ""
  Vendor: ""
  Device: ""
  SubVendor: "!"
  SubDevice: 
  Revision: ""
  Memory Size: 7 MB + 704 kB
  Memory Range: 0x3f800000-0x3ffaffff (rw)   800*600*16
  Mode 0x0301: 640x480 (+640), 8 bits
  Mode 0x0303: 800x600 (+832), 8 bits
  Mode 0x0305: 1024x768 (+1024), 8 bits
  Mode 0x0307: 1280x1024 (+1280), 8 bits
  Mode 0x0311: 640x480 (+1280), 16 bits
  Mode 0x0314: 800x600 (+1600), 16 bits
  Mode 0x0317: 1024x768 (+2048), 16 bits
  Mode 0x031a: 1280x1024 (+2560), 16 bits
  Mode 0x0312: 640x480 (+2560), 24 bits
  Mode 0x0315: 800x600 (+3200), 24 bits
  Mode 0x0318: 1024x768 (+4096), 24 bits
  Mode 0x031b: 1280x1024 (+5120), 24 bits
  Mode 0x0320: 1400x1050 (+1408), 8 bits
  Mode 0x0321: 1400x1050 (+2816), 16 bits
  Mode 0x0323: 1400x1050 (+5632), 24 bits
  Mode 0x0324: 1600x1200 (+1600), 8 bits
  Mode 0x0325: 1600x1200 (+3200), 16 bits
  Mode 0x0327: 1600x1200 (+6400), 24 bits
  Config Status: cfg=new, avail=yes, need=no, active=unknown
 说明BIOS是支持VESA的,并且我的显卡支持800*600*16的分辨率。

2  因为console需要vesa的支持,因此查看/etc/modprobe.d/blacklist-framebuffer.conf ,将vesafb从黑名单中去掉:
#blacklist vesafb

3 接下来就需要修改grub引导参数了:
 涉及到grub的文件有以下几个,
/etc/default/grub 1
/etc/grub.d/10_linux 2
/etc/grub.d/30_os-prober 3
/boot/grub/grub.cfg 4

当执行update-grub2时,会根据1,2,3来生成grub的配置文件4(grub.cfg)。
在ubuntu系统中update-grub 和update-grub2是相同的,最终运行的命令都是:
mkconfig -o /boot/grub/grub.cfg

如果不通过上面几个配置文件修改grub的话,我们可以直接修改grub.cfg也是一样的。
vi /boot/grub/grub.cfg
1  找到启动linux的相应entry段:
 menuentry "Ubuntu, Linux 3.2. ...... "
2  去掉其后面的    gfxmode $linux_fgx_mode                               *
3  linux /boot/vmlinuz-3.2.0.29-generic ...... ro $vt_handoff 修改为
   linux /boot/vmlinuz-3.2.0.29-generic ...... ro vga=0x317 $vt_handoff (注意这个VGA参数需要      vesafb的支持,因此上一步确认vesa)
4  在该entry段之前增加模块gfxterm 
   insmod gfxterm
   set gfxpayload=800*600      (这里我尝试设置1024*768但不起作用)       *

保存配置并重启就可以看到console启动界面了,并且Ctrl+Alt+F1切换后也有console界面哦。
显示参数vga配置表如下,可以根据自己的显示器来进行设置:
vesa配置参数如下所示,我们这里实际需要设置的值需要 + 0x200 ,即0x117 + 0x200 = 0x317.

            | 640x480  800x600  1024x768 1280x1024
44 ----+-------------------------------------
45 256 |  0x101    0x103    0x105    0x107   
46 32k |  0x110    0x113    0x116    0x119   
47 64k |  0x111    0x114    0x117    0x11A   
48 16M |  0x112    0x115    0x118    0x11B   
linux_kernel_mode_number = VESA_mode_number + 0x200 
            | 640x480  800x600  1024x768 1280x1024
58 ----+-------------------------------------
59 256 |  0x301    0x303    0x305    0x307   
60 32k |  0x310    0x313    0x316    0x319   
61 64k |  0x311    0x314    0x317    0x31A   
62 16M |  0x312    0x315    0x318    0x31B   

/*****************************************************************************************/


遇到的另一个问题是这个系统启动过程中不显示grub界面,启动过程中不能人为手动选择启动项,其原因是我这个系统的默认等待时间是0,因此只需要修改默认等待时间就可以了:
sudo vim /boot/grub/grub.cfg
在set default="0"后面增加一行
  set timeout=5
并在搜索后面所有设置timeout=0的地方都该成"timeout=5"后,保存重启就OK了。


/*****************************************************************************************/


现在系统可以切换到console了,但我们实际应用的情况是不需要图形界面,只需要文本界面,难道还需要将图形界面删除掉么?因为我们的应用对硬盘空间不敏感,只对运行的性能不敏感,因此,只需要启动就运行在文本界面,不进入图形界面,然后再将一系列不需要的service停掉就OK了,在需要的时候只需要运行命令startx就可以顺利进入图形界面了。
文本模式启动的设置很简单,修改 /boot/grub/grub.cfg :
linux /boot/vmlinuz-3.2.0.29-generic ...... ro quiet splash vga=0x317 $vt_handoff 修改为
linux /boot/vmlinuz-3.2.0.29-generic ...... ro vga=0x317 text $vt_handoff
其中参数 quiet 表示启动过程中不输出启动系统。
         splash 表示是否有启动画面。 
这两项我们都不需要,直接去掉,另外增加text 表示文本启动。

/*****************************************************************************************/


一切都设置OK了,可以去喝茶了,呵呵,查看一下当前目录, My God,中文显示都是方块,诶多灾多难啊,这个板子原始装的是中文版,气死我了,为什么不装英文版呢?google之后发现可以用fbterm解决:
sudo apt-get install fbterm
系统启动后运行 sudo fbterm -s 16,ok可以看到中文了,至此系统总算初步能用了。喝茶了! 


参考资料:
fbcon:    http://www.mjmwired.net/kernel/Documentation/fb/fbcon.txt
vesafb:   http://www.mjmwired.net/kernel/Documentation/fb/vesafb.txt 
console显示中文  


/************************************************************************/

另外一种方法是:

       在一次尝试编译内核时,在ubuntu的论坛上发现有关这个问题的解决方法,没有具体尝试,不知道是否可行:

Install the new kernel

If you want to see the ubuntu splash screen (or use text mode) before you get to X instead of just a black screen, you'll want to make sure the framebuffer driver loads:

echo vesafb | sudo tee -a /etc/initramfs-tools/modules 
echo fbcon | sudo tee -a /etc/initramfs-tools/modules

Now that you've told initramfs-tools what modules it should include and the build is complete.

上面实际上只是在 /etc/initramfs-tools/modules文件的末尾增加了两行:

                  vesafb

                  fbcon

最后需要更新initramfs,将vesafb,fbcon加入新的initramfs:   sudo  update-initramfs -u 


阅读(2046) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:linux: ubuntu1204 eg20t uart not work

给主人留下些什么吧!~~