web-dev-qa-db-ja.com

PPS Raspberry Pi3上のBuildrootイメージを使用したGPIO

Buildrootを使用して、GPIOピンの1つでPulse-per-second(PPS)入力にアクセスできるRaspberry Pi3用のLinuxイメージを構築しようとしています。

まず、標準のRaspbianディストリビューションでこれを試し、次の変更で動作するようにしました。

  • _dtoverlay=pps-gpio,gpiopin=20_を_/boot/config.txt_に追加します。
  • _pps-gpio_を_/etc/modules_に追加します。

次に、エントリ_/dev/pps0_を取得し、PPS信号のワイヤをRPi3の物理ピン38に接続して_pps-test /dev/pps0_を実行すると、1秒あたり1つの信号が期待されます。ここまでは順調ですね。

ここで、Buildrootで作成した独自のイメージを使用してこれを再現したいと思います。デフォルトの_configs/raspberrypi3_64_defconfig_構成を使用していますが、_make nconfig_に次の変更が加えられています。

  • _rpi-4.14.y-rt_からカーネルブランチ_github.com/raspberrypi/linux_を使用する
  • systemdをinitシステムとして
  • /dev management using udev (from systemd)
  • _Target packages_-> _Hardware handling_-> _pps-tools_アクティブ化

(これですべての変更が行われたと思いますが、何かを忘れた可能性があります。)

出力として取得する_sdcard.img_には、ブートパーティションにファイル_pps-gpio.dtbo_があります。 _dtoverlay=pps-gpio,gpiopin=20_行をファイル_config.txt_に追加します。また、ファイルシステムの_pps-gpio_に配置した_pps.conf_という名前のファイルに_/etc/modules-load.d_という行を追加します。

システムを起動すると、エントリ_/dev/ppsX_が得られませんが、lsmodを実行すると、(とりわけ)次のようになります:_pps_gpio 16384 0 pps_core 20480 1 pps_gpio_

これは、dtoverlayが正しくロードされたことを意味しますか? _/dev/ppsX_のエントリを取得するために何を試すことができますか?

1
Isak T.

make nconfigで欠けていたものが判明し、次も選択します。

  • Kernel-> Build Device Tree with overlay support

また、ファイル<buildroot>/board/raspberrypi3-64/genimage-raspberrypi3-64.cfgpps-gpio.dtboファイルを追加して、image boot.vfatセクションが次のようになるようにします。

image boot.vfat {
  vfat {
    files = {
      "bcm2710-rpi-3-b.dtb",
      "bcm2710-rpi-3-b-plus.dtb",
      "bcm2837-rpi-3-b.dtb",
      "rpi-firmware/bootcode.bin",
      "rpi-firmware/cmdline.txt",
      "rpi-firmware/config.txt",
      "rpi-firmware/fixup.dat",
      "rpi-firmware/start.elf",
      "Image"
    }

    file overlays/pps-gpio.dtbo {
      image = "rpi-firmware/overlays/pps-gpio.dtbo"
    }
  }
  size = 32M
}

pps.confファイルをetc/modules-load.dの下に置く必要はありません。

これらの変更により、システムの起動時に/dev/pps0デバイスが自動的に取得されます。

1
Isak T.