Linux

【PC】Linuxビルドのノウハウ ④patchとinc.patchの違いを調べる、The Linux Kernel Archive(本家)のトップページにあるHTTP、GIT、RSYNCの飛び先調査

【※ 当記事は2020年7月2日時点の情報です】

ペイヴメント(@pavement1234)です。

エンジニア
エンジニア

Linuxのカーネルビルドの方法を知りたいけど簡単にまとめられた情報源がない

こんな悩みを解決します。

今回やることは2つ。

  1. patchとinc.patchの違いを調べる
  2. The Linux Kernel Archive(本家)のトップページにあるHTTP、GIT、RSYNCの飛び先を調べる

バージョン情報

Linux Kernel 3.14

patchとinc.patchの違い

patch、inc.patch。両方ダウンロードしてみましたが、どちらも普通のパッチでした。patchのリンクにマウスを持っていくと「Download to previous mainline」と表示され、inc.patchのリンクにマウスを持っていくと「Download incremental patch」と表示されます。まだイマイチ違いが分かりません。

そもそも、私はパッチを使いこなせていないので、基本的なことを調べました。

【Linuxコマンド】パッチを使いこなしたい

本記事では「Download to previous mainline」と「Download incremental patch」の違いについてのみ調査します。

The Linux Kernel Archivesを開きました。確か3日前ぐらいは5.1.16がstableでしたが今日見たら5.2がstableになってました。

patchをダウンロードしてみるとpatch-5.1.16.xzというファイル、

inc.patchをダウンロードしてみるとpatch-5.1.15-16.xzいうファイルでした。

xzファイルをWindowsで解凍するには7-zipが必要(Windows環境でtar.xzを解凍(展開)する方法)。まだこのPCには7-zipを入れてないのでTeraTerm経由でパッチをLinuxパソコンにscp転送しました(なんとなく5.2のパッチもダウンロード)。

【 xz 】コマンド/【 unxz 】コマンド――ファイルを圧縮/伸張するを読み、unxzというコマンドで解凍できることを知ります。

無事解凍できました。

patchの注釈は「Download to previous mainline」。これは古いメインラインへのパッチと読み取れます。

patch-5.1.16を開きMakefileのdiffを見ました。5.1.0から5.1.16への差分のようです。

diff –git a/Makefile b/Makefile
index 26c92f892d24..46a0ae537182 100644
— a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
VERSION = 5
PATCHLEVEL = 1
-SUBLEVEL = 0
+SUBLEVEL = 16
EXTRAVERSION =
NAME = Shy Crocodile

@@ -636,7 +636,7 @@ ifeq ($(may-sync-config),1)
# Read in dependencies to all Kconfig* files, make sure to run syncconfig if
# changes are detected. This should be included after arch/$(SRCARCH)/Makefile
# because some architectures define CROSS_COMPILE there.
–include include/config/auto.conf.cmd
+include include/config/auto.conf.cmd

$(KCONFIG_CONFIG):
@echo >&2 ‘***’

inc.patchの注釈は「Download incremental patch」。これは増分パッチと読み取れます。patch-5.1.15-16を開きMakefileのdiffを見ました。5.1.15から5.1.16への差分のようです。

diff –git a/Makefile b/Makefile
index d7b3c8e3ff3e..46a0ae537182 100644
— a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
VERSION = 5
PATCHLEVEL = 1
-SUBLEVEL = 15
+SUBLEVEL = 16
EXTRAVERSION =
NAME = Shy Crocodile

patch-5.2のMakefileのdiffも見てみました。これは5.1.0から5.2.0への差分でした。

diff –git a/Makefile b/Makefile
index 26c92f892d24..3e4868a6498b 100644
— a/Makefile
+++ b/Makefile
@@ -1,9 +1,9 @@
# SPDX-License-Identifier: GPL-2.0
VERSION = 5
-PATCHLEVEL = 1
+PATCHLEVEL = 2
SUBLEVEL = 0
EXTRAVERSION =
-NAME = Shy Crocodile
+NAME = Bobtail Squid
(以下省略)

なんか法則が分かってきました。

