Οδηγός Ασύρματου Δικτύου Αισθητήρων στο Λειτουργικό Σύστημα Linux

Σχετικά έγγραφα
Οδηγός Ασύρματου ικτύου Αισθητήρων στο Λειτουργικό Σύστημα Linux

Οδηγός Ασύρματου Δικτύου Αισθητήρων στο Λειτουργικό Σύστημα Linux

Οδηγός Ασύρματου Δικτύου Αισθητήρων στο Λειτουργικό Σύστημα Linux

Οδηγός Ασύρµατου ικτύου Αισθητήρων στο Λειτουργικό Σύστηµα Linux

Οδηγός Ασύρματου Δικτύου Αισθητήρων στο Λειτουργικό Σύστημα Linux

ιεργασία Α Πυρήνας Linux Υλικό

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος

Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος

Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος

Σχεδίαση και Υλοποίηση Μηχανισμού Μεταφοράς Δεδομένων από Συσκευές Αποθήκευσης σε Δίκτυο Myrinet, Χωρίς τη Μεσολάβηση της Ιεραρχίας Μνήμης

Εργαστήριο Λειτουργικών Συστήματων 8ο εξάμηνο, Ακαδημαϊκή περίοδος

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος

Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος

Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος

Εισαγωγή στον προγραμματισμό στον πυρήνα του Linux

Εργαστήριο Λειτουργικών Συστήματων 8ο εξάμηνο, Ακαδημαϊκή περίοδος

Εικονική Μνήμη (1/2)

Εισαγωγή στην Πληροφορική

Εργαστήριο Λειτουργικών Συστημάτων. File Systems

Εισαγωγή στην Πληροφορική

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΕΙΣΑΓΩΓΗ

Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος

Χρονοδρομολογητής Κυκλικής Επαναφοράς

Οργάνωση Υπολογιστών (IΙI)

Λειτουργικά Συστήματα (Λ/Σ)

Λιβανός Γιώργος Εξάμηνο 2017Β

Εργαστήριο Λειτουργικών Συστημάτων. Minix Overview

Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ. Μηχανισμός Διαδιεργασιακής Επικοινωνίας Μηδενικών Αντιγράφων για το ΛΣ Linux με Δωρεά Σελίδων Εικονικής Μνήμης

Κρυπτογραφική συσκευή VirtIO για QEMU-KVM

Οργάνωση ενός σύγχρονου Υπολογιστικού Συστήματος ή Ηλεκτρονικού Υπολογιστή (Η/Υ) Τα σύγχρονα συστήματα Η/Υ έχουν την παρακάτω οργάνωση:

Λειτουργικά Συστήματα Ι. Συστήματα Εισόδου/Εξόδου (I/O --- Input/Output)

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Μάθημα 6 ο. Χρονοδρομολόγηση (Scheduling)

Κεφάλαιο 3 Λειτουργικά Συστήματα Β ΕΠΑΛ

Εισαγωγή Χαρακτηριστικά του πυρήνα του Linux Ο ρόλος του λειτουργικού συστήματος...7

Εισαγωγή στα Λειτουργικά συστήματα Ι. Καθηγητής Κώστας Αναγνωστόπουλος

Ειδικό Τεύχος : Linux και Ηχος. Η Υποδοµή

ΚΕΦΑΛΑΙΟ 3: Λειτουργικά Συστήµατα

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

ΔΙΑΧΥΤΑ ΚΑΙ ΕΝΣΩΜΑΤΩΜΕΝΑ ΣΥΣΤΗΜΑΤΑ

Λειτουργικά Συστήματα (ΗΥ321)

Εικονική Μνήμη (Virtual Μemory)

Επιτεύγµατα των Λ.Σ.

ΛΟΓΙΣΜΙΚΟ (software)

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών

Μάθημα 10 ο ΔΙΑΧΕΙΡΙΣΗ ΕΙΣΟΔΟΥ ΕΞΟΔΟΥ (INPUT/OUTPUT)

PROXY SERVER. Άριστη πύλη διαχωρισμού μεταξύ του εσωτερικού δικτύου και του Internet.

Περιγραφή και Έλεγχος ιεργασιών

