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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Σύντομη εισαγωγή στο εργαστήριο

Εγκατάσταση του PiNet για διαχείριση εργαστηρίου με Raspberry Pi. Συγγραφέας: Τριχόπουλος Γιώργος Δεκέμβριος 2016

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

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

Προγραμματισμός Ι. Εργαστήριο 1 ο Περιβάλλον Εργασίας. Νικόλαος Δ. Τσελίκας Κυριακή Θ. Σεκλού

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

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

2.1. Οι λογαριασµοί χρηστών Σύνδεση (login) και αποσύνδεση (logout)

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

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

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

MIPS Interactive Learning Environment. MILE Simulator. Version 1.0. User's Manual

Προγραμματισμός Διαχείρισης Συστημάτων ΙΙ

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

ΠΡΟΒΛΗΜΑ ΕΠΕΓΕΡΓΑΣΙΑ. (Είναι οι σκέψεις και οι πράξεις που κάνουμε για να λυθεί το πρόβλημα) ΕΙΣΟΔΟΥ - ΕΞΟΔΟΥ

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

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Σύντομη εισαγωγή στο λειτουργικό σύστημα Linux

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

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

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

Βοηθητικό πρόγραµµα Setup

Εικονικοποίηση. Αρχιτεκτονική Υπολογιστών 5ο Εξάμηνο,

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

Λειτουργικά. Τεχνολογικό Εκπαιδευτικό Ίδρυμα Δυτικής Μακεδονίας Σιώζιος Κων/νος - Πληροφορική Ι

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

MICROBOT SERVER MICROBOT MONITOR ΕΦΑΡΜΟΓΕΣ ΕΛΕΓΧΟΥ ΚΑΙ ΠΑΡΑΚΟΛΟΥΘΗΣΗΣ ΓΙΑ ΣΥΣΤΗΜΑΤΑ MICROBOT

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

Σκοπός Μαθήματος. Λειτουργικά Συστήματα Η/Υ. Γενικές Πληροφορίες. Στόχοι Μαθήματος ΚΕΦΑΛΑΙΟ 1 - ΕΙΣΑΓΩΓΗ. Θεωρία: Εργαστήριο: Κεφάλαιο 1 «Εισαγωγή»

Εισαγωγή στην Επιστήμη της Πληροφορικής Εργαστήριο. UNIX Μέρος 1

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

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

1 ο ΓΥΜΝΑΣΙΟ ΘΕΡΜΗΣ. Πληροφορική Α' Γυμν. Το Λειτουργικό Σύστημα του Υπολογιστή

Εισαγωγή στο λειτουργικό σύστηµα Unix

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

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

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

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

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

Linux με τη χρήση κονσόλας

Βοηθητικό πρόγραµµα Setup Οδηγός χρήσης

12/5/18. συστημάτων. Το λογισµικό συστηµάτων. Κεφάλαιο 5

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

ιεργασίες και Επεξεργαστές στα Κατανεµηµένων Συστηµάτων

Computer Setup Οδηγός χρήσης

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

Εγκατάσταση του Arduino IDE

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

Κεφάλαιο 4: Ρύθμιση Συστήματος

Ιστορική Αναδρομή Λειτουργικών Συστημάτων (ΛΣ) Εισαγωγή : ο πυρήνας (kernel) / ο φλοιός (shell) Β ΕΠΑΛ

CYGWIN Οδηγίες Χρήσης (Συγγραφέας: Γιώργος ούκας)

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

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

Εικονικοποίηση. Λειτουργικά Συστήματα Υπολογιστών 7ο Εξάμηνο,

Ενσωματωμένα Συστήματα

Εισαγωγή στο προγραμματιστικό περιβάλλον ANSI

Κεφάλαιο 3.1: Λειτουργικά Συστήματα. Επιστήμη ΗΥ Κεφ. 3.1 Καραμαούνας Πολύκαρπος

Βοηθητικό πρόγραµµα Setup

Εισαγωγή στον Προγραμματισμό Μάθημα 1: Βασική Πλοήγηση σε Linux CLI. Οκτώβριος 2016 Χ. Αλεξανδράκη

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

Κεφάλαιο 13. Λογισµικό Υλικό. Λειτουργικό σύστηµα υποστήριξης δικτύου. Ανακεφαλαίωση Ερωτήσεις