patch-5.1.15-16 は 5.1.15→5.1.16の差分
patch-5.1.16 は 5.1.0→5.1.16の差分
patch-5.2 は 5.1.0→5.2.0の差分

サイズを見てもそんな感じです。

-rw-r–r– 1 pavement1234 pavement1234 100804 7月 10 01:31 patch-5.1.15-16
-rw-r–r– 1 pavement1234 pavement1234 1997684 7月 10 01:31 patch-5.1.16
-rw-r–r– 1 pavement1234 pavement1234 64241504 7月 10 01:26 patch-5.2

The Linux Kernel HOWTO5. カーネルへのパッチあてを読み、更にLinuxのバージョンを確認する方法を読みました。今後トラブったらこの辺を参考にします。

The Linux Kernel Archive(本家)のトップページにあるHTTP、GIT、RSYNCの飛び先がどうなってるか?

HTTPを調べる

まずはHTTPから調べてみました。開くとこんな感じです。

../(1つ上のディレクトリ)を開くとMIRRORS.kernel.orgってのが出てきます。なんか有用な感じのサイトが盛りだくさん。今度掘ってみます。

さて、pubの階層には7つのディレクトリがありますlinuxが一番深く、softwareが次に深いです。

以前すべてのディレクトリを掘ってみたのですがファイルが古かったです、Gitに移行していてHTTPはサポートされていない様子。

①planb、puperrescure

まずはdist。懐かしのknoppix(CD/DVD起動のLinux。すごい前に流行った気がする)は知ってましたがplanbsuperrescureが分かりません。

まずdistはディストリビューションと推察されます。

Plan-Bを発見。RedHat系のLinux。Knoppixと同様にデータレスキュー用途のようですね。しかし状態:休止したとありメンテされてない感じ。

ところで今回見つけたDistro Watch.com、各種ディストリビューションが網羅されてて、すごいデータベースです。

続いてsuperrescue。Distro Watch.comで調べてみるとSuperRescue CDを発見。カンタンにヒットしました。こいつもRedHat系、かつ、データレスキュー用途、かつ、休止した。Plan Bと同じ運命を辿ったみたいですね。

②開発ツールたちの最新版を入手する方法を知りたい

今回はlinux/devel

binutilsとはGNUのバイナリユーティリティです。GNU Binutilsに詳しく書いてありますが、ar(アーカイバ)、as(アセンブラ)、ld(リンカ)、objdump(オブジェクトのダンプ情報表示)、readelf(ELFファイルの内容を表示)などが含まれます。gccはコンパイラ。gdbはデバッガ。なんかどれもバージョンが古そうな感じ。

開発ツールたちの最新版を入手するにはどうすれば良いか。

まずはGNU Binutils

最新版は2.32。2019年2月2日更新。http://ftp.gnu.org/gnu/binutils/(Index of /gnu/binutils)にUPされてます。

 

ソースコードはGITにUPされてて、git clone git://sourceware.org/git/binutils-gdb.gitで落とせますし、the gitweb interfaceを開くとWEBでサマリーが見れます。

次にGCC, the GNU Compiler Collection

最新版はv9.1。2019年5月3日更新。ソースはSVN管理されていてGCC: Anonymous read-only SVN accessにある通り、svn checkout svn://gcc.gnu.org/svn/gcc/trunk SomeLocalDirでチェックアウトできます。

またGCC GIT mirrorにミラーサイトが構築されてます。gcc.gnu.org/gitを開くとWEBでサマリーも見れます。

最後にGDB: The GNU Project Debugger

最新版はv8.3。2019年5月11日更新。Download GDBを開くとダウンロード先のHTTP、FTPアドレスが書いてあります。

http://ftp.gnu.org/gnu/gdb/(Index of /gnu/gdb)を開くとUPされてます。

これでbinutils、gcc、gdbの最新版入手方法がわかりました。

ちなみに組込用途で使われるクロスコンパイラはLinaroが有名。PC Linuxの開発環境に関する調査が落ち着いたら組込Linuxに調査移行するので、そのときに調べます。

③crypto、backport、rt、usb、perf

linux/kernel