Διαχείριση Κύριας Μνήμης

Κεφάλαιο 4 Λογισμικό συστήματος. Εφαρμογές Πληροφορικής Κεφ.4 Καραμαούνας Πολύκαρπος 1

Βασικές συσκευές Ε/Ε. Είσοδος Έξοδος στον υπολογιστή. Ένα τυπικό υπολογιστικό σύστημα σήμερα. Οργάνωση Υπολογιστών (IΙI) Μ.

Εργαστήριο Λειτουργικών Συστήματων 8ο εξάμηνο, Ακαδημαϊκή περίοδος Οδηγός εργαστηριακής άσκησης Συσκευή κρυπτογράφησης για QEMU-KVM

Συστήματα Αρχείων (Σ.Α.)

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΟΡΓΑΝΩΣΗ Η/Υ

Εικονική Μνήμη (Virtual Μemory)

Λειτουργικά Συστήματα. Εισαγωγή

Λειτουργικά Συστήματα

Εισαγωγή εκτελέσιμου κώδικα σε διεργασίες

Αρχιτεκτονική Υπολογιστών

Unix: Εντολές, οργάνωση και χειρισµός αρχείων, διεργασίες

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στο Λ.Σ. UNIX

2. Σκοποί και Λειτουργίες των ΛΣ. Λειτουργικά Συστήματα Η/Υ. Περίληψη. Ι. Προστασία Υλικού ΚΕΦΑΛΑΙΟ 2 - ΕΞΕΛΙΞΗ ΚΑΙ ΣΚΟΠΟΙ ΛΣ

ΗΛΕΚΤΡΟΝΙΚΟΙ ΥΠΟΛΟΓΙΣΤΕΣ

Κεφάλαιο 3. Διδακτικοί Στόχοι

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

Διαφορές single-processor αρχιτεκτονικών και SoCs

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

Λειτουργικά Συστήματα Ι. Καθηγήτρια Παπαδάκη Αναστασία

Λειτουργικά Συστήματα

Κεφάλαιο 1.6: Συσκευές αποθήκευσης

Λειτουργικά Συστήματα Κεφάλαιο 2 Οργάνωση Συστήματος Αρχείων 2.1 Διαχείριση Αρχείων και Σύστημα Αρχείων(File System)

Λειτουργικά Συστήματα. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Προγραμματισμός με BSD Sockets σε περιβάλλον Linux

Βασικές έννοιες. Κατανεμημένα Συστήματα 1

Ενότητα 3 - Θέματα Εφαρμοσμένης Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 5 - Editor

Εργαστήριο Λειτουργικών Συστημάτων Ακ. Έτος Άσκηση 3

Αρχεία. Προγραμματισμός II 1

Λειτουργικά Συστήματα Ι. Καθηγήτρια Παπαδάκη Αναστασία

Αρχεία. Προγραμματισμός II 1

Μεταφραστής (Compiler)

Υποστήριξη Λ.Σ. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Ενότητα Β1 κεφ.2 ο «Σο Εσωτερικό του Τπολογιστή»

Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Εργαλεία ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ FILE & PROCESS HANDLING

Το εσωτερικό του Υπολογιστή. Χρήστος Ρέτσας 1

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ

Ενσωµατωµένα Υπολογιστικά Συστήµατα (Embedded Computer Systems)

Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων. Συγχρονισμός

Εισαγωγικά & Βασικές Έννοιες

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων. Συγχρονισμός

Transcript:

Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων Οδηγός Ασύρματου Δικτύου Αισθητήρων στο Λειτουργικό Σύστημα Linux Εργαστήριο Λειτουργικών Συστημάτων 2η εργαστηριακή άσκηση Μάρτιος 2017

Οργάνωση ενός σύγχρονου Λ.Σ. Διεργασία 1 Διεργασία 2 Διεργασία 3 Υπηρεσίες του πυρήνα Οδηγοί συσκευών Εντολές I/O Υλικό Χώρος χρήστη απομονωμένη εκτέλεση χρήση κλήσεων συστήματος Χώρος πυρήνα απεριόριστη πρόσβαση στη μνήμη ελεύθερη επικοινωνία με το υλικό

