Die Geschichte der Installation von raspi-config unter Ubuntu 18.04 und der Änderung der Grundeinstellungen von GPIO

Einführung

Der Inhalt von Herrn Kuwanos Artikel in "Kapitel 4 Versuch, einen externen Schaltkreis durch Befehlseingabe zu verschieben" von "** Easy ARM-Computer-E / A mit Himbeerkuchen **" (Interface Special Edition 2013 CQ Publisher) Im Herbst 2020 bestätigte ich die Operation auf "Ubuntu 18.04" [^ 1]. Der Inhalt des Artikels ist sehr einfach zu verstehen und die Erklärung ist höflich und leicht zu verstehen. Da jedoch die Verwendung von "Raspbian" im Artikel zum Zeitpunkt des Jahres 2013 vorausgesetzt wird, sollten Sie die SPI-Einstellung auf GPIO deaktivieren, damit sie auf "Ubuntu" ausgeführt werden kann Außerdem müssen einige der eingeführten Schaltungsentwürfe geändert werden, und ich werde ein Memo über die Arbeitsinhalte und Änderungen in einem Artikel schreiben, um mein Verständnis zu organisieren. [^ 1]: Ich persönlich habe vor, in Zukunft "ROS" zu lernen. Es ist also eine Arbeit, die als Ergebnis der Wahl von "Ubuntu" als Betriebssystem entstanden ist, was die Installation von "ROS" erleichtert, also natürlich "Raspbian" Wenn es "selbst in der neuesten Version" ist, ist "raspi-config" in den Grundeinstellungen enthalten, sodass keine Arbeit erforderlich ist, um es zu verwenden.

Experimentierumgebung

Schaltung für GPIO-Test

Unten finden Sie einen Link zum Referenzschaltbild [^ 2] und ein Foto des tatsächlich hergestellten Geräts [^ 3].

Bestätigungsarbeit

Erstens ist die GPIO-Schnittstelle im Verzeichnis / sys bereits mit den Standardeinstellungen vorhanden.

~$ ls -l /sys/class/gpio/
total 0
--w------- 1 root root 4096 Jan  1  1970 export
lrwxrwxrwx 1 root root    0 Jan  1  1970 gpiochip0 ->
../../devices/platform/soc/3f200000.gpio/gpio/gpiochip0
lrwxrwxrwx 1 root root    0 Jan  1  1970 gpiochip504 -> ../../devices/platform/soc/soc:firmware/soc:firmware:expgpio/gpio/gpiochip504
--w------- 1 root root 4096 Jan  1  1970 unexport

Wenn ich jedoch versuche, eine symbolische Verknüpfung für einen GPIO7-Pin zu erstellen, wird die Meldung "Gerät oder Ressource ist ausgelastet und Echo-Schreibfehler" angezeigt.

~$ sudo -s
~# echo 7 >/sys/class/gpio/export
bash: echo: write error: Device or resource busy

Standardmäßig wurden die Pins "GPIO7" und "GPIO8" für SPI [^ 4] gesetzt.

~# cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-53, parent: platform/3f200000.gpio, pinctrl-bcm2835:
gpio-7   (                    |spi0 CS1            ) out hi ACTIVE LOW
gpio-8   (                    |spi0 CS0            ) out hi ACTIVE LOW
gpio-29  (                    |led0                ) out lo 
~# exit

[^ 4]: Wie Sie im obigen Gerätebild sehen können, wird die Nummer "3" automatisch angezeigt, wenn das Gerät eingeschaltet wird. "3" wird in "74HC3411" angezeigt, da "GPIO7" und "GPIO8" im Schaltplan "H" sind, sodass SPI standardmäßig verwendet werden kann, wenn die Schaltung mit GPIO verbunden ist. Sie können sich das vorstellen, aber es ist sehr praktisch, wenn Sie es mit einem Befehl überprüfen können.

Installieren Sie raspi-config

Ich habe raspi-config verwendet, um die GPIO-Funktion einzustellen. Obwohl es sich um ein Tool zum Ändern von Einstellungen für Raspbian handelt, wurde eingeführt, dass es auch in Ubuntu mit der folgenden URL funktioniert. Daher habe ich gemäß dem eingeführten Verfahren gearbeitet.

sudo echo "deb http://archive.raspberrypi.org/debian/ jessie main" >> /etc/apt/sources.list
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 7FA3303E
sudo apt-get update
sudo apt-get install raspi-config
sudo mount /dev/mmcblk0p1 /boot

Jetzt können Sie den Menübildschirm der raspi-config-GUI normal starten.

~$ sudo rapsi-config

