コンソールで日本語表示のためのLinux kernelの再構築とパッチ適用

序文
これまでUbuntu minimalの日本語表示はjfbtermに任せていたが、gpmが非対応だったのでfbtermに変えることにした。が、しかし、fbtermをインストールしようとすると依存関係の問題が発生し、うまくインストール出来ない。そこで、アプローチを変えて、カーネルパッチを当てLinuxをUnicodeに対応させて日本語表示させることにした。Unicodeに対応さえすれば、あとは日本語フォントと環境変数を変更さえすれば日本語を表示してくれるのだろう。

解説
LinuxユーザーやLinuxディストリビューションの作成者は誰でも、 カーネルのソースコードを使いパソコンやスマートフォンで動作するOSを作ることができる。この、ソースコードからOSを組み立てる作業をビルドという。
この時、カーネルソースの書き換え(パッチ当て)、利用するファイルシステムやデバイスドライバ等を設定によって組み込んだり外したりできるため、自分好みの、自分の環境にあったOSを作る事ができる。今回はUbuntu minimalの日本語表示が目的のため、1からディストリビューションを作るなどはせず、Ubuntu minimalに入っているカーネルを「ビルドしたパッチ適応済みカーネル」と差し替えるという作業を行う。
このソースコードの入手方法は提供元の違いから2通りある。
1)Linuxコミュニティが提供する公式カーネル
2)各ディストリビューターが提供するカーネルソースのパッケージ
前者は常に最新であり、ディストリビューションに依存しない、後者はディストリビューションに最適化されたものであるが、ディストリビューションごとに手順が異なる。
今回は2)のソースコードでビルドしてみる。
また、Unicodeに対応させるためのカーネルパッチは「UNICON」と「utf-8 kernel」の2つある。
UNICON
Linux のフレームバッファ上で中国語/日本語/韓国語を表示するための仕組み (UTF-8 には未対応)。北京オフィス にて開発されていたが、既に開発終了している様子。
dai が非公式に VD UNICON の名称でメンテナンスを続けていたが、2009/10/26 に 2.6.31 対応 patch を最後に終了した。
情報が少ないので半分推測になるが、UNICONと同様のフレームバッファ上で中国語/日本語/韓国語を表示するための仕組み(だと思う)。
UNICONと違いUTF-8に対応している。パッチ自体は UNICON とは衝突、結構似たようなコードもあるそうな。現在でも開発が進んでいる。
今回はutf-8 kernelを使う。
作業の大まかな流れ
 
0.カーネル再構築に必要な環境を構築
 
1.カーネルソースの取得(ダウンロードと作業ディレクトリへ展開)
2.パッチの適用
3.カーネル設定の引継ぎ
4.カーネルの設定
5.カーネルのビルド
6.ビルドして出来たカーネルパッケージをインストール
手順
 
0.カーネル再構築に必要な環境を構築
パッケージ情報を更新して必要なパッケージをインストールする。
$ sudo apt-get update $ sudo apt-get install kernel-package libncurses5 libncurses5-dev
1.カーネルソースの取得と作業ディレクトリへ展開
作業ディレクトリ(~/Linux)を作成し、カレントディレクトリを作業ディレクトリへ移動。
apt-getコマンドでソースを取得するとカレントディレクトリへとソースがダウンロード・展開されるのでカレントディレクトリをソースのディレクトリへ移動する。
$ mkdir ./linux
$ cd ./linux
$ sudo apt-get source linux-image-$(uname -r)
$ cd linux-$(uname -r)
今回は既存のカーネルと同じバージョンを取得するので、現行カーネルのバージョンを表示する環境変数uname -rを使用する。これによって、コマンドの$(uname -r)の部分に既存のカーネルのバージョンの数字が代入される形となる。
2.パッチの適用
展開作業が終わったら次はパッチ適用作業に入る。
utf8-kernelとutf8-kernel-3-fontsの2つのパッチを当てる。
2つのパッチファイルを、ソースのディレクトリへダウンロードし、展開&パッチを当てる。
$ wget http://zdbr.net.cn/download/utf8-kernel-3.7.0-core-1.patch.bz2
$ wget http://zdbr.net.cn/download/utf8-kernel-3-fonts-3.patch.bz2