Οργάνωση ενός σύγχρονου Λ.Σ. Διεργασία 1 Διεργασία 2 Διεργασία 3 κλήσεις συστήματος Υπηρεσίες του πυρήνα Οδηγοί συσκευών Εντολές I/O Υλικό Χώρος χρήστη απομονωμένη εκτέλεση χρήση κλήσεων συστήματος Χώρος πυρήνα απεριόριστη πρόσβαση στη μνήμη ελεύθερη επικοινωνία με το υλικό

Ο πυρήνας του Linux Διαχείριση διεργασιών χρονοδρομολόγηση σε CPUs Διαχείριση μνήμης Διαδικτύωση (TCP/IP) Υποστήριξη συστημάτων αρχείων Διαχείριση συσκευών (Device Drivers)

Kernel modules Τμήματα κώδικα Επέκταση των δυνατοτήτων του πυρήνα Οδηγοί συσκευής, συστήματα αρχείων Δυναμική εισαγωγή / αφαίρεση Ενώ ο πυρήνας εκτελείται Απαιτούνται δικαιώματα root Εκτέλεση σε kernelspace

Οδηγοί συσκευής Διεργασία 1 Διεργασία 2 Διεργασία 3 κλήσεις συστήματος Πυρήνας Linux εντολές I/O

Οδηγοί συσκευής Διεργασία 1 Διεργασία 2 Διεργασία 3 κλήσεις συστήματος Πυρήνας Linux Οδηγός συσκευής εντολές I/O

Οδηγοί συσκευής Διεργασία 1 Διεργασία 2 Διεργασία 3 κλήσεις συστήματος Πυρήνας Linux Οδηγός συσκευής εντολές I/O Απόκρυψη των λεπτομερειών Καθορισμένο interface με τον πυρήνα Δυνατότητα δυναμικής εισαγωγής ως module Εφαρμογές ανεξάρτητες από το hardware

sensor0 Driver για ένα πραγματικό σύστημα

Μα υπάρχει ήδη driver! Application /dev/ttyusb1 TTY Core layer Standard line discipline Kernel Serial over USB driver Hardware Wireless network base station

Μα υπάρχει ήδη driver! Application /dev/ttyusb1 TTY Core layer Standard line discipline Kernel Serial over USB driver Hardware Wireless network base station

Ναι, αλλά Όλα τα πακέτα δεδομένων, χωρίς διάκριση, στο /dev/ttyusb1 Για μόνο μία διεργασία Δεν υπάρχει μηχανισμός για λεπτομερή ανάθεση δικαιωμάτων πρόσβασης ανά χρήστη, ανά αισθητήρα, ανά μέτρηση ανάγκη για διακριτή αντιμετώπιση

Οπότε Lunix:TNG driver για τον πυρήνα του Linux Χωριστό αρχείο συσκευής ανά αισθητήρα και μέτρηση /dev/lunix0-{batt, temp, light} /dev/lunix1-{batt, temp, light} Ταυτόχρονη πρόσβαση από πολλές διεργασίες Περιορισμός δικαιωμάτων ανά αρχείο

Υπό κατασκευή σύστημα Application /dev/ttyusb1 TTY Core layer Standard line disc. Kernel Serial over USB driver Hardware Wireless network base station

Υπό κατασκευή σύστημα /dev/ttyusb1 Application /dev/lunix0-batt, /dev/lunix1-temp TTY Core layer Standard line disc. Kernel Serial over USB driver Hardware Wireless network base station

Υπό κατασκευή σύστημα /dev/ttyusb1 Application /dev/lunix0-batt, /dev/lunix1-temp Standard line disc. TTY Core layer Serial over USB driver Lunix:TNG character dev Kernel Wireless network base station Hardware

Υπό κατασκευή σύστημα /dev/ttyusb1 Application /dev/lunix0-batt, /dev/lunix1-temp Standard line disc. TTY Core layer Serial over USB driver Lunix:TNG character dev Lunix:TNG sensor buffers Kernel Wireless network base station Hardware