ここにカーネルソースたちが入ってます。カーネルソース以外で目についたのはcrypto(暗号化)、backport(アプリの後方互換性を担保するために新しい機能を古いカーネルに移植し続けてるヤツ)、rt(リアルタイム)、usb(詳細は見てませんがUSBの何か)、perf(性能測定ツール)など。それぞれ調べてみます。

まずcryptoLinux Kernel Crypto APIを見るとLinux標準のCrypto(暗号)APIがあるみたいです。Crypto API (Linux)を見るとユーザスペースとのインタフェースとしてAF_ALG(netlink)cryptodev(dev/crypto)が記載されてました。AF_ALGはLinuxカーネル2.6.38からマージされていて、OpenSSLもサポートされてます。cryptodevはOpenBSD系みたいですがLinuxカーネルにはマージされなかったみたいですしてCryptodev-linux moduleに情報が載ってますが深みにハマりそうなのでここまでにしました。

参考にしたThe Linux Kernel documentationはなんかすごく良いのでまた使うことにします。

次にbackport

Linux backportを見るとこんなことが書いてあります。要は古いカーネルで最新のドライバを動作させることを可能にするってことみたいです。またbackportプロジェクトは2007年にワイヤレス互換性ドライバ(compat-wireless)のために始まったらしいです。backportについては興味アリなのでまた調べてみようと思います。

Main Page
The Backports Project enables old kernels to run the latest drivers.
“Backporting” is the process of making new software run on something old. A version of something new that’s been modified to run on something old is called a “backport”.
The Backports Project develops tools to automate the backporting process for Linux drivers. These tools form the backports suite.

History
The Backports Project started in 2007 as compat-wireless. It was renamed to compat-drivers as the project’s scope broadened beyond just wireless network drivers. Nowadays, the project is known simply as backports.
As of the 3.10-based release, over 830 device drivers had been backported.
Recent versions of backports support mainline kernels back to version 3.0. The older backports-3.14 supports all kernel versions back to version 2.6.26.

次はrt

関連情報としてまずRaspberry Pi 3 (Raspbian Jessie)にRT Preemptカーネルを導入を読みました。このrtはRT preemptパッチを指すらしいです。

更にubuntuにrt-preemptカーネルを導入するを読むと、本気でリアルタイム性を高めるならRTAIRT-Linuxというのもあるが導入が難しいとのこと。さらにlow-latencyカーネルというものもありますが精度はそれほど高くない様子。RT preemptはその中間。つまり精度の高い順に書くと

RTAI/RT-Linux > RT preempt > low-latencyカーネル

となります。リアルタイム性を高める改良に興味があるので、そのうち調べてみます。

次はusb

USB Host Stack Debuggingを見ると、初期にLinusが書いたUSBホストスタックのことを示すことがわかりました。コンパクトなので理解がしやすく、USBデバッグに役立つみたいです。いつか調べてみようかな。

次はperf

Linux 性能解析ツールperfを使ってみたを調べてみました。概要を以下に示しますがperfはボリューム大なので、今回はここまで。

perf(Performance analysis tools for Linux)とはLinuxカーネル2.6.31以降で使用可能なLinuxの性能解析ツールです。

1.実行されるプログラムと OS とのイベントを見れる

2.OS とハードウェアのイベントを見れる

3.カーネルのカウンタで計測されるイベントだったりプロセッサで計測されるイベントが知れる

L1のヒット状況、TLBの様子、CPUサイクル数、分岐の数、分岐予測ミス数、キャッシュ参照数、キャッシュミス数などを観察できます。

linux/kernel/firmwareって何だろうと思い追加で調べてみました。

Linux Firmware APIを読むと、request_firmwareでファームの呼び出しを行ったりする標準APIのことみたいです。φ(.. )メモシテオコウ Linux:firmwareの読み込み処理めもを見ると詳しく書いてあります。

④comma、nfc、ofono、wireless

linux/network

connman(コマンドベースのネットワークマネージャ)、nfc
(近距離無線)、ofono(オープンソースの携帯電話)、wireless(無線)、と気になるキーワード4連発。

まずはcomman

ConnManを読むと有線と無線のネットワークを制御するコマンドのようです。

使用方法

