今回は残課題②-1、The Linux Kernel ArchiveのHTTPサイト調査で発生した宿題6つを調査します。


【関連記事】


【キーワード】
http
  • 2019/7/14
【PC-Linuxビルド】(2019/07/14:残課題②-1 HTTP)を調べる中で宿題が6つ発生しました。それぞれ解決していきます。

宿題①:planb、puperrescureを調べる
【前回のコメント】

まずはdist。懐かしのknoppix(CD/DVD起動のLinux。すごい前に流行った気がする。)は分かるがplanbsuperrescureとは何だろう。また宿題①が増えてしまった。
distはディストリビューションのことだろう。

まずPlan-Bを発見。RedHat系のLinuxですね。Knoppixと同様にデータレスキュー用途みたい。しかし状態:休止したとありますね。しかし、たまたま今回見つけたDistro Watch.comってデータベースとしてすごい感じ。
1

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

宿題②:開発ツールたちの最新版を入手する方法を知りたい
【前回のコメント】

linux/devel。binutilsとはGNUのバイナリユーティリティ。GNU Binutilsに詳しく書いてある。ar(アーカイバ)、as(アセンブラ)、ld(リンカ)、objdump(オブジェクトのダンプ情報表示)、readelf(EFLファイルの内容を表示)などが含まれる。gccはコンパイラ。gdbはデバッガ。なんかどれもバージョンが古そうな感じではある。開発ツールたちの最新版を入手する方法が知りたい(宿題②)。
まずはGNU Binutils
1

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

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

次に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でチェックアウトもできるし、browse our SVN history online.を開くとWEBでSVNの階層を見れます。
1
またGCC GIT mirrorにミラーサイトが構築されてます。gcc.gnu.org/gitを開くとWEBでサマリーも見れます。
1

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


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

これで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はなんかすごく良いのでまた使うことにする。

次にbackportLinux 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.
次はrtRaspberry Pi 3 (Raspbian Jessie)にRT Preemptカーネルを導入を読んだ。このrtはRT preemptパッチを指すらしい。更にubuntuにrt-preemptカーネルを導入するを読むと、本気でリアルタイム性を高めるならRTAI、RT-Linuxというのもあるみたいだが導入が難しいみたい。low-latencyカーネルというものもあるみたいだが精度はそれほどないみたい。RT preemptはその中間。つまり精度の高い順に書くと(RTAI/RT-Linux > RT preempt > low-latencyカーネル)となるみたい。リアルタイム性を高める改良に興味アリなので、そのうち調べてみる。

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

次はperfLinux 性能解析ツールperfを使ってみたを調べてみた。こんな感じみたいだがperfはボリューム大な感じなので、今回はここまでとする。
perf(Performance analysis tools for Linux)とはLinuxカーネル2.6.31以降で使用可能なLinuxの性能解析ツールです。ざっくりいえば下記

    実行されるプログラムと OS とのイベントを見れる
    OS とハードウェアのイベントを見れる

カーネルのカウンタで計測されるイベントだったりプロセッサで計測されるイベントが知れる
例えば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連発。後日詳しく調べる(宿題④)。

まずはcommanConnManを読むと有線と無線のネットワークを制御するコマンドみたい。
使用方法

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 を実行してみてください。
次にnfcNFCをリード・ライトするためにRaspbianをビルドするを読みました。更にLinux NFC Subsystemというものがあるそうだ を読み、Linux NFC Subsystem(PDF)にたどり着いた。2011年段階ではNXP等のベンダ依存がありPOSIX仕様からも逸脱していたみたい。なので、netlinkとかソケットとかを使って標準化を進めたいという意向があったようだ。現状どうなっているかはこの資料から知る由もないが、いつか調べてみよう。
1

次にofonooFonoを読んだ。携帯電話(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]。
次にwirelessLinux 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はアプリケーションバイナリインタフェースのことか?今回はスルー。dracutはDracutの歩き方Add StarItisangoを見るとわかるがinitrdをカスタマイズするツールみたい。efilinuxはUEFIブートローダ。Ubuntuのセキュアブートへの対応 あたりに関連情報が載っている。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 周波数スケーリングを読んだ。OSやアプリからCPUクロックを調整できるみたい。
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-toolsmodutilsmodutils パッケージは 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。ボリューム大きいので、だいぶ消化不良を起こしそう。networkのcrdaiwrfkillwireless-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を読むとこんなコマンドがサポートされていることがわかる。
1

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

1


一応、今回の宿題はなんとか終わった。理解が浅い項目を残しておくとまた分からなくなるので、調べておいてよかった。

続く
IMG_20190712_175728


詳解 Linuxカーネル 第3版
Daniel P. Bovet
オライリー・ジャパン
2007-02-26


組み込みLinuxシステム構築 第2版
Karim Yaghmour
オライリージャパン
2009-10-26


Linuxデバイスドライバ 第3版
Jonathan Corbet
オライリージャパン
2005-10-22



スポンサードリンク