Υπό κατασκευή σύστημα /dev/ttyusb1 Application /dev/lunix0-batt, /dev/lunix1-temp Standard line disc. TTY Core layer Lunix:TNG line discipline Serial over USB driver Wireless network base station Lunix:TNG character dev Lunix:TNG sensor buffers Lunix:TNG protocol proc. Kernel Hardware

Υπό κατασκευή σύστημα Application TTY Core layer Lunix:TNG line discipline Serial over USB driver Wireless network base station /dev/lunix0-batt, /dev/lunix1-temp Lunix:TNG character dev Lunix:TNG sensor buffers Lunix:TNG protocol proc. Kernel Hardware

Υπό κατασκευή σύστημα Application TTY Core layer Lunix:TNG line discipline Serial over USB driver Wireless network base station /dev/lunix0-batt, /dev/lunix1-temp Lunix:TNG character dev Lunix:TNG sensor buffers Lunix:TNG protocol proc. Kernel Hardware

Οδηγοί συσκευών στο Linux Συσκευές χαρακτήρων τερματικά, σειριακές/παράλληλες θύρες, κάρτες ήχου Συσκευές block Σκληροί δίσκοι, CD-ROM, δισκέτες Συσκευές δικτύου Κάρτες δικτύου, PPP

Παράδειγμα χρήσης οδηγού (1) user@utopia:~/lunix-tng$ make gcc -Wall -o mk_lookup_tables mk_lookup_tables.c -lm./mk_lookup_tables >lunix-lookup.h make -C /lib/modules/2.6.25/build M=/home/user/lunix-tng modules make[1]: Entering directory `/usr/src/linux-source-2.6.25' CC [M] /home/user/lunix-tng/lunix-module.o CC [M] /home/user/lunix-tng/lunix-chrdev.o CC [M] /home/user/lunix-tng/lunix-ldisc.o CC [M] /home/user/lunix-tng/lunix-protocol.o CC [M] /home/user/lunix-tng/lunix-sensors.o LD [M] /home/user/lunix-tng/lunix.o Building modules, stage 2. MODPOST 1 modules CC /home/user/lunix-tng/lunix.mod.o LD [M] /home/user/lunix-tng/lunix.ko make[1]: Leaving directory `/usr/src/linux-source-2.6.25' gcc -Wall -o lunix-attach lunix-attach.c user@utopia:~/lunix-tng$ make

Παράδειγμα χρήσης οδηγού (2) user@utopia:~/lunix-tng$ su Password: utopia:~# cd ~user/lunix-tng utopia:/home/user/lunix-tng# insmod./lunix.ko utopia:/home/user/lunix-tng#./lunix_dev_nodes.sh utopia:/home/user/lunix-tng#./lunix-attach /dev/ttyusb1 tty_open: looking for lock tty_open: trying to open /dev/ttyusb1 tty_open: /dev/ttyusb1 (fd=3) Line discipline set on /dev/ttyusb1, press ^C to release the TTY... Οπότε μετά: user@utopia:~$ cat /dev/lunix2-temp 27.791 27.791 27.693 27.791 ^C

Υπό κατασκευή σύστημα /dev/ttyusb1 Standard line disc. Application TTY Core layer Lunix:TNG line discipline Serial over USB driver Wireless network base station Application /dev/lunix0-batt, /dev/lunix1-temp Lunix:TNG character dev Lunix:TNG sensor buffers Lunix:TNG protocol proc. Kernel Hardware

Υπό κατασκευή σύστημα /dev/ttyusb1 Standard line disc. Application TTY Core layer Lunix:TNG line discipline Serial over USB driver Application /dev/lunix0-batt, /dev/lunix1-temp Lunix:TNG character dev Lunix:TNG sensor buffers Lunix:TNG protocol proc. Kernel Hardware Wireless network base station Στρώμα συσκευής χαρακτήρων Στρώμα συλλογής δεδομένων

Στρώμα συσκευής χαρακτήρων Application /dev/lunix0-batt, /dev/lunix1-temp Lunix:TNG character dev Lunix:TNG sensor buffers Kernel Hardware