Wählen Sie im oberen Menübildschirm von rapsi-config "** 5 Schnittstellenoptionen Konfigurieren von Verbindungen zu Peripheriegeräten "> " P4 SPI Aktivieren / Deaktivieren des automatischen Ladens des SPI-Kernelmoduls ". Wenn Sie danach unter " Möchten Sie, dass die SPI-Schnittstelle aktiviert wird? " die Option " Nein " auswählen? ** "wird die Meldung" ** Die SPI-Schnittstelle ist deaktiviert ** "als" ** Ok ** "angezeigt. Drücken Sie "", um zum oberen Bildschirm zurückzukehren. Speichern Sie Ihre Änderungen einfach mit " Fertig **" am Ende.

~$ sudo reboot -h now

Überprüfen Sie nach dem Neustart zum Laden der Konfigurationsänderungen erneut den GPIO-Konfigurationsstatus.

~# cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-53, parent: platform/3f200000.gpio, pinctrl-bcm2835:
gpio-29  (                    |led0                ) out lo
gpiochip1: GPIOs 504-511, parent: platform/soc:firmware:expgpio, raspberrypi-exp-gpio, can sleep:
gpio-506 (                    |led1                ) out lo ACTIVE LOW 

Wenn GPIO7 und 8 aus der Liste verschwinden, sind Sie erfolgreich. Wenn das nicht funktioniert, wurden die Änderungen an der "raspi-config" möglicherweise nicht gespeichert.

Referenz

Der Zweck dieser Arbeit ist es, eine Ausführungsumgebung für Schaltungstests meines eigenen GPIO-Gerätetreiber-Lerngeräts zu erstellen. Mit anderen Worten, die letzte Überprüfung bestand darin, den folgenden Shell-Skriptcode auszuführen und die Schaltung auf Verdrahtungsfehler zu überprüfen.

Es gab keinen Fehler in der Befehlszeile, und selbst im eigentlichen Maschinentest wurde gemäß den Spezifikationen des Skripts nach zweimaligem Blinken des Punkts die Zahl 0 bis 9 auf der 7-Segment-LED angezeigt und endete, nachdem der Punkt zweimal blinkte.

Wenn der Druckknopf geöffnet ist, wird "1" auf dem Konsolenbildschirm angezeigt, und wenn der Knopf gedrückt wird, wird "0" angezeigt.

Die Platzierung der GPIO-Nummern hat sich seit "I / O with Raspberry Pie" geringfügig geändert. In dieser experimentellen Schaltung sind die physikalischen Stiftpositionen des Druckschalters dieselben wie bei den herkömmlichen Nummern 3 und 5, so dass die GPIO-Nummer von der Kombination von "0" und "1" in "2" geändert wird. Es wird programmgesteuert in die Kombination von "3" geändert.

gpio_sh