ConnMan には標準のコマンドラインクライアント connmanctl が付属しています。

connmanctl は2つのモードで動作します:

コマンドモードでは、connmanctl に引数を付けてコマンドを実行します。systemctl と似ています。
インタラクティブモードでは、connmanctl に何も引数を付けずに起動します。プロンプトが connmanctl> に変化し、ユーザーがコマンドを入力するのを待機します。python のインタラクティブモードに似ています。インタラクティブモードではタブ補完を使うことができ、簡単に接続できます。

有線
ConnMan は自動的に有線接続を管理します。

Wi-Fi
Wi-Fi の有効化と無効化を行います。
Wi-Fi が有効になっているかどうか確認するには connmanctl technologies を実行して Powered: True/False と表示された行をチェックしてください。

Wi-Fi を有効にするには connmanctl enable wifi を実行し、無効にする場合は connmanctl disable wifi を実行します。

ノートパソコンの場合 Fn キーを使って Wi-Fi の電源を入れてください。もしくは ip link set <interface> up を実行してみてください。

次にnfc

NFCをリード・ライトするためにRaspbianをビルドするを読みました。更にLinux NFC Subsystemというものがあるそうだを読み、Linux NFC Subsystem(PDF)にたどり着きました。

2011年段階ではNXP等のベンダ依存がありPOSIX仕様から逸脱してましたが、netlinkとかソケットなどを使い標準化を進めたいという意向があったみたいです。

現状どうなっているかはこの資料から読み取れませんでしたが、いつか調べてみたいです。

次にofono

oFonoを読みました。

要は携帯電話(GSM/UMTS)アプリ用のフリーソフトで、D-BusのAPIを使用し、GPLv2である、ということが読み取れました。Universal Mobile Telecommunications Systemあたりを読むと3G回線の細かい話が書いてます。興味はあるものの今回はここまで。

(原文)
oFono is a free software project for mobile telephony (GSM/UMTS) applications. It is built on 3GPP standards and uses a high-level D-Bus API for use by telephony applications. oFono is free software released under the terms of the GNU General Public License v2.[ 4 ]

(和訳)
oFonoは、携帯電話(GSM / UMTS)アプリケーション用のフリーソフトウェアプロジェクトです。 これは3GPP規格に基づいて構築されており、テレフォニーアプリケーションで使用するための高レベルのDバスAPIを使用しています。 oFonoは、GNU一般公衆利用許諾契約書v2の条項に基づいてリリースされたフリーソフトウェアです[ 4 ]。

次にwireless

Linux Wirelessを読みました。mac80211、cfg80211、nl80211と呼ばれる無線LANサブシステムを中心とした解説です。本記事の最後にLinux Wirelessがまた出てきますので、一旦終了。

⑤abi-tools、dracut、efilinux、syslinux、crusoe、mce、dtc、fs、kbd、cpufreq、hotplug、ipvsadm、kexec、ksymoops、module-init-tools、modutils、bridge-utils、nfs-utils、mdadm、rt-tests

linux/utils

abi-toolsはアプリケーションバイナリインタフェースのことですかね。今回はスルーします。

dracutDracutの歩き方を見るとわかりますがinitrdをカスタマイズするツールみたいです。

efilinuxはUEFIブートローダ。UbuntuとUEFIセキュアブートに関連情報が載ってます。

syslinuxは軽量なブートローダ。SYSLINUXでマルチブート【基本編】をいつか読んでみます。

crusoeはx86互換プロセッサ。Crusoeに概要が書いてます。

mceはマシンチェック例外。dtcはデバイスツリーコンパイラ。fsはファイルシステム。kbdはキーボード。cpufreqは周波数スケーリング。hotplugはプラグandプレイ。ipvsadmはロードバランサ。kexecはカーネル上でカーネルを起動させるやつ。ksymoopsはカーネルパニック時のoopsメッセージを少しわかりやすく表示するもの。module-init-toolsmodutilsは古いローダブルモジュール管理ツール。bridge-utilsはブリッジ構成ツール(複数のネットワークインターフェースをまとめてブリッジ化するやつ)。nfs-utilsはNFS管理ツール。mdadmはソフトウェアRAID。rt-testsはリアルタイムカーネルのテスト。