Τα πάντα είναι αρχεία $ ls l /dev crw-rw---- 1 root audio 14, 3 Jul 5 2000 /dev/dsp crw-rw-rw- 1 root root 1, 3 Jul 21 2002 /dev/null crw------- 1 root root 4, 1 Apr 22 18:10 /dev/tty1 crw-rw---- 1 root dialout 4, 64 Jul 5 2000 /dev/ttys0 crw-rw-rw- 1 root root 1, 5 Jul 21 2002 /dev/zero brw-rw---- 1 root disk 3, 0 Jul 5 2000 /dev/hda brw-rw---- 1 root floppy 2, 0 Jul 5 2000 /dev/fd0 Ειδικά αρχεία, πύλες πρόσβασης σε συσκευές Κατάλογος /dev Κλήσεις συστήματος στο ειδικό αρχείο open, close, read, write, lseek, ioctl

Διεπαφή με τον πυρήνα του Linux (1) $ ls l /dev crw-rw---- 1 root audio 14, 3 Jul 5 2000 /dev/dsp crw-rw-rw- 1 root root 1, 3 Jul 21 2002 /dev/null crw------- 1 root root 4, 1 Apr 22 18:10 /dev/tty1 crw-rw---- 1 root dialout 4, 64 Jul 5 2000 /dev/ttys0 crw-rw-rw- 1 root root 1, 5 Jul 21 2002 /dev/zero brw-rw---- 1 root disk 3, 0 Jul 5 2000 /dev/hda brw-rw---- 1 root floppy 2, 0 Jul 5 2000 /dev/fd0 Major / minor numbers

Διεπαφή με τον πυρήνα του Linux (1) $ ls l /dev crw-rw---- 1 root audio 14, 3 Jul 5 2000 /dev/dsp crw-rw-rw- 1 root root 1, 3 Jul 21 2002 /dev/null crw------- 1 root root 4, 1 Apr 22 18:10 /dev/tty1 crw-rw---- 1 root dialout 4, 64 Jul 5 2000 /dev/ttys0 crw-rw-rw- 1 root root 1, 5 Jul 21 2002 /dev/zero brw-rw---- 1 root disk 3, 0 Jul 5 2000 /dev/hda brw-rw---- 1 root floppy 2, 0 Jul 5 2000 /dev/fd0 Major / minor numbers major: Είδος συσκευής, καθορίζει τον οδηγό

Διεπαφή με τον πυρήνα του Linux (1) $ ls l /dev crw-rw---- 1 root audio 14, 3 Jul 5 2000 /dev/dsp crw-rw-rw- 1 root root 1, 3 Jul 21 2002 /dev/null crw------- 1 root root 4, 1 Apr 22 18:10 /dev/tty1 crw-rw---- 1 root dialout 4, 64 Jul 5 2000 /dev/ttys0 crw-rw-rw- 1 root root 1, 5 Jul 21 2002 /dev/zero brw-rw---- 1 root disk 3, 0 Jul 5 2000 /dev/hda brw-rw---- 1 root floppy 2, 0 Jul 5 2000 /dev/fd0 Major / minor numbers major: Είδος συσκευής, καθορίζει τον οδηγό

Διεπαφή με τον πυρήνα του Linux (1) $ ls l /dev crw-rw---- 1 root audio 14, 3 Jul 5 2000 /dev/dsp crw-rw-rw- 1 root root 1, 3 Jul 21 2002 /dev/null crw------- 1 root root 4, 1 Apr 22 18:10 /dev/tty1 crw-rw---- 1 root dialout 4, 64 Jul 5 2000 /dev/ttys0 crw-rw-rw- 1 root root 1, 5 Jul 21 2002 /dev/zero brw-rw---- 1 root disk 3, 0 Jul 5 2000 /dev/hda brw-rw---- 1 root floppy 2, 0 Jul 5 2000 /dev/fd0 Major / minor numbers major: Είδος συσκευής, καθορίζει τον οδηγό minor: Καθορίζει τη συσκευή, πχ. αριθμός σειριακής θύρας

