0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

未経験から学ぶ組み込み開発|『組み込みエンジニアの教科書』で理解したポイントと実験記録

Posted at

【組み込みエンジニアの教科書】を読んで学んだこと・実践したこと

📚 読んだ本

  • タイトル:組み込みエンジニアの教科書
  • 著者:渡辺 登 / 牧野 進二
  • 出版社: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;
}

実行結果
image.png

🔍 この実験で学んだこと

  • 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 を構築
  • カーネルとデバイスドライバに挑戦
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?