echo gpio export pin seting ...
echo 2 > /sys/class/gpio/export
echo 3 > /sys/class/gpio/export
echo 7 > /sys/class/gpio/export
echo 8 > /sys/class/gpio/export
echo 9 > /sys/class/gpio/export
echo 10 > /sys/class/gpio/export
echo 11 > /sys/class/gpio/export
echo gpio pin direction seting ...
echo in > /sys/class/gpio/gpio2/direction
echo in > /sys/class/gpio/gpio3/direction
echo out > /sys/class/gpio/gpio7/direction
echo out > /sys/class/gpio/gpio8/direction
echo out > /sys/class/gpio/gpio9/direction
echo out > /sys/class/gpio/gpio10/direction
echo out > /sys/class/gpio/gpio11/direction
echo gpio test start...
echo 1 > /sys/class/gpio/gpio7/value
echo 1 > /sys/class/gpio/gpio8/value
echo 0 > /sys/class/gpio/gpio9/value
echo 1 > /sys/class/gpio/gpio10/value
echo 1 > /sys/class/gpio/gpio11/value
echo 1 > /sys/class/gpio/gpio11/value
sleep 1
echo 0 > /sys/class/gpio/gpio11/value
sleep 1
echo 1 > /sys/class/gpio/gpio11/value
sleep 1
echo 0 > /sys/class/gpio/gpio11/value
sleep 1
echo 0 > /sys/class/gpio/gpio7/value
echo 0 > /sys/class/gpio/gpio8/value
echo 0 > /sys/class/gpio/gpio9/value
echo 0 > /sys/class/gpio/gpio10/value
echo 0
sleep 1
echo 1 > /sys/class/gpio/gpio7/value
echo 0 > /sys/class/gpio/gpio8/value
echo 0 > /sys/class/gpio/gpio9/value
echo 0 > /sys/class/gpio/gpio10/value
echo 1
sleep 1
echo 0 > /sys/class/gpio/gpio7/value
echo 1 > /sys/class/gpio/gpio8/value
echo 0 > /sys/class/gpio/gpio9/value
echo 0 > /sys/class/gpio/gpio10/value
echo 2
sleep 1
echo 1 > /sys/class/gpio/gpio7/value
echo 1 > /sys/class/gpio/gpio8/value
echo 0 > /sys/class/gpio/gpio9/value
echo 0 > /sys/class/gpio/gpio10/value
echo 3
sleep 1
echo 0 > /sys/class/gpio/gpio7/value
echo 0 > /sys/class/gpio/gpio8/value
echo 1 > /sys/class/gpio/gpio9/value
echo 0 > /sys/class/gpio/gpio10/value
echo 4
sleep 1
echo 1 > /sys/class/gpio/gpio7/value
echo 0 > /sys/class/gpio/gpio8/value
echo 1 > /sys/class/gpio/gpio9/value
echo 0 > /sys/class/gpio/gpio10/value
echo 5
sleep 1
echo 0 > /sys/class/gpio/gpio7/value
echo 1 > /sys/class/gpio/gpio8/value
echo 1 > /sys/class/gpio/gpio9/value
echo 0 > /sys/class/gpio/gpio10/value
echo 6
sleep 1
echo 1 > /sys/class/gpio/gpio7/value
echo 1 > /sys/class/gpio/gpio8/value
echo 1 > /sys/class/gpio/gpio9/value
echo 0 > /sys/class/gpio/gpio10/value
echo 7
sleep 1
echo 0 > /sys/class/gpio/gpio7/value
echo 0 > /sys/class/gpio/gpio8/value
echo 0 > /sys/class/gpio/gpio9/value
echo 1 > /sys/class/gpio/gpio10/value
echo 8
sleep 1
echo 1 > /sys/class/gpio/gpio7/value
echo 0 > /sys/class/gpio/gpio8/value
echo 0 > /sys/class/gpio/gpio9/value
echo 1 > /sys/class/gpio/gpio10/value
echo 9
sleep 1
echo 0 > /sys/class/gpio/gpio7/value
echo 1 > /sys/class/gpio/gpio8/value
echo 0 > /sys/class/gpio/gpio9/value
echo 1 > /sys/class/gpio/gpio10/value
echo 1 > /sys/class/gpio/gpio11/value
echo dot
sleep 1
echo 0 > /sys/class/gpio/gpio11/value
sleep 1
echo 1 > /sys/class/gpio/gpio11/value
sleep 1
echo 0 > /sys/class/gpio/gpio11/value
sleep 1
echo 1 > /sys/class/gpio/gpio11/value
cat /sys/class/gpio/gpio2/value
cat /sys/class/gpio/gpio3/value
echo test exiting...
echo 2 > /sys/class/gpio/unexport
echo 3 > /sys/class/gpio/unexport
echo 7 > /sys/class/gpio/unexport
echo 8 > /sys/class/gpio/unexport
echo 9 > /sys/class/gpio/unexport
echo 10 > /sys/class/gpio/unexport
echo 11 > /sys/class/gpio/unexport
echo end

abschließend

In Vorbereitung auf das Experiment zur Erstellung von Gerätetreibern haben wir raspi-config eingeführt, um den Vorgang so einfach wie möglich zu überprüfen. In der Datei "/ sys / kernel / debug / gpio" wird "gpiochip0: GPIOs 0-53, parent: platform / 3f200000.gpio, pinctrl-bcm2835" geschrieben, und die SOC-GPIO-Adresse stammt von 3f200000. In dem Wissen, dass dies auch hier erwähnt wird, ist es ein einfaches Experiment, aber Linux ist noch vertrauter geworden.

Als nächstes möchte ich experimentieren, wie man den GPIO-Gerätetreiber in C-Sprache verwendet und wie man das Register direkt trifft.

Recommended Posts

Die Geschichte der Installation von raspi-config unter Ubuntu 18.04 und der Änderung der Grundeinstellungen von GPIO
Installieren Sie die neueste Version von Jenkins unter Ubuntu 16
[Ubuntu 20.04] Zeigt den Tag auf dem Datum / der Uhr an
20190803_Java & k8s on Azure Die Geschichte vom Festivalbesuch
Installieren Sie Docker und Docker-Compose in kürzester Zeit auf Ubuntu
Eine Geschichte über die Bekämpfung der Ubuntu-Fehler 0x80370114 und 0x80000000, um den Docker-Desktop mit wsl2 in Windows 10 Home zu aktivieren
Ubuntu (Mac-Stil) Grundeinstellungen
OpenMX unter Ubuntu 18.04.5 LTS installieren
So installieren und konfigurieren Sie das Überwachungstool "Graphite" unter Ubuntu
Installieren Sie Ubuntu20.04 auf RaspberryPi 4 und erstellen Sie Kubernetes, um den Container auszuführen
Eine Geschichte, in der Ubuntu aus völliger Unwissenheit in HDD eingelegt und yolov3 ausgeführt wird
Holen Sie sich die Beschleunigung und Ausrichtung des Weltkoordinatensystems auf Android
Veröffentlichte die No Todo App anstelle von Todo. .. (Und Ridgepole Notizen)