Διεπαφή με τον πυρήνα του Linux (1) $ ls l /dev crw-rw---- 1 root audio 14, 3 Jul 5 2000 /dev/dsp crw-rw-rw- 1 root root 1, 3 Jul 21 2002 /dev/null crw------- 1 root root 4, 1 Apr 22 18:10 /dev/tty1 crw-rw---- 1 root dialout 4, 64 Jul 5 2000 /dev/ttys0 crw-rw-rw- 1 root root 1, 5 Jul 21 2002 /dev/zero brw-rw---- 1 root disk 3, 0 Jul 5 2000 /dev/hda brw-rw---- 1 root floppy 2, 0 Jul 5 2000 /dev/fd0 Major / minor numbers major: Είδος συσκευής, καθορίζει τον οδηγό minor: Καθορίζει τη συσκευή, πχ. αριθμός σειριακής θύρας Δέσμευση major number με register_chrdev_region

Διεπαφή με τον πυρήνα του Linux (2) int (*open) (struct inode *, struct file *); void (*release) (struct inode *, struct file *); ssize_t (*read) (struct file *, char *, size_t, loff_t); ssize_t (*write) (struct file *, const char *, size_t, loff_t); loff_t (*llseek) (struct file *, loff_t, int); int (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); Υπηρεσίες οδηγού συσκευής χαρακτήρων Υλοποιούν κλήσεις συστήματος Εκτελούνται από τον πυρήνα Κατά την πρόσβαση στο ειδικό αρχείο Μέσω της δομής file_operations

Διεπαφή με τον πυρήνα του Linux (3) μέθοδος open μέθοδος read μέθοδος write μέθοδος llseek μέθοδος ioctl.. δομή file_operations για τον οδηγό lunix_open lunix_read lunix_write lunix_llseek lunix_ioctl κώδικας οδηγού συσκευής Δομή file_operations Για κάθε λειτουργία, δείκτης σε αντίστοιχη συνάρτηση Μία για κάθε major number Δήλωση κατά την καταχώρηση νέας συσκευής χαρακτήρων (cdev_add)

Διεπαφή με τον πυρήνα του Linux (4)

Διεπαφή με τον πυρήνα του Linux (4) διεργασία χρήστη

Διεπαφή με τον πυρήνα του Linux (4) διεργασία χρήστη open( /dev/lunix ) /dev/lunix

Διεπαφή με τον πυρήνα του Linux (4) διεργασία χρήστη open( /dev/lunix ) /dev/lunix major =?

Διεπαφή με τον πυρήνα του Linux (4) διεργασία χρήστη /dev/lunix open( /dev/lunix ) major =? Συλλογή από δείκτες σε συναρτήσεις δομή file_operations για τον οδηγό lunix_open lunix_read lunix_write lunix_llseek lunix_ioctl κώδικας οδηγού συσκευής

Διεπαφή με τον πυρήνα του Linux (4) διεργασία χρήστη open( /dev/lunix ) /dev/lunix major =? Δομή file Συλλογή από δείκτες σε συναρτήσεις δομή file_operations για τον οδηγό lunix_open lunix_read lunix_write lunix_llseek lunix_ioctl κώδικας οδηγού συσκευής

Διεπαφή με τον πυρήνα του Linux (4) διεργασία χρήστη open( /dev/lunix ) /dev/lunix major =? read(fd, ) Δομή file Συλλογή από δείκτες σε συναρτήσεις δομή file_operations για τον οδηγό lunix_open lunix_read lunix_write lunix_llseek lunix_ioctl κώδικας οδηγού συσκευής

Στρώμα συλλογής δεδομένων /dev/ttyusb1 Standard line disc. Application TTY Core layer Lunix:TNG line discipline Serial over USB driver Wireless network base station Application /dev/lunix0-batt, /dev/lunix1-temp Lunix:TNG character dev Lunix:TNG sensor buffers Lunix:TNG protocol proc. Kernel Hardware

Στρώμα συλλογής δεδομένων Standard line disc. Lunix:TNG line discipline Lunix:TNG sensor buffers Kernel Serial over USB driver Lunix:TNG protocol proc. Hardware Wireless network base station

Lunix:TNG line discipline Application /dev/ttyusb1 TTY Core (struct file_operations *) Standard line discipline (struct tty_ldisc_ops *) Kernel Serial over USB driver (struct tty_driver *) Serial Device Hardware data transfer function call

