simotin13's message

simotin13といいます。記事の内容でご質問やご意見がありましたらお気軽にコメントしてください\^o^/

Linuxのカーネルモジュールを書いてみた

今年の1月に書いた、2017年にやりたいこと

mcommit.hatenadiary.com

Linuxデバイスドライバを書いてみる

というのを挙げておりましたが、この12月に至っても達成できていなかったのでとりあえずLinux mint上でカーネルモジュールを書いてみました。
書いたといってもロードとアンロードしかできない、まさにカーネルモジュールのhello world程度のものです。

書いてみたコード

  • kmod.c
#include <linux/module.h>
#include <linux/init.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
	printk(KERN_ALERT "driver loaded, hello kernel.\n");
	return 0;
}

static void hello_exit(void)
{
	printk(KERN_ALERT "driver unloaded, good bye kernel.\n");
}

module_init(hello_init);
module_exit(hello_exit);
obj-m += kmod.o

all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

ビルドとモジュールの確認

make を実行し、正常にビルドできると kmod.ko が生成されています。


$ file kmod.ko
kmod.ko: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), BuildID[sha1]=0acdb23dfc45137854b91cb3edbb2ed09f205e78, not stripped

modinfo でカーネルモジュールの情報が取得できます。
上記のkmod.cではLicenceくらいしか情報を埋め込んでいませんが、色々とモジュールに情報を埋め込むマクロがあるようです。


$ modinfo kmod.ko
filename: /home/miyazaki/driver/kmod.ko
license: Dual BSD/GPL
srcversion: F5A8F473E31B45AC339CFDB
depends:
vermagic: 4.4.0-21-generic SMP mod_unload modversions

ロードとアンロード

insmodでカーネルモジュールのロード

ロードされているモジュールの確認はlsmodコマンドを使います。


$ sudo insmod kmod.ko

$ lsmod | grep kmod
kmod 16384 0

16384はモジュールのサイズ。最後の0は参照カウンタの値になるそうです。

rmmodでカーネルモジュールのアンロードができます。


$ sudo rmmod kmod

printkの出力先

printkの出力先は標準出力でも標準エラー出力でもありません。
カーネルリングバッファになるそうです。確認は dmsegから。


$ dmesg
...(略)
[26564.817444] driver loaded, hello kernel.
[27166.340079] driver unloaded, good bye kernel.

おぉ。printkも文字列が出力されています。

感想

module_initとかmodule_exitとかrubyの拡張ライブラリとかと雰囲気にてとっつきやすかったです。
コード自体は単純なので、肝になるのは参照しているMakefileの中身だと思いみてみました。

今回私が試した環境は、


$uname -a
Linux mint 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

になります。

make -C で参照しているMakefileは /lib/modules/4.4.0-21-generic/build/Makefile にありました。
1600行ぐらいあって、ざっと見ただけでは何が重要なのかわかりませんでした。まぁこの編は必要になったらおいおい勉強ということで・・・

initとexitだけではカーネルモジュールをあまり書いてみた意味がないので今回を取っ掛りとしてもう少し何かデバドラ的なことをしてみたいです。

でもカーネルモジュールで書くメリットとは何なんだろう・・・

  • ハードのデバドラ
  • アプリで書くより早い!?(パフォーマンス面)

とかなんだろうか。

参考にした書籍

Linuxデバイスドライバプログラミング

Linuxデバイスドライバプログラミング

RaspberryPiで学ぶ ARMデバイスドライバープログラミング

RaspberryPiで学ぶ ARMデバイスドライバープログラミング

最初はラズパイのデバドラを作るのを試していましたが、GPIOのレジスタの種類が多そうな感じだったのでとりあえずPC上で何もしないカーネルモジュールを書いてみることにしました。カーネルでGPIO触るだけでもLinuxだと色々と覚えることがありますね。ワンチップマイコンだと方向レジスタとデータレジスタ触るだけでいいのに。

「戦略参謀」を読んだ

ジュンク堂大阪本店のビジネス書のコーナーの目立つところで売られていたので目にとって読んでみたらなんか面白そうだったので買ってみました。

読後の感想、思ったこととか書いておきたいと思います。

概要