ΤρόποςΑξιολόγησης: α) Εργαστήρια (Προαιρετικάµε 20% - 35% βαρύτητα µόνοθετικά) β) Τελική Γραπτή Εξέταση

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

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

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

Κεφάλαιο 4: Λογισμικό Συστήματος

Οδηγίες Χρήσης EAP Controller Software

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

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Ενότητα 2 (Κεφάλαιο 3) Περιγραφή και Έλεγχος Διεργασιών. Περιεχόμενα. Ανάγκη ύπαρξης διεργασιών 1

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

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

Συσκευές δείκτη και πληκτρολόγιο Οδηγός χρήσης

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Εργαστήριο Εγκατάσταση Ubuntu με VirtualBox Εγκατάσταση Ubuntu με Unetbootin Απομακρυσμένη πρόσβαση με Putty/WinSCP

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

Έγγραφο Προδιαγραφών Απαιτήσεων Λογισμικού για το παιχνίδι: Asylum : The Escape

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

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

Λειτουργικό συστημάτων 1

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

Οδηγός Χρήσης προσωπικού χώρου και επιπλέον χώρου αποθήκευσης δεδομένων στο Τμήμα Πληροφορικής

Λειτουργικά Συστήματα 1.1 Τι είναι Λειτουργικό Σύστημα (Operating System)

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

Προγραμματισμός Διαχείρισης Συστημάτων ΙΙ

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

Αρχιτεκτονικές Δικτύων & Πρωτόκολλα Ι

Λειτουργικά Συστήματα (διαχείριση επεξεργαστή, μνήμης και Ε/Ε)

Τι είναι ένα λειτουργικό σύστημα (ΛΣ); Μια άλλη απεικόνιση. Το Λειτουργικό Σύστημα ως μέρος του υπολογιστή

ΣΥΣΚΕΥΕΣ ΑΠΟΘΗΚΕΥΣΗΣ (ΜΝΗΜΗ)

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

Ενηµερώσεις λογισµικού Οδηγός χρήσης

Τμήμα Οικιακής Οικονομίας και Οικολογίας. Οργάνωση Υπολογιστών

Κάμερα καταγραφικό Ρολόι χειρός

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

3.1 Λειτουργικό Σύστηµα. Λειτουργικό Σύστηµα (2) ΚΕΦΑΛΑΙΟ 3: Λειτουργικά Συστήµατα. Ο υπολογιστής σαν σκέτο hardware έχει περιορισµένη χρησιµότητα

Παράρτηµα Α : Εισαγωγή στο Linux.

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

Transcript:

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ Υλοποίηση Οδηγού Συσκευής Σε Εικονική Μηχανή User-mode Linux Ιούνιος 2008

Έκδοση εγγράφου: 7/6/2008 6:25:00 µµ. Επιµέλεια: Ευάγγελος Κούκης, Υ.., vkoukis@cslab.ece.ntua.gr