とりあえず上のコメントで概要の説明ができてる項目は割愛し、イマイチ理解できてないヤツだけを少し補足することにします(量が多いので)。

まずcpufreqCPU 周波数スケーリングを読みました。

CPU 周波数スケーリングを使うことで電力を節約するためにオペレーティングシステムが CPU の周波数を調整することが出来るようになります。CPU の周波数はユーザースペースのプログラムを使って手動で変更したり、システムの負担や、ACPI イベントにあわせて自動的に調整することが可能です。

CPU 周波数スケーリングは Linux カーネル内に実装されており、そのインフラストラクチャは cpufreq と呼ばれています。カーネル 3.4 から必要なモジュールが自動でロードされるようになり推奨の ondemand governor がデフォルトで有効になっています。しかしながら、cpupower, acpid, Laptop Mode Tools などのユーザースペースツールや、デスクトップ環境から提供されている GUI ツールを使って高度な設定をすることも可能です。

次にhotplug9.11. ホットプラグ機能、hotplugを読みました。udevの仕組みを使って/dev/xxxにデバイスを登録する仕組みと理解しました。

9.11.1. 前書き
hotplug カーネルサブシステムはデバイスの追加と削除を、udevd の助けを借りて適切なドライバを読み込んだり関連するデバイスファイルを作成することで、動的に取り扱います。現代的なハードウェアと仮想化を使えば、ほとんどすべてのデバイスはホットプラグ対応と言ってよいでしょう。具体的に言えば、USB/PCMCIA/IEEE 1394 周辺機器から SATA ハードドライブ、さらには CPU やメモリにいたるまでのほとんどすべてがホットプラグに対応しています。 カーネルは必要なドライバとデバイス ID を関連付けるデータベースを持っています。このデータベースは起動中にさまざまなバスで検出された周辺機器用のすべてのドライバを読み込んだりする際、追加的なホットプラグデバイスが接続された際に使われます。デバイスの使用準備が整ったら、メッセージが udevd に送信され、udevd は対応するエントリを /dev/ 内に作成します。

次にipvsadm

今回これが全然理解できませんでしたが、ipvsadm(8) 日本語訳LinuxでL4のロードバランサを簡単に作る手順を読み、少しだけ理解できたかもしれません。要はTCP、UDP(レイヤ4)の負荷を、パケット転送方式、ロードバランスアルゴの調整で実現するサーバ管理ツールと理解。

Ipvsadm(8)はLinuxカーネル内の仮想サーバテーブルを設定、保守、調査をするために使われます。Linux Virtual Server (LVS) は2台以上のノードからな るク ラスタに基づいたスケーラブルなネットワークサービスを構築するために用いることができます。クラスタのアクティブノードはサービスのリクエスト を、 実際にサービスを実行するサーバホストの集まりに送信します。サポートされている機能として二つのプロトコル(TCPとUDP),3つのパケッ ト 転 送 方 式(NAT, トンネリング、ダイレクトルーティング), そして8つのロードバランスアルゴリズム(ラウンドロビン、重み付きラウンドロビン、最小接続、重み付き最 小接続、所在ベース最小接続、レプリケーションつきの所在ベース最小接続、宛先ハッシュ、送信元ハッシュ)があります。

次にkexeckexecを読みました。実行中のカーネルの上で新たにカーネルをブートさせるってことですね。

kexecは現在起動中のカーネル上で新しいカーネルのライブブートを可能にする、Linuxカーネルのメカニズムである。”kexec” という名前はkernel executionの略称と、UNIX/Linuxカーネル呼び出しのexecに由来する。kexecは実質的に、システムファームウェア(BIOSやUEFI)が実行するブートローダのステップとハードウェアの初期化フェイズをスキップし、メインメモリに直接新しいカーネルをロードしてすぐにその実行を開始する。これにより完全なブートと関連する長時間処理を避けられるためダウンタイム(英語版)を最小化することができ、システムの高可用性を満たせるようになる[ 1 ][ 2 ][ 3 ]。

