表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
1/16

決意表明

 これは日記だ、なのでドラマチックなことは起きないし、ハーレムウハウハもない。

 Linuxを勉強しようと思ったのだがどこから手を付けていいかわからないのでこうして記録に残しておく。


 はじまりーーーー


 暇を持て余していた……やることがない。

 最近ではYoutubeも金のために放送している連中が多くあまり楽しめなくなってきたのは歳のせいだろうか?


 はじめにやろうとしたことはHurdへの参加だった。

 結論から言えば失敗した。


 死ぬ気でVirtualBoxにインストールした上でウインドウを表示しようとしたのだが、七転八倒した結果やっとXが動くところまでだった。


 いや、マジで無理です! 勘弁してください!


 挫折したのは日本語入力で、そもそも日本人が関わっていないのか非常にIMEが貧弱なんだ。


 やっとの思い出uim-fepを使って日本語入力ができるようになった。

 成功したじゃんって? コンソール上だけではそうだね。


 WEBブラウザ等はまともに動かず日本語入力が可能な状態になったのがターミナル上のみだった。


 ついでにいうとフォントすら貧弱だった。


 これについていくら書いても賽の河原の石積みの如き作業なので実用性が皆無なので以上とする。


 さあLinuxでいこうか!

 Hurd? 無理だよアレは。


 まずは仮想環境にLinuxをインストールする。

 外部リンクに対し運営が厳しい態度を取るのでURLは書けないがKali Linuxで検索してもらえばヒットする。


 このディストリビューションはテスト向けに構築されているので実機に突っ込むものじゃない、なので仮想環境にインストールすることにする。


 使用する仮想環境はVirtualBox、WindowsならOracle公式から、Linuxならパッケージマネージャからインストールするのが楽だろう。


 Linuxを使用しているユーザならインストールに戸惑うところはないと思う。


 Windowsならグラフィカルインストーラを使用するのが難易度が低くていいだろう。


 さてLinuxをガチるのでカーネルを読もうと思う。


 カーネルっていうのはOSの中心でLinuxを厳密に定義するとこれだけがLinuxであり、その他のツールは超すごいGNUという集団が主に作っている。


 Linuxについて書きだすと切がないのでフリーのOSくらいに思ってもらえればいい。

 ちなみにフリーというのは無料という意味でなく「自由」という意味なんだね。

 これについてはコピーレフトという概念で「お前のものは俺のもの、俺のものはお前のもの」的考えである。


 Qiitaに書けというごもっともな意見もあるだろうけど、あそこは本物が集まってるので怖いんだよね。


 つーことでKaliLinuxをインストールした。

 インストール時に日本を選んだのでタイムゾーンとロケールはちゃんと日本になっているのだが……日本語の部分が所謂豆腐状態になっている。


 それを修正するのに以下を入力した。

apt update

apt upgrade

apt install fonts-vlgothic

 そして再起動、うん、ちゃんと日本語になった!


 では早速カーネルを弄ろうか。

 まずドライバフォルダを作ってそこに移動する。

 そして

vim sample.c

 と入力してドライバのソースを作る。

 え? カーネルを作るんじゃないのかって?

 Linuxはカーネルがアレもこれもする万能の神様なのでドライバも広義のOSになるんだ。

 おっとスマホ世代には「ドライバ」の解説も必要かな?

 平たく言えばデバイスを操作する「運転手」のようなものなんだ。


 デバイスをつないでドライバがあればそれを操作することが可能なんだ。

 ではネット上で見つけたコードにちょい手を加えたものを以下に書く。

#include <linux/module.h>

#include <linux/kernel.h>

MODULE_LICENSE("GPL v2");

MODULE_AUTHOR("Satoru Takeuchi <satoru.takeuchi@gmail.com>");

MODULE_DESCRIPTION("Hello world kernel module");


static int hello_kern(void) {

printk(KERN_ALERT "Hello world!\n");

return 0;

}


static void goodbye_kern(void) {

/* Do nothing */

printk(KERN_ALERT "good bye!\n");

}


module_init(hello_kern);

module_exit(goodbye_kern);

 GPLなので改造品を載せても問題ないはずなんだ。


 これが何をしているかといえば、モジュールのロード時にHello world!と表示され、アンロード時にgood bye!と表示させるものだ。


 printk関数でjournalctlにログがアラートとして表示される。

 これをビルドするMakefileも書いておこう。

obj-m := sample.o

KERNELDIR := /lib/modules/$(shell uname -r)/build

PWD := $(shell pwd)

all:

make -C $(KERNELDIR) M=$(PWD) modules

clean:

make -C $(KERNELDIR) M=$(PWD) clean

 obj-mでオブジェクトファイルを指定してmake -Cで.koファイルを生成する。

 .koがデバイスドライバになる。


 このサンプルをビルドするとsample.koができるのでこれをinsmodコマンドでロードする。

 以下のコマンドで実行を確認しよう。

journalctl | tail

insmod sample.ko

journalctl | tail

 上のコマンドで表示されていなかった二行が下のコマンドでは高表示される。

1月 22 20:37:50 kali kernel: Hello world!

1月 22 20:38:00 kali kernel: good bye!

 なお日時とkaliの部分は実行環境によって異なる。


 これでprintkが実行されたのが確認できる。


 今日はここまでだが、参考までにLinuxカーネルのメーリングリストにも勇気をだして登録した。

 ここでちょっとハマったのがメインで使っているprotonmailでは登録できなかった。

 あれやこれやしたが結局の所Gmailで登録することで解決した。

 以上。

評価をするにはログインしてください。
この作品をシェア
Twitter LINEで送る
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