编译内核解决console下中文显示问题

这是第二次给我的Archlinux 编译内核了,以前习惯pacman -Syu 直接升级内核。
不过默认的内核好像不支持在console(纯控制台)下面显示中文。
幸好这里已经有人开发出了支持在终端下显示UTF-8字符的内核补丁:
内核补丁:字符终端下显示UTF-8字符
先下载2.6.38通用补丁的两个补丁文件:
文件显示补丁: http://zdbr.net.cn/download/utf8-kernel-2.6.38-core-1.patch.bz2
字库补丁:
http://zdbr.net.cn/download/utf8-kernel-2.6.38-core-1.patch.bz2
 补丁使用方法:
  首先将补丁应用到对应内核的源代码中。
  使用univt必须首先确保内核支持Framebuffer,内核选项如下:
勾选上”Support for frame buffer device”,同时还要设置对应的Framebuffer的驱动,如VESA的驱动(根据情况也可以选择更适合显卡的驱动)
还需要为内核在Framebuffer下显示的字符选择一个字库,通常使用8×16的字符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
wget -c http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.8.tar.bz2
cp linux-2.6.32.8.tar.bz2 ~/kernelbuild/
 cd ~/kernelbuild
$ tar -xvjf linux-2.6.38.8.tar.bz2
$ cd linux-2.6.38.8
$make mrproper
$zcat /proc/config.gz > .config
[admin@HuangYe linux-2.6.38.8]$ bzcat ../utf8-kernel-2.6.38-core-1.patch.bz2 |patch -p1
patching file drivers/video/console/bitblit.c
patching file drivers/video/console/fbcon.c
patching file drivers/video/console/fbcon_ccw.c
patching file drivers/video/console/fbcon_cw.c
patching file drivers/video/console/fbcon_ud.c
[admin@HuangYe linux-2.6.38.8]$ bzcat ../utf8-kernel-2.6-fonts-3.patch.bz2 |patch -p1
patching file drivers/video/console/fonts_utf8.h

然后就是内核配置了:

1
2
$ make oldconfig        
$ make menuconfig

然后更改内核版本号
General setup —>
(-ARCH) Local version – append to kernel release
在后面加一些东东,确保不会覆盖掉原来的内核。
如我这里加了之后变为:
ARCH-HuangYe-revision2
这里一定要修改,不然可能就杯具了。
然后开始编译:

1
make -j3

如果是双核CPU就在原有核心数量上加1,我这里是core2 双核的,因此是-j3
至于为什么要这样做,目前我也不知道,官方wiki上是这样说的。
然后是安装了,这里要root权限:

1
2
3
4
# make modules_install
# cp -v arch/x86/boot/bzImage /boot/vmlinuz-2.6.38.8-ARCH-HuangYe-revision2
# cp -v System.map /boot/System.map-2.6.38.8-ARCH-HuangYe-revision2
# mkinitcpio -k 2.6.38.8-ARCH-HuangYe-revision2 -c /etc/mkinitcpio.conf -g /boot/kernel26-2.6.38.8-ARCH-HuangYe-revision2.img

然后修改grub引导项:

1
2
3
4
title  Arch Linux HuangYe
root   (hd0,4)
kernel /vmlinuz-2.6.38.8-ARCH-HuangYe-revision2 root=/dev/disk/by-uuid/d95683c2-582f-404f-8aa4-b0856858d4e0 ro 5 vga=773
initrd /kernel26-2.6.38.8-ARCH-HuangYe-revision2.img

reboot查看下内核版本看:

1
2
[admin@HuangYe ~]$ uname -a
Linux HuangYe2.6.38.8-ARCH-HuangYe-revision2 #1 SMP PREEMPT Sun Jun 5 17:35:30 CST 2011 i686 Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz GenuineIntel GNU/Linux

内核版本号已经是我设置的啦,OK,再到console下查看下中文是可以正常显示了:

console-Chinese-display.jpg

参考资料:
Kernel Compilation from Source – ArchWiki
成功实现Linux控制台(纯终端)中文显示与宽屏支持 – 依云’s Blog

更多
2 Responses Post a comment
  1. Your Name

    zhcon --utf8

    fbterm -i yong
    简单解决问题,要不每次升级内核,你都要重编译?
    内核编译一下至少2小时,而且满cpu占用,反正我是编译不起.

Leave a Reply

Note: You may use basic HTML in your comments. Your email address will not be published.

Subscribe to this comment feed via RSS