次にksymoopsoopsメッセージの解析方法を読みました。カーネルパニックが発生したときに試してみます。

準備するファイルは、
・panic時に出力されるOopsメッセージ
・KernelをBuild時に生成されるSystem.map
使用方法は、 # ksymoops ?m [System.map] [oops_message]

次にmodule-init-toolsとmodutilsmodutils パッケージは kernel 2.6 では不要 (2006/04/07)を読みました。

modutils パッケージは kernel 2.4 以前のもので kernel 2.6 では,module-init-tools パッケージになります

だそうです。更にmodule-init-toolsを読み、insmodとかmodprobeたちのことを示すことがわかりました。

depmod – 存在しているモジュール内に含まれるシンボル名に基づいて、モジュールの依存関係を記述したファイル (dependency file) を生成します。 これは modprobe が、必要なモジュールを自動的にロードするために利用します。
insmod – 稼動中のカーネルに対してロード可能なモジュールをインストールします。
insmod.static – スタティックライブラリによってコンパイルされた insmod コマンド。
lsmod – その時点でロードされているモジュールを一覧表示します。
modinfo – カーネルモジュールに関連付いたオブジェクトファイルを調べて、出来る限りの情報を表示します。
modprobe – depmod によってモジュールの依存関係を記述したファイル (dependency file) が生成されます。 これを使って関連するモジュールを自動的にロードします。
rmmod – 稼動中のカーネルからモジュールをアンロードします。

次にbridge-utilsネットワークブリッジを読みました。要はbrctlのことですね。

ブリッジは複数のネットワークセグメントをまとめるのに使われる一種のソフトウェアです。ブリッジは仮想ネットワークスイッチのように動作し、透過的に働きます (他のマシンはブリッジの存在を知る必要がありません)。

次にnfs-utils5分で終わらせるNFSファイル共有を読みました。サーバとクライアント間で超簡単にディレクトリ共有できる感じ。今度実験してみます。

次にmdadmソフトウェアRAID の初期設定と運用 – mdadmを読みました。ソフトウェアでRAIDを構築できるんですね。今度実験してみよう。

最後にrt-testsrtカーネルのリアルタイム性能テスト(cyclictest)を読みました。要するにcyclictestが含まれているみたい。

⑤crda、iw、rfkill、wireless-regdb、i2c-tools、tuna

次にsoftware。ボリューム大きいので、だいぶ消化不良を起こしそうです。networkcrdaiwrfkillwireless-regdbあたりは無線LAN通信に深くかかわるモジュール。i2c-toolsはI2Cデバイスを扱うために重要。tunaはチューニング関連。

crdaiwrfkillwireless-regdbは所謂Linux Wireless一派でありLinux WirelessのDocumentationに詳しく書いてあります。

crda。下に出てくるwireless-regdbを呼び出すエージェントです。nl80211を前提として動作するみたいです。

(原文)
Central Regulatory Domain Agent
CRDA acts as the udev helper for communication between the kernel and userspace for regulatory compliance. It relies on nl80211 for communication. CRDA is intended to be run only through udev communication from the kernel. The user should never have to run it manually except if debugging udev issues.

(和訳)
中央規制ドメインエージェント
CRDAは、規制順守のためにカーネルとユーザースペースの間の通信のためのudevヘルパーとして機能します。 それはコミュニケーションのためにnl80211に頼ります。 CRDAはカーネルからのudev通信を通してのみ実行されることを意図しています。 udevの問題をデバッグする場合を除いて、ユーザーは手動で実行する必要はありません。

iw。無線制御コマンド。Wireless Extensionという古い規格に準拠するiwconfig系は推奨されておらず、nl80211系のiwが推奨されてます。

(原文)
iw is a new nl80211 based CLI configuration utility for wireless devices. It supports all new drivers that have been added to the kernel recently. The old tool iwconfig, which uses Wireless Extensions interface, is deprecated and it’s strongly recommended to switch to iw and nl80211.
Like the rest of the Linux kernel, iw is still under development. Features are added ‘as we go’. The only documentation for iw is this page and output from ‘iw help’. Please help expand this page.
There is a page listing use cases with iwconfig and iw: replacing iwconfig.