Lunix:TNG line discipline Application /dev/ttyusb1 TTY Core (struct file_operations *) Standard line discipline (struct tty_ldisc_ops *) Serial over USB driver (struct tty_driver *) Serial Device flip buffer interrupt Incoming data Kernel Hardware data transfer function call

Lunix:TNG line discipline Application /dev/ttyusb1 TTY Core (struct file_operations *) Standard line discipline (struct tty_ldisc_ops *) tty buffer ldisc receive_buf Kernel Serial over USB driver (struct tty_driver *) Serial Device flip buffer handler interrupt Incoming data Hardware data transfer function call

Lunix:TNG line discipline Application user buffer read() /dev/ttyusb1 TTY Core (struct file_operations *) tty_read Standard line discipline (struct tty_ldisc_ops *) tty buffer ldisc read ldisc receive_buf Kernel Serial over USB driver (struct tty_driver *) Serial Device flip buffer handler interrupt Incoming data Hardware data transfer function call

Lunix:TNG line discipline Application user buffer read() /dev/ttyusb1 TTY Core (struct file_operations *) tty_read Standard line discipline (struct tty_ldisc_ops *) tty buffer ldisc read ldisc receive_buf Kernel Serial over USB driver (struct tty_driver *) Serial Device flip buffer handler interrupt Incoming data Hardware data transfer function call

Lunix:TNG line discipline Application user buffer read() /dev/ttyusb1 TTY Core (struct file_operations *) tty_read Standard line discipline (struct tty_ldisc_ops *) Serial over USB driver (struct tty_driver *) Serial Device tty buffer flip buffer ldisc read ldisc receive_buf handler interrupt Incoming data Kernel to Lunix:TNG protocol & sensors Hardware data transfer function call

Lunix:TNG line discipline TTY Core (struct file_operations *) Standard line discipline (struct tty_ldisc_ops *) Serial over USB driver (struct tty_driver *) Serial Device tty buffer flip buffer ldisc receive_buf handler interrupt Incoming data Kernel to Lunix:TNG protocol & sensors Hardware data transfer function call

Στρώμα συλλογής δεδομένων (2) Standard line disc. Lunix:TNG line discipline Lunix:TNG sensor buffers Kernel Serial over USB driver Lunix:TNG protocol proc. Hardware Wireless network base station

Στρώμα συλλογής δεδομένων (2) Standard line disc. Lunix:TNG line discipline Lunix:TNG sensor buffers Kernel Serial over USB driver Lunix:TNG protocol proc. Hardware Wireless network base station Επεξεργασία πρωτοκόλλου Αποθήκευση σε απομονωτές

Ζητήματα Υλοποίησης (1) Πρόσβαση σε δεδομένα χώρου χρήστη copy_to_user(), copy_from_user() Πώς πέφτουν οι διεργασίες για ύπνο; Μπλοκάρισμα διεργασιών σε ουρές αναμονής Δεν είναι έτοιμες προς εκτέλεση, δεν καταναλώνουν χρόνο CPU Κρίσιμα τμήματα στον κώδικα του πυρήνα Σημαφόροι, spinlocks

Ζητήματα Υλοποίησης (2) Η read() είναι το κέντρο της υλοποίησης Κρατάει την μορφοποιημένη τιμή σε προσωρινό χώρο μνήμης Δίνει από εκεί bytes ανάλογα με το f_pos Όταν το f_pos είναι μηδέν τι γίνεται; Υπάρχουν φρέσκα δεδομένα; Χρήση timestamps Αν δεν υπάρχουν πρέπει να πέφτει για ύπνο Όταν έρθουν ξυπνάει και τα επιστρέφει

Ζητήματα Υλοποίησης (2) Η read() είναι το κέντρο της υλοποίησης Κρατάει την μορφοποιημένη τιμή σε προσωρινό χώρο μνήμης Δίνει από εκεί bytes ανάλογα με το f_pos Όταν το f_pos είναι μηδέν τι γίνεται; Υπάρχουν φρέσκα δεδομένα; Χρήση timestamps Αν δεν υπάρχουν πρέπει να πέφτει για ύπνο Όταν έρθουν ξυπνάει και τα επιστρέφει

