Chapter 03

最初のプログラム

みつきん
みつきん
2020.12.16に更新

ハローワールド

開発環境のインストールができたらいよいよプログラミングです。最初に作成するプログラムではhello worldと世界に挨拶するのが通例となっています。

ソースコードをビルドするためには、ソースファイルの他にもファイルが必要になりますので、あらかじめディレクトリを作成してそこで作業します。

$ mkdir ~/hello && cd ~/hello

ソースコード

hello.cを下記の内容で作成します。

// 1.
#include <linux/module.h>

// 2.
int init_module(void)
{
	// 3.
	printk("Hello world!\n");
	return 0;
}

// 4.
void cleanup_module(void)
{
}

// 5.
MODULE_LICENSE("GPL");

//のあとはコメントといって、直接プログラムには関係ない部分です。
プログラムの説明などを書いておく時に使います。ここでは、プログラムを解説するためにコメントで番号を振っています。
実際にこのソースコードを入力する場合には、省略しても構いません。

コメントで振った番号に沿ってプログラムを解説していきます。

  1. おまじないです。
  2. おまじないです。
  3. Hello world!と表示させます。
  4. おまじないです。
  5. おまじないです。

おまじないについてですが、きちんと解説するととても長く複雑な内容になりますので、本書では「そういうものだ」と覚えておいてください。

Makefile

ソースコードをビルドするにはmakeというコマンドを使います。makeコマンドにソースコードのビルド方法を教えるためにMakefileというファイルが必要になります。

下記の内容でMakefileを作成します。

obj-m := hello.o

SRC := $(shell pwd)

all:
	$(MAKE) -C $(KERNEL_SRC) M=$(SRC)

modules_install:
	$(MAKE) -C $(KERNEL_SRC) M=$(SRC) modules_install

clean:
	rm -f *.o *~ core .depend .*.cmd *.ko *.mod.c
	rm -f Module.markers Module.symvers modules.order
	rm -rf .tmp_versions Modules.symvers

obj-mの行ではプログラムを構成するソースファイルの拡張子を.cから.oに変えたものを指定します。

プログラムの規模が大きくなると、1つのプログラムを作成する複数のソースコードに分けることになります。その場合はこの行を変更して必要なソースファイルを指定します。

それ以外の行は基本的にはおまじないです。

ビルド

下記のコマンドでプログラムをビルドします。

$ source /opt/poky/3.2+snapshot/environment-setup-cortexa7t2hf-neon-vfpv4-poky-linux-gnueabi
$ export KERNEL_SRC=${OECORE_TARGET_SYSROOT}/usr/src/kernel
$ make

1行目と2行目のコマンドはターミナルウィンドウを開くたびに1回ずつ実行する必要があります。
その後ソースコードを修正してビルドし直す場合は、makeだけ実行しなおせばOKです。

できがったプログラムを実行!と行きたいところですが、プログラムを実行するためにはラズパイの環境を整える必要があります。次の章ではラズパイの環境を作っていきます。