1. Εισαγωγή Χώρος πυρήνα και χώρος χρήστη Το Linux είναι ένα σύγχρονο λειτουργικό σύστηµα που ακολουθεί την παράδοση του Unix. Υποστηρίζει πολλούς ταυτόχρονους χρήστες (είναι δηλαδή multi-user) και πολλές ταυτόχρονες διεργασίες (είναι multi-tasking), οι οποίες µοιράζονται το χρόνο της CPU. Η οργάνωση του λογισµικού ενός υπολογιστικού συστήµατος όταν χρησιµοποιείται το Linux παρουσιάζεται στο παρακάτω σχήµα. ιεργασία Α ιεργασία Β userspace kernelspace system calls Πυρήνας Linux Υλικό Σχήµα 1: Οργάνωση σε χώρους πυρήνα και χρήστη Εφόσον πολλές διαφορετικές διεργασίες πολλών διαφορετικών χρηστών εκτελούνται στο ίδιο υπολογιστικό σύστηµα, είναι ανάγκη να υπάρχουν συγκεκριµένοι µηχανισµοί αποµόνωσης και ελέγχου πρόσβασης, έτσι ώστε διεργασίες που ανήκουν σε κάποιον χρήστη να µην έχουν πρόσβαση σε δεδοµένα άλλων χρηστών, µία διεργασία που δυσλειτουργεί να µην επηρεάζει τη λειτουργία των υπολοίπων αλλά και να εξασφαλίζεται η δίκαιη κατανοµή των πόρων του συστήµατος ανάµεσα στις διεργασίες (χρόνος CPU, µνήµη, πρόσβαση σε συσκευές Ι/Ο). Για να ικανοποιηθούν οι παραπάνω περιορισµοί, κάθε διεργασία εκτελείται αποµονωµένη από τις υπόλοιπες, στον δικό της εικονικό χώρο διευθύνσεων αλλά και αποµονωµένη από το hardware (δεν επιτρέπεται η εκτέλεση εντολών I/O). Για να µπορέσει να χρησιµοποιήσει τους πόρους του υπολογιστικού συστήµατος, χρησιµοποιεί τις υπηρεσίες του πυρήνα του Linux µέσα από τον µηχανισµό των κλήσεων συστήµατος. Ο πυρήνας είναι το µόνο πρόγραµµα που έχει τη δυνατότητα για απευθείας προσπέλαση στο υλικό. Ελέγχει κάθε κλήση συστήµατος και αν επιτρέπεται η πρόσβαση στη συγκεκριµένη διεργασία, ικανοποιεί το αίτηµά της και επιστρέφει τα αποτελέσµατα. Είναι φανερή λοιπόν η διάκριση ανάµεσα στο χώρο πυρήνα (kernelspace) και το χώρο χρήση (userspace). Ο κώδικας των διεργασιών, που εκτελείται στο userpsace, δεν επιτρέπεται να προσπελάσει απευθείας το υλικό και δεν έχει πρόσβαση στο χώρο µνήµης άλλων διεργασιών. Αντίθετα, ο κώδικας του πυρήνα, που εκτελείται στο

kernelspace έχει ελεύθερη πρόσβαση στο υλικό και στη µνήµη του συστήµατος. Επιπλέον, πιθανή δυσλειτουργία του µπορεί να αποβεί µοιραία για τη λειτουργία του υπολογιστικού συστήµατος. 2. User-mode Linux Στην 3η άσκηση του Εργαστηρίου Λειτουργικών Συστηµάτων, σας ζητείται η ανάπτυξη ενός kernel module για τον πυρήνα του Linux. Ο κώδικας του module εκτελείται στο kernelspace, όπως ακριβώς και ο υπόλοιπος κώδικας του πυρήνα. Έτσι δυνατότητα για εισαγωγή modules στον πυρήνα έχει µόνο ο διαχειριστής (ο χρήστης root) του συστήµατος. Ένας τρόπος µε τον οποίο θα µπορέσετε να κάνετε ανάπτυξη για τον πυρήνα του Linux στα µηχανήµατα του εργαστηρίου, χωρίς να έχετε δικαιώµατα διαχειριστή είναι η χρήση του user-mode Linux. Ο πυρήνας του Linux έχει µεταφερθεί ώστε να τρέχει σε πολλές διαφορετικές αρχιτεκτονικές. Έτσι, εκτός από τους επεξεργαστές x86 της Intel, υπάρχουν εκδόσεις για επεξεργαστές Itanium, PowerPC, SPARC κ.ά. Μία ακόµη αρχιτεκτονική στην οποία έχει µεταφερθεί είναι το userspace του Linux. Υπάρχει δηλαδή µια έκδοση του πυρήνα που δεν αλληλεπιδρά απευθείας µε πραγµατικό hardware, αλλά εκτελείται επάνω σε έναν άλλο πυρήνα Linux. Έτσι, έχουµε την εξής οργάνωση: Σχήµα 2: Η εικονική µηχανή του πυρήνα UML Ο πυρήνας user-mode Linux (UML) είναι ένας πλήρης πυρήνας Linux, εφαρµόζει ακριβώς τους ίδιους µηχανισµούς χρονοδροµολόγησης στη CPU, διαχείρισης µνήµης, ελέγχου πρόσβασης, υποστηρίζει πολλά διαφορετικά συστήµατα αρχείων και προσφέρει σε διεργασίες ακριβώς τον ίδιο µηχανισµό κλήσεων συστήµατος. Ωστόσο, για την εξυπηρέτησή τους δεν αλληλεπιδρά απευθείας µε το υλικό, όπως θα έκανε αν έτρεχε επάνω σε ένα πραγµατικό υπολογιστικό σύστηµα, αλλά εκτελείται ως ένα σύνολο διεργασιών επάνω σε έναν άλλο πυρήνα και χρησιµοποιεί µε τη σειρά του userspace kernelspace άλλες διεργασίες ιεργασία User-mode Linux system calls Πυρήνας Linux (για Intel x86) ιεργασία 1 ιεργασία 2 system calls Πυρήνας Linux (UML) system calls to host kernel userspace kernelspace Υλικό

