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
_のエントリを取得するために何を試すことができますか?
make nconfig
で欠けていたものが判明し、次も選択します。
Kernel
-> Build Device Tree with overlay support
また、ファイル<buildroot>/board/raspberrypi3-64/genimage-raspberrypi3-64.cfg
にpps-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
デバイスが自動的に取得されます。