(和訳)
iwは、ワイヤレスデバイス用の新しいnl80211ベースのCLI設定ユーティリティです。 最近カーネルに追加されたすべての新しいドライバをサポートします。 Wireless Extensionsインタフェースを使用する古いツールiwconfigは推奨されていません。iwとnl80211に切り替えることを強くお勧めします。
Linuxカーネルの他の部分と同様に、iwはまだ開発中です。 機能は「進むにつれて」追加されます。 iwの唯一のドキュメントはこのページと ‘iw help’からの出力です。 このページを広げるのを手伝ってください。
iwconfigとiwのユースケースをリストしたページがあります。iwconfigを置き換えるものです。

rfkill。要は無線をOFFにするスイッチです。

(原文)
rfkill is a small userspace tool to query the state of the rfkill switches, buttons and subsystem interfaces. Some devices come with a hard switch that lets you kill different types of RF radios: 802.11 / Bluetooth / NFC / UWB / WAN / WIMAX / FM. Some times these buttons may kill more than one RF type. The Linux kernel rfkill subsystem exposes these hardware buttons and lets userspace query its status and set its status through a /dev/rfkill. Given that at times some RF devices do not have hardware rfkill buttons rfkill the Linux kernel also exposes software rfkill capabilities that allows userspace to mimic a hardware rfkill event and turn on or off RF.

(和訳)
rfkillは、rfkillのスイッチ、ボタン、およびサブシステムインタフェースの状態を問い合わせるための小さなユーザースペースツールです。 802.11 / Bluetooth / NFC / UWB / WAN / WIMAX / FMなど、一部のデバイスには、さまざまな種類のRF無線を停止できるハードスイッチが付属しています。 時々これらのボタンは複数のRFタイプを殺すかもしれません。 Linuxカーネルのrfkillサブシステムは、これらのハードウェアボタンを公開し、ユーザースペースにそのステータスの照会と/ dev / rfkillによるステータスの設定を許可します。 時にはいくつかのRFデバイスがハードウェアrfkillボタンrfkillを持っていないことを考えると、Linuxカーネルはユーザースペースがハードウェアrfkillイベントを模倣しRFをオンまたはオフにすることを可能にするソフトウェアrfkill機能も公開します。

wireless-regdb。各国の無線法要求に従い利用可能な周波数などを定義したデータベースです。CRDAから呼ばれます。

次にi2c-toolsI2C Toolsを読みました。更にPackage i2c-toolsを読むとこんなコマンドがサポートされていることがわかります。

次にtunaRed Hat Enterprise MRG 1.3 Tuna User Guideをざっと読みました。システムをレビューし、CPU、IRQ、Taskなどをチューニングできたり、Cyclic Testというのを実行してオシロスコープ状に性能表示できるみたいです。

理解が浅い項目を残しておくとまた分からなくなるので、調べておいてよかったです。

GITを調べる

HTTP、GIT、RSYNCと書いてあるリンクのうち、GITを調べてみます。/pub/scm/xxxという感じにカテゴライズされてます。scmとはソフトウェア構成管理(software configuration management)の略ですね。前回調べたHTTPは数年前から更新が止まっており、GITがソフトウェア管理のリポジトリになってるみたいです。

①全体像

HTTPには存在しないvirt(仮想化)とpublic-inbox(メーリングリスト)が気になりました。

pub/scm/bluetooth
pub/scm/boot
pub/scm/devel
pub/scm/docs
pub/scm/editors
pub/scm/fs
pub/scm/git
pub/scm/java
pub/scm/libs
pub/scm/linux
pub/scm/network
pub/scm/public-inbox
pub/scm/utils
pub/scm/virt

ちなみにpublic-inboxとはメールをGIT管理するソフトウェアみたいです。

https://public-inbox.org/
メーリングリスト管理ソフトウェア
ウェブページ、Atomフィード、NNTPで読むことができる
Git、Unicorn、kgioなんかのメーリングリストで使われている
メールをGit管理している
OSS
AGPL

②コンポーネント毎の詳細