$ bzip2 -d ./utf8-kernel-3.7.0-core-1.patch.bz2
$ cat utf8-kernel-3.7.0-core-1.patch.bz2 | patch -p1
$ bzip2 -d ./utf8-kernel-3-fonts-3.patch.bz2
$ cat ./utf8-kernel-3-fonts-3.patch.bz2 | patch -p1
patchコマンドにてパッチの適用を行う。「$ patch -p数 [適用するファイル] < パッチファイル」でパッチを適用することが出来る。[適用するファイル名]については、パッチファイル内に記述してあるので省略可。
 
 
 
3.カーネル設定の引継ぎ
今回はパッチを適用させるだけなので、差し替える前のカーネルの設定は出来るだけ引き継ぎたい。Ubuntuでは、ディストリに最初から付いているカーネルにはカーネルの設定ファイル「configファイル」が/boot/config-*******にある。これをファイル名「.config」にして展開先にコピーして、新しいカーネルに設定をマッチングさせる。
$ cp /boot/config-$(uname -r) ./.config
$ make oldconfig
make oldconfigを実行すると、カレントディレクトリにある.configを新しいカーネルソースのconfigファイルと照らしあわせて設定を引き継いでくれる。今回は現行カーネルとバージョンが同じなので問題ないが、新しいバージョンで新たな設定項目があった場合はその都度聞いてくるらしい。
4.カーネルの設定
CUIベースの設定変更ツールで設定を変える。ここで、ファイルシステムやドライバ等を組み込んだり外したりできるのだが、基本設定の変更はしないためEnterキーをひたすら押し続ける。
$ make menuconfig
設定は基本変えないが、以下の項目には*がついていることを確認すること。
<*>Support for frame buffer devices
<*>VESA VGA graphics surpport
<*>VGA 8×16 font
5.カーネルのビルド
設定がひと通り済んだらビルド(カーネルソースのコンパイル)を行う。作業するCPUのコア数を指定することにより並列化して作業時間の短縮を図る。この作業は数時間かかるので時間があるときにやってね♪
$ CONCURRENCY_LEVEL=4 make-kpkg –rootcmd fokeroot –initrd –append_to_version -mycustom –revision 0.0.custom linux-image linux_headers
make-kpkgがカレントディレクトリにあるカーネルソースをビルドするコマンドである。コマンドの前に環境変数CONCURRENCY_LEVELに数値を入れてやることで、そのコマンドを実行する際の並列処理数を指定できる。「-」の後にある「mycustom」は生成されるカーネルパッケージ名の一部となり目印にできる、「–revision」のあとにある「0.0.custom」は付けたバージョン名である。この2つは好きなもので構わない。
6.カーネルパッケージのインストール
ビルドが終わると、カーネルのdebパッケージが生成される。あとはいつも通りdpkgコマンドでインストールするだけである。
$ cd ..
$ sudo dpkg -i linux-image-3.5.7-mycustom_0.0.custom_i386.deb
引用
Linux kernelの再構築(Ubuntu 11.10) とある現場の組込みエンジニア : http://nex2t.blog.shinobi.jp/Entry/9/
カーネル再構築のススメ | dogmap.jp : http://dogmap.jp/2009/06/19/rebuild-kernel/
Ubuntu freak カーネル再構築 : http://ubuntufreak.net/system/system.html
Linuxでのカーネル再構築方法 : http://www015.upp.so-net.ne.jp/unixlife/linux/kernel.html

diff & patch コマンドでのパッチを適用する方法 – hogehoge foobar Blog Style5 : http://d.hatena.ne.jp/mrgoofy33/20101019/1287500809
内核补丁:字符终端下显示UTF-8字符-youbest-ChinaUnix博客 : http://blog.chinaunix.net/uid-436750-id-2123586.html
UNICON による Linux 日本語 console: 重要なおしらせ, はじめに, Kernel 編, Userland 編, おしらせ等, 貢献者(順不同,敬称略), 関連リンク, 変更履歴 – vdrめも(1970-01-01) : http://vdr.jp/d/19700101.html
[unicon] utf8-kernel – vdrめも(2009-10-23) : http://vdr.jp/d/20091023.html#p02

間違えなどがあれば、指摘してくださると嬉しいです。
TwitterID: kyon07_

コメントを残す