κλήσεις συστήµατος. Οι διεργασίες που εκτελούνται κάτω από τo UML, εκτελούνται στην ουσία µέσα σε µία εικονική µηχανή (virtual machine). Έτσι, τρέχοντας έναν πυρήνα UML στο χώρο χρήστη του πραγµατικού συστήµατος, θα µπορείτε να έχετε τη δική σας εικονική µηχανή, στην οποία θα έχετε δικαιώµατα διαχειριστή, δυνατότητα για οποιαδήποτε µεταβολή στο σύστηµα, όντας όµως ταυτόχρονα περιορισµένοι στο χώρο χρήστη του πραγµατικού συστήµατος. Το πώς ακριβώς γίνεται αυτό, αναλύεται στη συνέχεια. 3. Χρήση του User-mode Linux Για να ξεκινήσετε τη λειτουργία της εικονικής µηχανής, κάνετε login σε ένα από τα µηχανήµατα του εργαστηρίου µε το όνοµα χρήση (έστω cslabc23) και τον κωδικό σας και στη συνέχεια χρησιµοποιείτε την εντολή uml. Η εικονική µηχανή θα ξεκινήσει και θα εµφανιστεί ένας αριθµός από παράθυρα, τα οποία αντιστοιχούν σε virtual consoles. Στην εικονική µηχανή µπορείτε να κάνετε login είτε ως διαχειριστής (όνοµα: root, κωδικός: root) είτε ως χρήστης (όνοµα: cslabχχ, χωρίς κωδικό). Ακριβώς όπως και για ένα πραγµατικό µηχάνηµα, η λειτουργία της εικονικής µηχανής πρέπει να τερµατίζεται σωστά. Ως root, χρησιµοποιείστε την εντολή halt για να «σβήσετε» την εικονική µηχανή, ή την εντολή reboot για να κάνετε επανεκκίνηση. Εάν για κάποιο λόγο η εικονική µηχανή «κολλήσει», π.χ. ο κώδικας του kernel module σας εκτελέσει κάποια εσφαλµένη λειτουργία, µπορείτε να τραβήξετε στην ουσία την εικονική µηχανή από την πρίζα, εκτελώντας στο πραγµατικό µηχάνηµα killall linux, και στη συνέχεια, αν δεν υπάρξει αποτέλεσµα killall -9 linux.