基本的には「紳士服のしきがわ」というスーツの小売業の会社を舞台にした小説風のビジネス書です。
同じような雰囲気の書籍としては、「100円のコーラを1000円で売る方法」が近いように思いました。
※「100円のコーラを1000円で売る方法」はマーケティングに関する書籍でしたが、本書は会社経営全般に関わる内容で書かれています。
ざっくりというと、小説8割、ビジネス書としての解説2割といった割り振りでしょうか。

ストーリーとして、「紳士服のしきがわ」をよくするための改革勢力 vs 自己の利益・保身を考える抵抗勢力といった構図で書かれており読みやすく小説としてとても面白かったです。
小説部分は、1日で一気に読みました。ビジネス書としての部分は分量は少ないですが、PDCA・経費削減の手法、社内改革について書かれておりこちらも咀嚼は必要ですがためになる内容だと感じました。

良かった点

「人、性善なれど、怠惰なり」という言葉が、空海真言宗の思想と一緒に本書内で何度か語られます。
ビジネス書ではあまりこういった人間観・宗教感のような内容は語られませんが、ビジネスは人が集まってするものです。
人を束ねて仕事を進める立場にある人間は、こういった「人間の性(さが)」というものをしっかりと見つめ、自分なりの考えを持った上で事にあたらないといけないものだと感じました。

解せなかった点

全体的にとても面白い小説でしたが、本書に登場する登場人物の年齢が設定にいまいち読み取れない箇所がありました。
小説中に、安部野というコンサルタントとその妹の彩という女性が登場します。

高山という、いわばこの小説の主人公とこの妹の彩という女性がくっつく感じでこの小説は終わります。
安部野という人物は相当できるビジネスマンで、人間心理にも通じた人物として書かれており、「紳士服のしきがわ」の会長(どう考えても60後半から70代の高齢)にも物怖じせず話をします。

となると、この安部野は40代後半から50代・60代のイメージになります。

一方、高山という主人公は、まだまだビジネスマンとしては稚拙なところがあるが、一生懸命な行動をとる好青年として書かれています。恐らく20代後半から30代前半のイメージでしょう。

40代後半~60代男の妹である彩と、どう老けさせたとしても30代前半の高山・・・
かなり歳の離れた妹ということなんだろうか・・・

読後感

企業内の改革や、創業者から2代目に事業継承をした後でどういったことが起こるのか、大企業でのどろどろした社内政治など、かなりリアルに描かれているように感じました。
私自身は大企業に勤めたことはありませんが、いろいろと見聞きする限りでは社内政治・人事の力学・権力争い・実績争いはあるようですので、多くのビジネスマンの方は共感したり感情移入して読めるのではないかと思います。

私の考えでは、会社とは仕事を通して価値を生み、その対価をお客様から頂くための組織です。またサラリーマンは自分の能力と時間を企業に提供し、企業はその対価を支払うものだと思います。
社内の政治はお客様視点から見れば一切どうでもよい話です。
本当の勝敗は消費者が決めるもので、社内の政治に勝利したところで、市場での競争に敗れれば何も意味はないと思うのですが、人間というのはなかなか頭で分かっていても心と体はついてこないというのが現実ですね。

「人、性善なれど、怠惰なり」

という言葉はなかなか深いように感じました。

amazonのブックデポジトリー(book depository)で本を買ってみた

Valgrindについていろいろ調べていたら書籍が出ているということで買ってみたのですが、ブックデポジトリーがAmazonに出している本を注文する形で購入しました。
届くまでに時間が少しかかったので書いておきたいと思います。

f:id:simotin13:20171129223143j:plain

Valgrind

Valgrindはメモリリークを調べるためのツールですが、実装について知りたくなりました。

valgrind.org

サイトからマニュアルをダウンロードして読んでみたのですが、実装に関する説明は少なかったので参考書籍はないかと探してみたところ、日本語の書籍はありませんでしたが、洋書ではでているようでした。どうしても読みたくなって、Amazon経由で買ってみたというのが経緯です。

ブックデポジトリー(Book Depository)から新品が買える、しかも発送までの期間も短いので、あまり気にせず注文してみました。

注文してから届くまで

