📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

文字列「__FORCETOC__」を「{{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This pag…
 
(同じ利用者による、間の6版が非表示)
32行目: 32行目:
オンライン上にあるGPIOに関するドキュメントの多くは、ArduinoおよびRaspberry PiのようなSoCを対象にしている。<br>
オンライン上にあるGPIOに関するドキュメントの多くは、ArduinoおよびRaspberry PiのようなSoCを対象にしている。<br>
PCにおいては、SoCとは異なり、GPIOのあるPCはGPIOピンをCPUに直接統合していないが、スーパーI/Oチップ (SIO) を使用している。<br>
PCにおいては、SoCとは異なり、GPIOのあるPCはGPIOピンをCPUに直接統合していないが、スーパーI/Oチップ (SIO) を使用している。<br>
<br>
[[ファイル:Qt GPIO 1.png|フレームなし|中央]]
<br>
<br>
Qtを使用して、PCのGPIOピンを直接制御することは一般的ではないが、OSやハードウェアに依存した方法を使用することで可能である。<br>
Qtを使用して、PCのGPIOピンを直接制御することは一般的ではないが、OSやハードウェアに依存した方法を使用することで可能である。<br>
66行目: 68行目:
<br><br>
<br><br>


== スーパーI/Oチップ名の確認 ==
== スーパーI/Oチップを使用する場合 (スーパーI/Oチップ付属のPCの場合) ==
==== スーパーI/Oチップ名の確認 ====
BIOS / UEFIには、どのスーパーI/Oチップが使用されているか表示されていない場合もある。<br>
BIOS / UEFIには、どのスーパーI/Oチップが使用されているか表示されていない場合もある。<br>
スーパーI/Oチップの名前を確認する場合は、PCケースを開けて、GPIOピンの付近にあるチップの表面に描かれているシルク等で確認する。<br>
スーパーI/Oチップの名前を確認する場合は、PCケースを開けて、GPIOピンの付近にあるチップの表面に描かれているシルク等で確認する。<br>
<br><br>
<br>
 
==== スーパーI/Oチップのカーネルモジュールの有効化 ====
== スーパーI/Oチップのカーネルモジュールの有効化 ==
まず、付属しているスーパーI/Oチップのカーネルモジュールを知りたい場合は、[https://github.com/torvalds/linux Linux KernelのGithub]にあるgit repoから、スーパーI/Oチップ名で検索する。<br>
まず、付属しているスーパーI/Oチップのカーネルモジュールを知りたい場合は、[https://github.com/torvalds/linux Linux KernelのGithub]にあるgit repoから、スーパーI/Oチップ名で検索する。<br>
<br>
<br>
145行目: 147行目:
  done  
  done  
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
== sysfsの使用 (スーパーI/Oチップが無いPCおよびSBCの場合) ==
sysfsを使用して、GPIOを制御することができる。<br>
<br>
==== GPIOの操作インタフェースの公開 ====
まず、/sys/class/gpioディレクトリにアクセスして、カーネル空間からユーザ空間にGPIOの操作インタフェースを公開する。<br>
<br>
exportファイルにGPIO番号を書き込む。<br>
* direction
*: GPIOの入力 / 出力を指定する。
* value
*: GPIOの出力の制御、あるいは、GPIOの入力を取得する。
<br>
ファイルIOでGPIOを操作する。<br>
これは、open、close、read、writeの4つの関数が存在する。<br>
<br>
まず、システム内に/sys/class/gpioディレクトリが存在するかどうかを確認する。<br>
<br>
/sys/class/gpioディレクトリにおいて、ユーザ空間の/sys/class/gpioディレクトリにgpiochipファイルが存在するかどうかを確認する。<br>
ls /sys/class/gpio
# 出力例 :
export    gpiochip0  unexport
<br>
gpio_operationは、/sys/ファイルインターフェースを通して、IOポートGPIOとファイルシステムのマッピングを操作する。<br>
GPIOを制御するためのディレクトリは、/sys/class/gpioディレクトリに存在する。<br>
<br>
/sys/class/gpio/exportファイルは、制御されているGPIOピン番号をエクスポートする必要性をシステムに通知するために使用される。<br>
<br>
/sys/class/gpio/unexportファイルは、システムにエクスポートのキャンセルを通知するために使用される。<br>
<br>
/sys/class/gpio/gpiochipXディレクトリは、システムのGPIOレジスタの情報を保存する。<br>
各レジスタの制御ピンの開始番号ベース、レジスタ名、総ピン数を含む。<br>
<br>
==== gpioカーネルモジュールのインストール ====
<u>もし、gpioカーネルモジュールが無い場合は、インストールする必要がある。</u><br>
<br>
Linuxカーネルのソースコードをダウンロードする。<br>
* パッケージ管理システムから、Linuxカーネルのソースコードをインストールする場合
*: <code>sudo zypper install kernel-source</code>
*: <br>
* Linuxカーネルの公式webサイトから、Linuxカーネルのソースコードをダウンロードする場合
*: [https://www.kernel.org Linuxカーネルの公式webサイト]または[https://github.com/torvalds/linux/tags Github]にアクセスして、対応するバージョンのLinuxカーネルのソースコードをダウンロードする。
*: あるいは、[https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs.git/refs/tags Linuxカーネルの公式webサイトにあるGit]から、対応するバージョンのLinuxカーネルをダウンロードする。
*: ダウンロードしたファイルを解凍する。
*: <code>tar xf linux-<バージョン>.tar.gz</code>
*: <code>cd linux-<バージョン></code>
<br>
既存のカーネルコンフィグ(/bootディレクトリ内にあるカーネルコンフィグ)を元に、新しいカーネルコンフィグを生成する。<br>
<code>make olderconfig</code>コマンドは、可能な限り既存のカーネルコンフィグの設定を使用して、ビルドディレクトリ内に必要なファイルを生成する。<br>
make -j $(nproc) olddefconfig O=.
# または
sudo make -j $(nproc) olddefconfig O=.
<br>
gpioカーネルモジュールのビルド設定を行うため、<code>make menuconfig</code>コマンドを実行する。<br>
make menuconfig -j $(nproc)
# または
sudo make menuconfig -j $(nproc)
<br>
TUI画面が起動するので、[Device Drivers] - [GPIO Support] - [/sys/class/gpio/... (sysfs interface)]に移動して、[M]キーを押下する。<br>
TUI画面下にある[Save]を選択して、上記の設定を保存する。<br>
<br>
Linuxカーネルから、gpioカーネルモジュールのみをビルドする。<br>
<br>
* INSTALL_MOD_DIRオプション
*: 一般的に、カーネルモジュールは、/lib/modules/$(uname -r)/extraディレクトリにインストールされる。
*: 任意のディレクトリに配置したい場合、<code>INSTALL_MOD_DIR</code>オプションを付加して、extraディレクトリに代わるパスを指定する。
*: 例えば、<code>INSTALL_MOD_DIR=drivers/gpio</code>と指定する場合、インストールディレクトリは<code>/lib/modules/$(uname -r)/kernel/drivers/gpio</code>ディレクトリとなる。
sudo make scripts prepare modules_prepare -j $(nproc)
sudo make -C . M=drivers/gpio -j $(nproc)
sudo mkdir -p /lib/modules/$(uname -r)/kernel/drivers/gpio
sudo cp drivers/gpio/gpio-it87.ko  /lib/modules/$(uname -r)/kernel/drivers/gpio
# または
sudo make prepare -j $(nproc)
sudo make modules_prepare -j $(nproc)
sudo make M=drivers/gpio -j $(nproc)
sudo make modules M=drivers/gpio -j $(nproc)
sudo make modules_install M=drivers/gpio INSTALL_MOD_DIR=kernel/drivers/gpio -j $(nproc)
<br>
Linuxカーネルモジュールのインストール後は、Linuxカーネルのビルドファイルを削除する。(ファイル容量が膨大なため)<br>
sudo make clean -j $(nproc)      # .configファイルを残す
または
sudo make distclean -j $(nproc)  # .configファイル等の設定ファイルを全て削除する
<br>
==== Linuxカーネルモジュールの読み込み (セキュアブートが無効の場合) ====
Linuxカーネルモジュール全体を読み込む。<br>
sudo depmod -a $(uname -r)
<br>
PCを再起動して、gpioカーネルモジュールが正常に動作するかどうかを確認する。<br>
また、gpioカーネルモジュールが正常に読み込まれているかどうかを確認する。<br>
lsmod | grep gpio-it87
# または
sudo modinfo gpio-it87
<br>
必要であれば、F2FSモジュールをXZ形式またはZstandard形式に圧縮する。(任意)<br>
# XZ形式の場合
cd /lib/modules/$(uname -r)/kernel/drivers/gpio
sudo xz -f gpio-it87.ko
# Zstandard形式の場合
cd /lib/modules/$(uname -r)/kernel/drivers/gpio
sudo zstd --rm gpio-it87.ko
<br><br>
<br><br>