Ζητήματα Υλοποίησης (2) Η read() είναι το κέντρο της υλοποίησης Κρατάει την μορφοποιημένη τιμή σε προσωρινό χώρο μνήμης Δίνει από εκεί bytes ανάλογα με το f_pos Όταν το f_pos είναι μηδέν τι γίνεται; Υπάρχουν φρέσκα δεδομένα; Χρήση timestamps Αν δεν υπάρχουν πρέπει να πέφτει για ύπνο Όταν έρθουν ξυπνάει και τα επιστρέφει 2 7. 3 2 9

Ζητήματα Υλοποίησης (2) Η read() είναι το κέντρο της υλοποίησης Κρατάει την μορφοποιημένη τιμή σε προσωρινό χώρο μνήμης Δίνει από εκεί bytes ανάλογα με το f_pos Όταν το f_pos είναι μηδέν τι γίνεται; Υπάρχουν φρέσκα δεδομένα; Χρήση timestamps Αν δεν υπάρχουν πρέπει να πέφτει για ύπνο Όταν έρθουν ξυπνάει και τα επιστρέφει

Ζητήματα Υλοποίησης (3) /dev/ttyusb1 Standard line disc. Application TTY Core layer Lunix:TNG line discipline Serial over USB driver Wireless network base station Application /dev/lunix0-batt, /dev/lunix1-temp Lunix:TNG character dev Lunix:TNG sensor buffers Lunix:TNG protocol proc. Kernel Hardware

Ζητήματα Υλοποίησης (3) /dev/ttyusb1 Standard line disc. Application TTY Core layer Lunix:TNG line discipline Serial over USB driver Wireless network base station Application /dev/lunix0-batt, /dev/lunix1-temp Lunix:TNG character dev Lunix:TNG sensor buffers Lunix:TNG protocol proc. Ζ Ζ z Kernel Hardware

Ζητήματα Υλοποίησης (3) /dev/ttyusb1 Standard line disc. Application TTY Core layer Lunix:TNG line discipline Serial over USB driver Wireless network base station Application /dev/lunix0-batt, /dev/lunix1-temp Lunix:TNG character dev Lunix:TNG sensor buffers Lunix:TNG protocol proc. Ζ Ζ z Kernel Hardware

Ζητήματα Υλοποίησης (3) /dev/ttyusb1 Standard line disc. Application TTY Core layer Lunix:TNG line discipline Serial over USB driver Wireless network base station Application /dev/lunix0-batt, /dev/lunix1-temp Lunix:TNG character dev Lunix:TNG sensor buffers Lunix:TNG protocol proc. Kernel Hardware

Ζητήματα Υλοποίησης (3) /dev/ttyusb1 Standard line disc. Application TTY Core layer Lunix:TNG line discipline Serial over USB driver Wireless network base station Application /dev/lunix0-batt, /dev/lunix1-temp Lunix:TNG character dev Lunix:TNG sensor buffers Lunix:TNG protocol proc. Kernel Hardware

Πρακτικά Ζητήματα Υλοποίηση μέσα σε εικονική μηχανή root privilege σε Debian, σε μηχανή QEMU-KVM Από πού ξεκινάω; make στον έτοιμο κώδικα, ανάγνωση του lunixsensors.c, προσθήκες στα lunix-chrdev.{h,c} Σας δίνεται σκελετός με σχόλια Kernel logging, printk, /var/log/kern.log Linux Cross Reference (LXR)

Έλεγχος και πιθανές επεκτάσεις Έλεγχος σωστής λειτουργίας Από userspace, με ταυτόχρονα cat και με άλλα εργαλεία, π.χ. dd Πιθανές επεκτάσεις Υποστήριξη ioctl() για raw / cooked modes Υποστήριξη memory-mapped I/O με mmap() space πρόγραμμα για καταγραφή και παρουσίαση μετρήσεων

Ιστοσελίδα λίστα του μαθήματος http://www.cslab.ece.ntua.gr/courses /compsyslab/ os-lab@lists.cslab.ece.ntua.gr

Βιβλιογραφία Linux Device Drivers, 3nd Edition, Jonathan Corbet, Alessandro Rubini, and Greg Kroah- Hartman. http://lwn.net/kernel/ld D3