【組み込みエンジニアの教科書】を読んで学んだこと・実践したこと
📚 読んだ本
- タイトル:組み込みエンジニアの教科書
- 著者:渡辺 登 / 牧野 進二
- 出版社:C&R研究所
- 読んだ目的:
- Linux の構造を理解するため
- 組み込み開発の基礎を体系的に学びたかったため
- 現役の組み込みエンジニアから最初の教材として勧められたため
🧠 本から学んだ重要ポイント
- 組み込みシステムの構成要素
- 組み込みエンジニアのキャリアと役割
- 制御プログラムの基本構造
- Linux デバイスファイルを利用した入出力
- 組み込み Linux のメリットと注意点
🛠 実際に試したこと・コード例
1. デバイスファイルにopen/read/write/closeするテストコード
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#define BUFFER_SIZE 64
int main() {
int fd_zero, fd_null;
char buffer[BUFFER_SIZE];
ssize_t rbytes, wbytes;
// /dev/zero を読み込み専用で開く
fd_zero = open("/dev/zero", O_RDONLY);
if (fd_zero < 0) {
perror("open /dev/zero");
return 1;
}
// /dev/null を書き込み専用で開く
fd_null = open("/dev/null", O_WRONLY);
if (fd_null < 0) {
perror("open /dev/null");
close(fd_zero);
return 1;
}
// /dev/zero から読み込み、/dev/null に書き込む
rbytes = read(fd_zero, buffer, BUFFER_SIZE);
if (rbytes < 0) {
perror("read");
} else {
printf("Read %zd bytes from /dev/zero\n", rbytes);
wbytes = write(fd_null, buffer, rbytes);
if (wbytes < 0) {
perror("write");
} else {
printf("Wrote %zd bytes to /dev/null\n", wbytes);
}
}
// ファイルを閉じる
close(fd_zero);
close(fd_null);
return 0;
}
🔍 この実験で学んだこと
- Linux の I/O はファイル操作として統一されている
- open/read/write/close の動作理解
- /dev/zero と /dev/null の用途を体験できた
2. Ubuntu上でArduino-cliを使用できるようにする方法
※Arduinoマイコンを所持していないため初期設定のみ
// 初期設定
arduino-cli config init
// ボード認識確認
arduino-cli board list
// ボードパッケージのインストール
arduino-cli core update-index
arduino-cli core install arduino:avr
// USBポート権限の設定
sudo usermod -aG dialout $USER
// ログアウト → ログインして有効化
logout
// dialoutが含まれているか確認
groups
📌 目的
- GUIに依存せず CLIベースでビルドできるようにすることで、
- 組み込み CI/CD の基礎となるため。
3. Yoctoの環境設定
// ホスト環境パッケージのインストール
sudo apt update
sudo apt install build-essential chrpath cpio debianutils diffstat file gawk \
gcc git iputils-ping libacl1 liblz4-tool locales python3 python3-git \
python3-jinja2 python3-pexpect python3-pip python3-subunit socat texinfo \
unzip wget xz-utils zstd
// ロケールを設定
sudo locale-gen en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
// Yocto(Poky リポジトリ)のクローン
git clone git://git.yoctoproject.org/poky
cd poky
// ビルド環境の初期化
source oe-init-build-env
// イメージのビルド
bitbake core-image-minimal
🔍 学んだこと
- 最小 Linux イメージを自動生成できるシステムであること
- カスタム Linux を設計するには必須の技術であること
🚀 今後の展望
- Arduino 実機を使った制御プログラム作成
- Yocto でターゲット向け Linux を構築
- カーネルとデバイスドライバに挑戦