まず、/pub/scm/bluetoothにあるbluez.gitを見てみました。about, summary, refs, log, tree, commit, diff, stats, homepageのタブに分かれてます。最初に表示されるのはsummaryタブ。

about

概要が書かれたタブ。ライセンサー、コンパイル&インストール方法、コンフィグ&オプションなどが書かれてます。

summary

branch, tag, age, cloneの4パートに分かれています。branchはgitのブランチ。bluezはブランチが1つですが複数あるものも多いです。詳しくは3.1 Git のブランチ機能 – ブランチとはなどを参照。tagはgitのtag。目印みたいなものです。詳しくはgit tagの使い方まとめなどを参照。

ageはどのぐらい前にコミットされたのかの情報。

cloneのアドレスを指定してgit cloneします。

refsはbranchとtagの詳細です。

logはageの詳細です。

treeはコンポーネントのディレクトリ・ファイル構成です。ls -lみたいな感じ。

ファイル毎のlogstatを見れます。plainを押すと行番号などの装飾がないプレーンテキストが見れます。

commitはコミットのログとdiffの内容が見れます。

diffはDiffstatとdiff詳細が見れます。

commitタブdiffタブの画面右端にあるdiff optioncontextを増やしていくと、diff行の前後の行数を指定できます。例えば3を指定するとトータル7行(前3+diff行+後3)の表示になります。spaceは空白を含む(include)、含まない(ignore)を指定できるようですが、イマイチ効果が分かりませんでした。modeをunifiedにするとunfied形式でdiffが見れます。ssdiffにするとWinMergeみたいに左右のペインでコード比較できます。stat onlyはstatの情報のみ表示。

statsは週毎にどのautherが何回コミットしたのかのサマリーが見れます。競争心の強い人はこの数字を見て燃えてくるかもしれません。

homepageはコンポーネントのホームページがあれば表示されるみたいです。例えばBluetoothのbluezはこんな感じ。

他のコンポーネントも似たようなものなので、詳細は割愛します。virtとpublic-inboxはHTTPに無かったのでいつか調べたいと思いますが。

RSYNCを調べる

①そもそもrsyncって何だ?

まずThe Linux Kernel ArchiveのTOPページのRSYNCにはrsync://rsync.kernel.org/pub/というアドレスが書いてあります。rsyncはプロトコルだと思うので【 rsync 】コマンド(その1)――ファイルやディレクトリを同期するを読んでみました。

「rsync」は、リモート環境とファイルやディレクトリを「同期(sync)する」というコマンドです。ローカル環境のみでも使用できます。「変更があった分だけ更新する」という機能があるので、ディレクトリ単位のバックアップで特に便利に使えます。

なるほど。差分バックアップのやつですね。

更にrsyncのサンプル例集を調べてみました。スラッシュのあるなしで同期対象が変わるらしいです。WindowsのバックアップツールFastCopy ver 3.82はrsync的な動作をしてますね。

FastCopy ver 3.82

主要機能
Windows系最速(?) のファイルコピー&バックアップ&削除ツールです。
UNICODE でしか表現できないファイル名やMAX_PATH(260文字) を越えたファイルもコピー(&削除)できます。
Read/Write/ベリファイ別スレッド動作&非同期I/O&ダイレクトI/Oにより、デバイスの限界に近いパフォーマンスを出します。
Include/Exclude フィルタ(UNIXワイルドカード形式)が指定可能です。
MFC 等のフレームワークを使わず、Win32API だけで作っていますので、軽量&コンパクト&軽快に動作します。

rsyncを使いこなすと色々便利そうですね。そのうち調べてみようと思います。

まとめ

今回、patchとinc.patchの違いThe Linux Kernel Archive(本家)のトップページにあるHTTP、GIT、RSYNCの飛び先の2つについて調査しましたが、なかなかマニアックでした。

ABOUT ME
ペイヴメント
ペイヴメントのエンジニア塾(当ブログ)では20年以上の経験から得られたプログラミング系ノウハウについてベテランにも満足して頂けるような内容の濃いコンテンツを初心者にも分かりやすい形で日々発信しています。【経歴】ベンチャーのソフトハウスで4年勤務後、精密機器メーカーのソフト開発部門に勤務し今に至ります。