<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=84.152.188.152</id>
	<title>Mikrocontroller.net - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=84.152.188.152"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/84.152.188.152"/>
	<updated>2026-04-18T18:02:20Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Ports_benutzen_(GCC)&amp;diff=7541</id>
		<title>Ports benutzen (GCC)</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Ports_benutzen_(GCC)&amp;diff=7541"/>
		<updated>2005-05-27T21:47:26Z</updated>

		<summary type="html">&lt;p&gt;84.152.188.152: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Über die Ansteuerung der Schnittstellen unter Linux findet man im Internet überall etwas anderes, die einen sagen man soll die Schnittstellen über ihre I/O-Adresse (0x378,...) ansteuern.&lt;br /&gt;
&lt;br /&gt;
Hier bleiben zwei Fragen offen:&lt;br /&gt;
 - Kann ich USB-RS232 Adapter benutzen? -- Nein, USB-RS232 Adapter werden nicht über I/O-Adressen angesteuert.&lt;br /&gt;
 - Brauche ich root Berechtigung? -- Ja, ohne root Berechtigung kann man nicht auf I/O-Adressen zugreifen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die hier vorgestellte Methode ermöglicht folgendes:&lt;br /&gt;
 - zugriff auf Schnittstellen &#039;&#039;&#039;ohne&#039;&#039;&#039; root Berechtigung&lt;br /&gt;
 - zugriff auf &#039;&#039;&#039;alle&#039;&#039;&#039; parallelen oder seriellen Schnittstellen, egal ob USB oder nicht&lt;br /&gt;
 - portieren des Codes auf MacOSX, freebsd, ...&lt;br /&gt;
&lt;br /&gt;
==Allgemein==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zugriffsrechte:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit man auf die Schnittstellen zugreifen kann braucht man die passende berechtigung. Auf meinem Debian System sehen die Zugriffsrechte so aus:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
noway:/# l /dev/ttyUSB0 /dev/ttyS0 /dev/parport0&amp;lt;br&amp;gt;&lt;br /&gt;
crw-rw----    1 root     lp        99,   0 Feb 28 16:00 /dev/parport0&amp;lt;br&amp;gt;&lt;br /&gt;
crw-rw----    1 root     dialout    4,  64 Jan 22 01:11 /dev/ttyS0&amp;lt;br&amp;gt;&lt;br /&gt;
crw-rw----    1 root     dialout  188,   0 Jan 22 01:11 /dev/ttyUSB0&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit der user auf die Schnittstellen zugreifen kann, muss er in die Gruppen &amp;quot;lp&amp;quot; und &amp;quot;dialout&amp;quot; eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(&amp;quot;Bevor man auf irgendeinen IO-Port vom Userspace zugreifen kann, muss man ioperm(2) aufrufen. Dazu benötigt das Programm allerdings root- oder SUID-Root-Privilegien.&amp;quot; &amp;lt;- (nicht korrekt, geht ohne))&lt;br /&gt;
Ich programmiere seit 7 Jahren unter Linux und anderen Unix-Systemen (in C). Mir ist noch nie aufgefallen, dass Zugriffe direkt über IO-Ports ohne einen Aufruf von ioperm(2) oder ähnlichem gehen. Wäre nämlich ne ziemliche Sicherheitslücke! Da kannst die Sicherheit gleich vergessen ...&lt;br /&gt;
Zugriffe über Files in /dev sind natürlich was anderes, die laufen ja auch durch den Kernel, während der Kernel bei Direktzugriffen (nach vorherigem Aufruf eben von ioperm) keine Überprüfung der Daten vornimmt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Schnittstellen öffnen und schließen==&lt;br /&gt;
&lt;br /&gt;
Bevor man auf eine Schnittstelle zugreifen kann muss man diese öffnen:&amp;lt;br&amp;gt;&lt;br /&gt;
int port = open( &amp;quot;/dev/ttyS0&amp;quot;, O_RDWR );&lt;br /&gt;
&lt;br /&gt;
Die Schnittstellen die man hier öffnen kann sind unter anderem:&lt;br /&gt;
 - die RS-232&#039;s im system: /dev/ttyS0, /dev/ttyS1, ...&lt;br /&gt;
 - die USB-RS232&#039;s: /dev/ttyUSB0, /dev/ttyUSB1, ...&lt;br /&gt;
 - die Parallelen Schnittstellen: /dev/parport0, /dev/parport1, ...&lt;br /&gt;
