#author("2021-02-17T01:20:38+00:00","default:admin","admin") -[[第1章 カーネル - Linux技術トレーニング 基本管理コース II:https://users.miraclelinux.com/technet/document/linux/training/2_1_1.html]] -[[動かしながら学ぶ「Linuxカーネル」の基本:https://xtech.nikkei.com/atcl/nxt/column/18/01448/]] -[[このKernel、どんなKernel?:https://qiita.com/takeoverjp/items/6f4f30cf634307fe25cc]] -[[Linuxカーネル設定パラメータ一覧:http://itpro.nikkeibp.co.jp/members/LIN/LIN_CONTENTS/20030502/1/]] *バージョン [#t8f5bb65] **2.x [#n6317bd7] ***2.6 [#k1b5bdc6] -[[Linux 2.6.x:http://www.wdic.org/w/TECH/Linux%202.6.x]] -システムコールの仕様変更が存在しており、従来と互換性がなくなった -glibcも、glibc 2.4以降はLinuxカーネル2.6以降でなければ動かない **3.x [#f34a9003] -[[Linux 3.x:http://www.wdic.org/w/TECH/Linux%203.x]] -Linux 3.0は、元々はLinux 2.6.40として開発が進んでいたものだった -いわゆるメジャーバージョンが更新されたが、Linus Torvaldsの意向によるもので、従来のLinux 2.6.xからの大きな機能変更や非互換はない **4.x [#dcd46620] -[[Linux 4.x:http://www.wdic.org/w/TECH/Linux%204.x]] -[[Linuxカーネル4.0が登場 - 再起動せずにパッチ適用が可能に:http://news.mynavi.jp/news/2015/04/13/168/]] -ライブカーネルパッチの導入(再起動せずにパッチ適用を可能とする機能) -3.xとの互換性は保たれている *コンフィグレーション [#d5c033a9] -[[習得すればメリット大!Linuxカーネルをビルドできるようになろう:https://xtech.nikkei.com/atcl/nxt/column/18/01448/102000002/]] -[[組み込みLinuxカーネルの構築時にこれだけは知っておかなければならない項目:http://www.embedded.jp/article/linux_kernel_2-1.html]] **Kconfig [#yf010c2b] -[[kconfig-language.txt(for linux-2.6.23.8)(日本語訳):http://www.katsuster.net/contents/jp/kconfig-language-jp.txt]] ***書式 [#kede053b] menu [MENU名] config [CONFIG名] bool "説明" default [y|n] depends on [他のCONFIG名] select [他のCONFIG名] : endmenu menu [MENU名] : -config -bool -デフォルト値: "default" <expr> ["if" <expr>] --コンフィグオプションにはいくつものデフォルト値を設定できる --2つめ以降のデフォルト値が表示されるためには、最初のデフォルト値がアクティブである必要がある --デフォルト値はメニュー項目を定義した場所にしか書けないというわけではありません。別の場所に書いたり、事前に定義した値を上書きしたり出来ます。 --デフォルト値はユーザが何も値を設定しなかった(上記の "input prompt" で)ときに、コンフィグオプションに割り当てられます。もし見出しが見えていれば、ユーザに対してデフォルト値が表示され、ユーザは値を上書きできます。 --もしこのデフォルト値だけに対する依存関係がある場合は、"if" とともに条件を指定してください。 -依存関係: "depends on"/"requires" <expr> --メニュー項目の依存関係を定義 --複数の依存関係を定義したいなら、'&&' で繋げてください。 --依存関係はメニュー項目の属性全て("if" も含め)に適用されます。 -select **Tips [#e09f6c56] ***SPI [#jb1f2889] -GPIOをSPI化する方法 --[[Armadillo-X1:spi-gpioでGPIOをSPI化する(Linux-4.9版):https://armadillo.atmark-techno.com/blog/615/4270]] --「GPIO-based bitbanging SPI Master」を有効化する *カーネルモジュール [#aa3d1d66] -[[Linuxドライバのはなし:http://www.silex.jp/blog/wireless/2015/08/linux.html]] -静的リンクされたモジュールはカーネルイメージ(vmlinux)の一部になる -動的リンクされるモジュールは拡張子 *.ko のファイルとしてファイルシステムの何処かに置き、必要なときにロードする形態を取る **生成 [#xacb3f0e] -[[カーネルモジュールの作り方:https://qiita.com/hana_shin/items/a412bc7b1023be807c82]] **ローダブル・カーネル・モジュール(LKM) [#d146c5e7] -拡張子 *.ko のファイルとして実装される **コマンド [#we40ca5d] ***lsmod [#u61855ce] -[[【 lsmod 】コマンド――ロード済みのカーネルモジュールを一覧表示する:https://www.atmarkit.co.jp/ait/articles/1812/20/news032.html]] ***modprobe [#x8858d61] -[[【 modprobe 】コマンド――カーネルモジュールのロード、アンロードを行う:https://www.atmarkit.co.jp/ait/articles/1812/27/news036.html]] -[[modprobe - システム管理コマンドの説明 - Linux コマンド集 一覧表:https://kazmax.zpp.jp/cmd/m/modprobe.8.html]] -modprobe は、カーネルモジュール(モジュール)の組み込み(ロード)と取り外し(アンロード)を行うコマンド -modprobe は、モジュールの依存関係を確認し、必要なモジュールがあれば同時に組み込むといった処理も行う -モジュールの組み込みには内部的に「insmod」コマンドを用いており、取り外しでは「rmmod」コマンドを使っている *関数 [#w5b79168] -include/linux/device.h でプロトタイプ宣言 -drivers/base/core.c で定義 -dev_emerg() -dev_alert() -dev_crit() -dev_err() -dev_warn() -dev_notice() -dev_info() -dev_dbg()