amazonでこの本を注文したのは 11/15(水)でした。
今日(11/29(水)届いたので、ちょうど2週間かかったことになります。

日本語の住所で大丈夫か?

ブックデポジトリーで本を買う人は増えている!?ようですが、今回アマゾン経由で購入したのでちゃんと届くか不安でした。
というのも、amazonに登録している住所は漢字を使った日本語表記です。

一般に英語で住所を表現する場合はローマ字で、住所の一番小さな単位から表現します。
例えば大阪市北区だと

Kitaku1-2-3
Osaka City
Osaka(Prefecture)
のような表記が必要になります。

Amazonで注文した時点で住所は日本語になってしまうので最悪の場合、商品が届かないんじゃないかと不安でした。

問い合わせメールへの対応

海外ということもあって、注文してからの対応はアマゾンでの普通の商品を買う時よりも遅かったです。
11/15(水)に注文して、11/21(火)に「この注文はまだ発送されていません、ご注意ください。」みたいなメールがアマゾンから届きました。

そのとき気になってアマゾンのフォームから発注者へ「いつ発送されますか」という旨の問い合わせをしてみました。
ブックレポジトリーの方からは次の日には返信があったので安心しました。

感想

注文した本が、無事届いてよかったです。今度はAmazon経由ではなくブックレポジトリーのサイトから直接注文してみたいと思います。

Vargrindについて

首を長くしてまったこのVargind3.3の本ですが、私はValgrindの実装に関する内容を期待していたのですがどちらかというと動作・できることに関する説明が中心でした(残念)

ということで、Valgrindの実装を知るという意味では、頑張ってコードを読んでみるしかなさそうです。

f:id:simotin13:20171129223249j:plain

追記

2021年になって、久しぶりにブックデポジトリーを利用することがありました。
注文から10日前後で届いて思ったより早かったです。

mcommit.hatenadiary.com

Nucleo64 STM32F446 を買った

ここ最近体調を崩していたので記事を更新できていませんでした。
体調がよくないとあまり勉強とかもする気分にならなくて積み本と積み基板、積みツールだけがどんどん溜まっていく。

とりあえず、タイトルの通りNucleo STM32F446を買ったので少しメモを残しておきたいと思います。

f:id:simotin13:20171129224653j:plain

概要

CPUはCortex-M4で180MHz。早い。FPUがあるのとDSP命令が使えるらしい。
いろいろと凄そうなマイコンだ。最近は組み込みLinuxの開発が多いので久しぶりにワンチップマイコンを触ったりすると興奮します。
※ちなみに、M7とか買うともっと贅沢に遊べそう。

マニュアル類

マニュアルがないことには始まらない。

  • UM1724 User manual

http://www.st.com/content/ccc/resource/technical/document/user_manual/98/2e/fa/4b/e0/82/43/b7/DM00105823.pdf/files/DM00105823.pdf/jcr:content/translations/en.DM00105823.pdf

  • 回路図

www.st.com

にアクセスして、STM32 Nucleo (64 pins) schematicsをダウンロード。

参考書籍

ちょっと前にARMアセンブラデバッグする仕事がありました。またM3/M4を触ることになりそうなので基板と合わせて勉強用の書籍も買いました。

ARMマイコンCoretex-M教科書

ARMマイコンCortex-M教科書 (ARM教科書)

ARMマイコンCortex-M教科書 (ARM教科書)

アセンブラについては、

Arm Assembly Language Programming & Architecture

Arm Assembly Language Programming & Architecture

The Definitive Guide to ARM® Cortex®-M3 and Cortex®-M4 Processors, Third Edition

The Definitive Guide to ARM® Cortex®-M3 and Cortex®-M4 Processors, Third Edition

を買ってみた。
こちらは参考書というよりは辞書的な扱いをするイメージです。

開発環境

とりあえずIARのARM用開発ツールを落としてインストールしてみた。
インストールしてみたとこ度終わってしまっているのでLチカから触っておきたい。

Elixir入門 ~12日目 eclipseでerlangのデバッグ環境を作る~

昨日はerlangについて調べてみた結果を書いたけど、今日はソースをぼちぼちとみてみた。

mcommit.hatenadiary.com

ソース少し読んでみたが、ちまたで言われるerlangの並列性の本質が知りたくなったので本格的に調べてみることにした。
そもそも、Elixirを勉強するはずだったのになんでこんなことをしているんだろう。もはやElixirなど何も関係なくなってしまっている・・・

注意

タイトルに書いたerlangデバッグ環境というのはerlangの処理系、つまりertsのデバッグ環境をさしています。
.erlで書いたerlangのコードのデバッグ環境のことではありません。

続きを読む