&lt;br /&gt;
Wenn das Programm beendet wird sollte man diese auch wieder schliessen:&amp;lt;br&amp;gt;&lt;br /&gt;
close( port );&lt;br /&gt;
&lt;br /&gt;
==Serielle Schnittstelle==&lt;br /&gt;
&lt;br /&gt;
Die Serielle Schnittstelle besitzt 3 Ausgangspins (TX,RTS,CTS) und 4 Eingangspins (RX,DTR,DSR,RI).&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man diese Pins einzeln setzen und abfragen, oder sie als RS232 Schnittstelle benutzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pins einzeln verwenden:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Als RS232 verwenden:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==Parallele Schnittstelle==&lt;br /&gt;
&lt;br /&gt;
Die Parallele Schnittstelle besitzt 8 Datenleitungen und 9 Steuerleitungen, sowie 8 Massepins.&lt;br /&gt;
&lt;br /&gt;
Die Datenleitungen können Bidirektional verwendet werden, die Steuerleitungen haben aber eine festgelegte Richtung.&lt;br /&gt;
&lt;br /&gt;
...&lt;/div&gt;</summary>
		<author><name>84.152.188.152</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Ports_benutzen_(GCC)&amp;diff=7540</id>
		<title>Ports benutzen (GCC)</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Ports_benutzen_(GCC)&amp;diff=7540"/>
		<updated>2005-05-27T21:46:42Z</updated>

		<summary type="html">&lt;p&gt;84.152.188.152: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Über die Ansteuerung der Schnittstellen unter Linux findet man im Internet überall etwas anderes, die einen sagen man soll die Schnittstellen über ihre I/O-Adresse (0x378,...) ansteuern.&lt;br /&gt;
&lt;br /&gt;
Hier bleiben zwei Fragen offen:&lt;br /&gt;
 - Kann ich USB-RS232 Adapter benutzen? -- Nein, USB-RS232 Adapter werden nicht über I/O-Adressen angesteuert.&lt;br /&gt;
 - Brauche ich root Berechtigung? -- Ja, ohne root Berechtigung kann man nicht auf I/O-Adressen zugreifen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die hier vorgestellte Methode ermöglicht folgendes:&lt;br /&gt;
 - zugriff auf Schnittstellen &#039;&#039;&#039;ohne&#039;&#039;&#039; root Berechtigung&lt;br /&gt;
 - zugriff auf &#039;&#039;&#039;alle&#039;&#039;&#039; parallelen oder seriellen Schnittstellen, egal ob USB oder nicht&lt;br /&gt;
 - portieren des Codes auf MacOSX, freebsd, ...&lt;br /&gt;
&lt;br /&gt;
==Allgemein==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zugriffsrechte:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Damit man auf die Schnittstellen zugreifen kann braucht man die passende berechtigung. Auf meinem Debian System sehen die Zugriffsrechte so aus:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
noway:/# l /dev/ttyUSB0 /dev/ttyS0 /dev/parport0&amp;lt;br&amp;gt;&lt;br /&gt;
crw-rw----    1 root     lp        99,   0 Feb 28 16:00 /dev/parport0&amp;lt;br&amp;gt;&lt;br /&gt;
crw-rw----    1 root     dialout    4,  64 Jan 22 01:11 /dev/ttyS0&amp;lt;br&amp;gt;&lt;br /&gt;
crw-rw----    1 root     dialout  188,   0 Jan 22 01:11 /dev/ttyUSB0&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit der user auf die Schnittstellen zugreifen kann, muss er in die Gruppen &amp;quot;lp&amp;quot; und &amp;quot;dialout&amp;quot; eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(&amp;quot;Bevor man auf irgendeinen IO-Port vom Userspace zugreifen kann, muss man ioperm(2) aufrufen. Dazu benötigt das Programm allerdings root- oder SUID-Root-Privilegien.&amp;quot; &amp;lt;- (nicht korrekt, geht ohne))&lt;br /&gt;
Ich programmiere seit 7 Jahren unter Linux und anderen Unix-Systemen (in C). Mir ist noch nie aufgefallen, dass Zugriffe direkt über IO-Ports ohne einen Aufruf von ioperm(2) oder ähnlichem gehen. Zugriffe über Files in /dev sind natürlich was anderes, die laufen ja auch durch den Kernel, während der Kernel bei Direktzugriffen (nach vorherigem Aufruf eben von ioperm) keine Überprüfung der Daten vornimmt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Schnittstellen öffnen und schließen==&lt;br /&gt;
&lt;br /&gt;
Bevor man auf eine Schnittstelle zugreifen kann muss man diese öffnen:&amp;lt;br&amp;gt;&lt;br /&gt;
int port = open( &amp;quot;/dev/ttyS0&amp;quot;, O_RDWR );&lt;br /&gt;
&lt;br /&gt;
Die Schnittstellen die man hier öffnen kann sind unter anderem:&lt;br /&gt;
 - die RS-232&#039;s im system: /dev/ttyS0, /dev/ttyS1, ...&lt;br /&gt;
 - die USB-RS232&#039;s: /dev/ttyUSB0, /dev/ttyUSB1, ...&lt;br /&gt;
 - die Parallelen Schnittstellen: /dev/parport0, /dev/parport1, ...&lt;br /&gt;
