我使用 Buildroot 尝试为 Raspberry Pi 3 构建一个 Linux 映像,在其中我可以访问其中一个 GPIO 引脚上的每秒脉冲 (PPS) 输入。
首先,我在标准 Raspbian 发行版上尝试过这一点,并使其能够通过以下更改进行工作:
- 添加。
dtoverlay=pps-gpio,gpiopin=20
/boot/config.txt
- 添加。
pps-gpio
/etc/modules
然后我得到一个条目/dev/pps0
,当将带有 PPS 信号的电线连接到 RPi3 上的物理引脚 38 并运行时,pps-test /dev/pps0
我得到了预期的每秒一个信号。到目前为止一切顺利。
现在我想使用 Buildroot 构建的我自己的映像重新创建它。我使用默认configs/raspberrypi3_64_defconfig
配置,但进行了以下更改make nconfig
:
- 使用内核
rpi-4.14.y-rt
分支github.com/raspberrypi/linux
systemd
作为初始化系统/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
事实证明,缺少的是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
在启动系统时会自动获得一个设备。