「Qtの基礎 - GPIO」の版間の差分

ナビゲーションに移動 検索に移動
70行目: 70行目:
BIOS / UEFIには、どのスーパーI/Oチップが使用されているか表示されていない場合もある。<br>
BIOS / UEFIには、どのスーパーI/Oチップが使用されているか表示されていない場合もある。<br>
スーパーI/Oチップの名前を確認する場合は、PCケースを開けて、GPIOピンの付近にあるチップの表面に描かれているシルク等で確認する。<br>
スーパーI/Oチップの名前を確認する場合は、PCケースを開けて、GPIOピンの付近にあるチップの表面に描かれているシルク等で確認する。<br>
<br>
==== スーパーI/Oチップのカーネルモジュールの有効化 ====
まず、付属しているスーパーI/Oチップのカーネルモジュールを知りたい場合は、[https://github.com/torvalds/linux Linux KernelのGithub]にあるgit repoから、スーパーI/Oチップ名で検索する。<br>
<br>
以下の例では、スーパーI/Oチップ名が"iTE IT8786E-I"の場合である。<br>
repo:torvalds/linux iTE IT8786E-I
<br>
<syntaxhighlight lang="c">
/* linux/drivers/gpio/gpio-it78.cファイル */
/* gpio-it78.c */
/*
  *  GPIO interface for IT87xx Super I/O chips
  *
  *  Author: Diego Elio Pettenò <flameeyes@flameeyes.eu>
  *  Copyright (c) 2017 Google, Inc.
  *
  *  Based on it87_wdt.c    by Oliver Schuster
  *          gpio-it8761e.c by Denis Turischev
  *          gpio-stmpe.c  by Rabin Vincent
  */
</syntaxhighlight>
<br>
<syntaxhighlight lang="make">
# linux/drivers/gpio/Makefileファイル
# ※ "CONFIG_GPIO_IT87"という部分の文字列を控えておくこと
obj-$(CONFIG_GPIO_IT87) += gpio-it87.o
</syntaxhighlight>
<br>
# linux/drivers/gpio/Kconfigファイル
Kconfig snippet:
config GPIO_IT87
        tristate "IT87xx GPIO support"
        help
          Say yes here to support GPIO functionality of IT87xx Super I/O chips.
          This driver is tested with ITE IT8728 and IT8732 Super I/O chips, and
          supports the IT8761E, IT8613, IT8620E, and IT8628E Super I/O chips as
          well.
          To compile this driver as a module, choose M here: the module will
          be called gpio_it87.
<br>
スーパーI/Oチップ名を確認して、該当するカーネルモジュールがインストールされているかどうかを確認する。<br>
find /lib/modules/$(uname -r)/kernel/drivers/gpio -iname "*gpio*" | grep -i gpio-it87
<br>
スーパーI/Oチップ名を確認して、該当するカーネルモジュールが読み込まれているかどうかを確認する。<br>
grep CONFIG_GPIO_IT87 /boot/config-$(uname -r)
# 出力例:
# mと出力される場合、そのカーネルモジュールがデフォルトでは無効であることを意味する
CONFIG_GPIO_IT87=m
<br>
スーパーI/Oチップのカーネルモジュールを有効にする。<br>
sudo modprobe gpio-it87
<br>
GPIOピンの入出力に関する設定はBIOS / UEFIを通してのみ変更可能であり、GPIOの値を設定 / 取得する場合はスーパーユーザ権限が必要である。<br>
<br>
もし、gpiolibのピン番号がBIOS / UEFIのピン番号と一致しない場合は、各ピンをブレッドボード上のLEDに接続して、以下のようなシェルスクリプトを実行する。<br>
以下の例では、チップセット0の全ピンを1秒間ごとにトグルしている。<br>
ただし、実行前に、BIOS / UEFIにおいて、全てのGPIOピンを出力モードに割り当てること。<br>
<syntaxhighlight lang="sh">
for i in $(seq 0 63)
do
    echo -n "$i on "
    sudo gpioset 0 "$i=1"
    sleep 1
    echo off
    sudo gpioset 0 "$i=0"
done
</syntaxhighlight>
<br><br>
<br><br>


案内メニュー