4. Περισσότερα για την εικονική µηχανή Η εικονική µηχανή, όπως και ένα πραγµατικό υπολογιστικό σύστηµα, χρειάζεται µονάδες µόνιµης αποθήκευσης όπως είναι οι σκληροί δίσκοι, στους οποίους βρίσκονται συστήµατα αρχείων. Στη συγκεκριµένη περίπτωση, ο σκληρός δίσκος της εικονικής µηχανής είναι το αρχείο /home/cslab/umlcommon/cslab_common_root_fs, µεγέθους 4GB, το οποίο είναι κοινό για όλες τις εικονικές µηχανές. Τα περιεχόµενα αυτού του αρχείου δεν είναι δυνατό να αλλαχτούν. Οι αλλαγές που κάνει κάθε οµάδα µέσα στην εικονική µηχανή, αποθηκεύονται στο (πραγµατικό) home directory της οµάδας, µέσα στο αρχείο private.cow. Στο αρχείο αυτό αποθηκεύονται όλες οι αλλαγές, σε όλους τους καταλόγους της εικονικής µηχανής (/etc, /var, /tmp κλπ) εκτός από τον κατάλογο /home/cslab. ιαγραφή του αρχείου private.cow συνεπάγεται επαναφορά της εικονικής µηχανής στην αρχική της κατάσταση. Τα αρχεία που βρίσκονται στο home directory του χρήστη cslabxxx µέσα στην εικονική µηχανή, αποθηκεύονται στο directory uml-home του πραγµατικού µηχανήµατος. Έτσι διευκολύνεται η µεταφορά αρχείων από και προς την εικονική µηχανή. Επιπλέον, τα αρχεία αυτά θα είναι ασφαλή ακόµη και σε περίπτωση που το σύστηµα αρχείων της εικονικής µηχανής πάθει κάποια βλάβη (λόγω π.χ. προγραµµατιστικού σφάλµατος κατά την εκτέλεση του kernel module) και αναγκαστείτε να επαναφέρετε την εικονική µηχανή στην αρχική της κατάσταση διαγράφοντας το αρχείο private.cow. Σας προτείνουµε να κρατάτε ολόκληρο τον πηγαίο κώδικα της άσκησης στο home directory του χρήστη cslabxxx µέσα στην εικονική µηχανή (άρα στο directory ~/uml home του πραγµατικού συστήµατος). Εκεί µπορείτε να κάνετε αλλαγές από το πραγµατικό µηχάνηµα, τρέχοντας π.χ. κάποιον editor όπως το gedit σε γραφικό περιβάλλον και να χρησιµοποιείτε την εικονική µηχανή για τη µεταγλώττιση και χρήση του module. Μπορείτε να µάθετε περισσότερα για το user-mode Linux, το σχεδιασµό, την εγκατάσταση και τη χρήση του στη σελίδα http://user-mode-linux.sourceforge.net 5. Εικονική µηχανή και δίκτυο αισθητήρων Στη συνέχεια, παρουσιάζεται βήµα προς βήµα η εκκίνηση της εικονικής µηχανής του User-mode Linux, η σύνδεση µε το σταθµό βάσης του δικτύου αισθητήρων που σας δίνεται και η εκκίνηση του ζητούµενου οδηγού συσκευής µέσα σε αυτή.

1) Ξεκινάτε το σύστηµα του εργαστηρίου [έστω το naxos, εφεξής "host σύστηµα"] σε Linux και κάνετε login µε το όνοµα χρήστη [έστω cslabc23] και τον κωδικό που σας έχει δοθεί. 2) συνδέετε το σταθµό βάσης σε θύρα USB. Όταν είναι συνδεδεµένος, στον host, ο σταθµός βάσης εµφανίζεται στην έξοδο της εντολής lsusb, ως "Future Technology Devices International, Ltd και υπάρχει η συσκευή /dev/ttyusb1: naxos:~> whoami cslabc23 naxos:~> lsusb Bus 002 Device 001: ID 1d6b:0001 Bus 001 Device 002: ID 0403:6010 Future Technology Devices International, Ltd Bus 001 Device 001: ID 1d6b:0001 naxos:~> ls -l /dev/ttyusb* crw-rw---- 1 root dialout 188, 0 Jun 7 16:18 /dev/ttyusb0 crw-rw---- 1 root dialout 188, 1 Jun 7 16:18 /dev/ttyusb1 Αν κάτι δεν πηγαίνει καλά έως εδώ, πρέπει να µιλήσετε µε κάποιο βοηθό εργαστηρίου, γιατί ίσως να µην είναι κατάλληλα ενεργοποιηµένη η υποστήριξη USB στο BIOS. 3) Ελέγχετε ότι δεν έχουν µείνει εικονικές µηχανές UML να τρέχουν από εσάς ή άλλη οµάδα ταυτόχρονα στο ίδιο µηχάνηµα: naxos:~> pgrep linux naxos:~> Αν έστω και µία διεργασία τρέχει, δηµιουργείται σοβαρό πρόβληµα γιατί και οι δύο εικονικές µηχανές θα προσπαθούν να λάβουν δεδοµένα από τη συσκευή /dev/ttyusb1 του host. Αν είναι η δική σας µηχανή, σκοτώνετε τις διεργασίες µε χρήση της εντολής kill. Βεβαιωθείται επίσης ότι δεν τρέχετε τη δική σας εικονική µηχανή σε κάποιο άλλο µηχάνηµα, γιατί θα έχει κλειδωµένο το αρχείο private.cow και δεν θα µπορεί να ξεκινήσει. 4) Εκτελείτε την εικονική µηχανή του UML, µε την εντολή uml. Μπορείτε να δείτε τον κώδικα του script αυτού [/usr/local/bin/uml] για περισσότερες πληροφορίες. Το σύστηµα ολοκληρώνει το boot και εµφανίζει 6 εικονικές κονσόλες. Ανοίγετε και έναν editor στο Gnome του host ώστε να κάνετε άνετα αλλαγές στα αρχεία του καταλόγου ~/uml-home. 5) Σε µερικές από τις κονσόλες κάνετε login ως απλός χρήστης χωρίς password, σε άλλες ως root µε password root.