&lt;br /&gt;
Wenn das Programm beendet wird sollte man diese auch wieder schliessen:&amp;lt;br&amp;gt;&lt;br /&gt;
close( port );&lt;br /&gt;
&lt;br /&gt;
==Serielle Schnittstelle==&lt;br /&gt;
&lt;br /&gt;
Die Serielle Schnittstelle besitzt 3 Ausgangspins (TX,RTS,CTS) und 4 Eingangspins (RX,DTR,DSR,RI).&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man diese Pins einzeln setzen und abfragen, oder sie als RS232 Schnittstelle benutzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pins einzeln verwenden:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Als RS232 verwenden:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==Parallele Schnittstelle==&lt;br /&gt;
&lt;br /&gt;
Die Parallele Schnittstelle besitzt 8 Datenleitungen und 9 Steuerleitungen, sowie 8 Massepins.&lt;br /&gt;
&lt;br /&gt;
Die Datenleitungen können Bidirektional verwendet werden, die Steuerleitungen haben aber eine festgelegte Richtung.&lt;br /&gt;
&lt;br /&gt;
...&lt;/div&gt;</summary>
		<author><name>84.152.188.152</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Ports_benutzen_(GCC)&amp;diff=7529</id>
		<title>Ports benutzen (GCC)</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Ports_benutzen_(GCC)&amp;diff=7529"/>
		<updated>2005-05-27T13:38:10Z</updated>

		<summary type="html">&lt;p&gt;84.152.188.152: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Über die Ansteuerung der Schnittstellen unter Linux findet man im Internet überall etwas anderes, die einen sagen man soll die Schnittstellen über ihre I/O-Adresse (0x378,...) ansteuern.&lt;br /&gt;
&lt;br /&gt;
Das hat einen großen Nachteil: Was ist mit USB-RS232 Adaptern?&lt;br /&gt;
&lt;br /&gt;
Unter Linux gibt es aber die Möglichkeit alle Schnittstellen (rs232@ISA, 232@PCI, 232@USB, ...) anzusprechen, diese möchte ich hier beschreiben.&lt;br /&gt;
&lt;br /&gt;
==Allgemein==&lt;br /&gt;
Bevor man auf irgendeinen IO-Port vom Userspace zugreifen kann, muss man ioperm(2) aufrufen. Dazu benötigt das Programm allerdings root- oder SUID-Root-Privilegien.&lt;br /&gt;
&lt;br /&gt;
==Serielle Schnittstelle==&lt;br /&gt;
&lt;br /&gt;
Die Serielle Schnittstelle besitzt 3 Ausgangspins (TX,RTS,CTS) und 4 Eingangspins (RX,DTR,DSR,RI).&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man diese Pins einzeln setzen und abfragen, oder sie als RS232 Schnittstelle benutzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pins einzeln verwenden:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Als RS232 verwenden:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==Parallele Schnittstelle==&lt;br /&gt;
&lt;br /&gt;
Die Parallele Schnittstelle besitzt 8 Datenleitungen und 9 Steuerleitungen, sowie 8 Massepins.&lt;br /&gt;
&lt;br /&gt;
Die Datenleitungen können Bidirektional verwendet werden, die Steuerleitungen haben aber eine festgelegte Richtung.&lt;br /&gt;
&lt;br /&gt;
...&lt;/div&gt;</summary>
		<author><name>84.152.188.152</name></author>
	</entry>
</feed>