6) Μέσα στην εικονική µηχανή, ο σταθµός βάσης είναι προσβάσιµος κάτω από τη συσκευή /dev/ttys0, σαν να ήταν συνδεδεµένος σε µια απλή σειριακή θύρα. Σε αυτή τη συσκευή θα προσαρτήσετε τη line discipline του Lunix:TNG. ΠΡΟΣΟΧΗ: Στο σηµείο αυτό υπάρχει διαφορά από το συνοδευτικό φυλλάδιο, στο οποίο είχε γίνει η υπόθεση ότι ο υπό κατασκευή driver θα χρησιµοποιούσε τη σειριακή /dev/ttyusb1. 7) Ως απλός χρήστης µέσα στην εικονική µεταγλωττίζετε τον κώδικα που έχετε γράψει και αφήσει στον κατάλογο ~/uml-home του host. Αυτό το στάδιο πρέπει να γίνει µέσα στην εικονική µηχανή, γιατί δεν είναι δυνατό ένα module φτιαγµένο για µηχάνηµα i386 [ο host] να φορτωθεί σε µηχάνηµα άλλης αρχιτεκτονικής, τύπου UML [η Virtual Machine]. cslabc23@utopia:~$ cd lunix-tng/ cslabc23@utopia:~/lunix-tng$ make clean; make make -C /lib/modules/2.6.25.4/build M=/home/cslab/cslabc23/uml-home/lunix-tng c lean ARCH=um ln: cannot remove `Kconfig.arch': Permission denied make[1]: Entering directory `/usr/src/linux-2.6.25.4' CLEAN /home/cslab/cslabc23/uml-home/lunix-tng/.tmp_versions CLEAN /home/cslab/cslabc23/uml-home/lunix-tng/module.symvers make[1]: Leaving directory `/usr/src/linux-2.6.25.4' rm -f modules.order rm -f lunix-attach rm -f mk_lookup_tables rm -f lunix-lookup.h gcc -Wall -o mk_lookup_tables mk_lookup_tables.c -lm./mk_lookup_tables >lunix-lookup.h make -C /lib/modules/2.6.25.4/build M=/home/cslab/cslabc23/uml-home/lunix-tng m odules ARCH=um ln: cannot remove `Kconfig.arch': Permission denied make[1]: Entering directory `/usr/src/linux-2.6.25.4' CC [M] /home/cslab/cslabc23/uml-home/lunix-tng/lunix-module.o CC [M] /home/cslab/cslabc23/uml-home/lunix-tng/lunix-chrdev.o CC [M] /home/cslab/cslabc23/uml-home/lunix-tng/lunix-ldisc.o CC [M] /home/cslab/cslabc23/uml-home/lunix-tng/lunix-protocol.o CC [M] /home/cslab/cslabc23/uml-home/lunix-tng/lunix-sensors.o LD [M] /home/cslab/cslabc23/uml-home/lunix-tng/lunix.o Building modules, stage 2. MODPOST 1 modules CC /home/cslab/cslabc23/uml-home/lunix-tng/lunix.mod.o LD [M] /home/cslab/cslabc23/uml-home/lunix-tng/lunix.ko make[1]: Leaving directory `/usr/src/linux-2.6.25.4' gcc -Wall -o lunix-attach lunix-attach.c 8) Ως root, κατασκευάζετε τα κατάλληλα ειδικά αρχεία για τον driver σας και προσαρµόζετε τη διάταξη γραµµής του Lunix:TNG στο /dev/ttys0. Από αυτό το σηµείο, το σύστηµα συλλογής δεδοµένων ανανεώνει το περιεχόµενο των sensor buffers.

root@utopia:~# cd ~cslabc23 root@utopia:/home/cslab/cslabc23/uml-home# cd lunix-tng root@utopia:/home/cslab/cslabc23/uml-home/lunix-tng#./lunix_dev_nodes.sh root@utopia:/home/cslab/cslabc23/uml-home/lunix-tng# insmod./lunix.ko root@utopia:/home/cslab/cslabc23/uml-home/lunix-tng#./lunix-attach /dev/ttys0 tty_open: looking for lock tty_open: trying to open /dev/ttys0 tty_open: /dev/ttys0 (fd=3) Line discipline set on /dev/ttys0, press ^C to release the TTY... 9) Ως root, σε άλλη κονσόλα, κάνετε less /var/log/kern.log και πατάτε Shift+f ώστε να παρακολουθείτε τα µηνύµατα του πυρήνα. 10) Με τον αισθητήρα κλειστό, τρέχετε δύο ταυτόχρονες διεργασίες, πχ. τις cat /dev/lunix0-temp, cat /dev/lunix-light, σε δύο χωριστά παράθυρα της εικονικής µηχανής, ως απλός χρήστης. Θα πρέπει και οι δύο να µπλοκάρουν. 11) Ενεργοποιείτε τον αισθητήρα. Μετά από λίγο, ~40sec, οι διεργασίες αρχίζουν να τυπώνουν δεδοµένα. Κλείνετε τον αισθητήρα. Σταµατάνε. 12) Ενώ συµβαίνουν όλα αυτά, τρέχετε το top, ως απλός χρήστης. Το σύστηµα πρέπει να είναι σχεδόν 100% idle, οπότε αποδεικνύεται ότι οι διεργασίες πραγµατικά κοιµούνται όταν δεν υπάρχουν νέα δεδοµένα.

6. Συχνές ερωτήσεις για το UML Υπάρχουν δύο προβλήµατα που παρουσιάζονται πολύ συχνά: 6.1. Η µεταγλώττιση είναι επιτυχής αλλά η εισαγωγή του module στον πυρήνα αποτυγχάνει µε το λάθος 'kernel version mismatch' ή ανάλογο Κατά την εισαγωγή ενός module στον πυρήνα, γίνεται έλεγχος έτσι ώστε η έκδοση του πυρήνα για την οποία έχει µεταγλωττιστεί το module να συµφωνεί µε την έκδοση του πυρήνα στην οποία εισάγεται. Πιθανότατα, µεταγλωττίσατε το module έξω από την εικονική µηχανή (άρα µάλλον για πυρήνα i386) και προσπαθείτε να το εισάγετε στον πυρήνα UML. Οι αρχιτεκτονικές είναι διαφορετικές και έτσι δεν επιτρέπεται η εισαγωγή του module. 6.2. Κατά την εκκίνηση του UML εµφανίζεται κάποιο µήνυµα λάθους για το root fs και ο πυρήνας πανικοβάλλεται. Η πιο συνηθισµένη αιτία για αυτό το µήνυµα λάθους είναι ότι ο πυρήνας δεν µπορεί να κλειδώσει το αρχείο private.cow, το αρχείο που κρατάει τις αλλαγές κάθε οµάδας σε σχέση µε το κοινό filesystem. Αυτό φαίνεται από ανάλογο µήνυµα λάθους ανάµεσα στα διαγνωστικά του πυρήνα. Είναι πάρα πολύ σηµαντικό µόνο µία εικονική µηχανή να εκτελείται από κάθε οµάδα κάθε φορά, αφού ταυτόχρονη χρήση του αρχείου private.cow από πολλές εικονικές µηχανές θα µπορούσε να προκαλέσει βλάβες στο εικονικό σύστηµα αρχείων. Το πιο πιθανό είναι ότι κάπου έχετε αφήσει να τρέχει ένας πυρήνας UML ο οποίος κρατά κλειδωµένο το αρχείο. οκιµάστε να τον τερµατίσετε (killall -9 linux). Αν αυτό δεν δουλέψει, µπορείτε να σβήσετε το αρχείο private.cow, οπότε χάνετε όλες τις αλλαγές που έχετε κάνει στην εικονική µηχανή (όχι όµως και τον κώδικά σας, αν τον κρατάγατε στο /home/cslab/cslab??), και επανέρχεστε στην αρχική κατάσταση. Προσοχή: Θα χάσετε ο,τιδήποτε έχετε αποθηκεύσει στην εικονική µηχανή και βρίσκεται έξω από αυτό το directory.