ΓΙΑ ΕΝΗΜΕΡΩΣΗ ΚΑΙ ΣΧΟΛΙΑΣΜΟ. ---------- Forwarded message ---------- From: <mickflemm [ at ] gmail [ dot ] com> Date: 2009/2/9 Subject: Διαγωνισμός ανάπτυξης ΕΛ/ΛΑΚ To: info [ at ] ellak [ dot ] gr, Nick Kossifidis <mick [ at ] madwifi-project [ dot ] org>, mickflemm [ at ] gmail [ dot ] com ===================================================================== Τίτλος: Βελτίωση του οδηγού για ασύρματες κάρτες Atheros που εμπεριέχεται στον πυρήνα του Linux (ath5k) ===================================================================== Περίληψη: Ως μέρος της ανάπτυξης του οδηγού χρειάζεται να γίνουν παρεμβάσεις τόσο στη διαδικασία επανεκκίνησης του υλικού (hw reset), όσο και ευρύτερες παρεμβάσεις που αφορούν την διαχείριση του αναλογικού μέρους της κάρτας (PHY/RF). Ιστορικό ------------ Ο οδηγός ath5k είναι κυρίως προϊόν reverse engineering (το οποίο ξεκίνησε από τον Reyk Floeter το 2003 - 2004 και συνεχίστηκε από εμένα τα τελευταία 3 - 4 χρόνια με μεθόδους mmio tracing, binary analysis κλπ), κατά συνέπεια μη έχοντας πρόσβαση σε κείμενα τεκμηρίωσης από την Atheros ήταν πολύ δύσκολο να υλοποιήσουμε κάποιους μηχανισμούς που αφορούν το αναλογικό τμήμα της κάρτας. Ο λόγος είναι ότι το συγκεκριμένο κομμάτι είναι ιδιαίτερα πολύπλοκο, καθότι η κάρτα δεν περιέχει υλικολογισμικό (firmware) και όλες οι διαδικασίες διαχείρισης του συγκεκριμένου τμήματος (BaseBand/RF) εκτελούνται από τον οδηγό. Πρόσφατα η Atheros άλλαξε πολιτική όσον αφορά το ελεύθερο λογισμικό και μας έδωσε κάποιο κώδικα για αναφορά, έτσι έγινε δυνατή η περαιτέρω κατανόηση των διαφόρων μηχανισμών. Ο κώδικας αυτός όμως παραμένει αρκετά ασαφής (δεν υπάρχει επαρκής τεκμηρίωση ούτε με τη μορφή documentation ούτε με τη μορφή σχολίων) και κακογραμμένος, ενώ είναι γνωστό ότι περιέχει διάφορα bugs και σε καμία περίπτωση δεν πληροί τα πρότυπα ποιότητας που έχουμε καθορίσει στο Linux. Επιπλέον συνδυάζοντας τον κώδικα της Atheros με τα κείμενα που έχει καταθέσει ως πατέντες (και βρίσκονται στο Internet) και υλικό που έχω αποκομίσει απ' το reverse engineering, είναι πλέον δυνατόν να γράψουμε απ' την αρχή, σωστά, τον κώδικα του ath5k που αφορά το συγκεκριμένο κομμάτι και να τον αναπτύξουμε περαιτέρω, ακολουθώντας τόσο τα πρότυπα ποιότητας του Linux αλλά και το υπάρχον API. Περισσότερες πληροφορίες για τον οδηγό θα βρείτε εδώ -> http://www.linuxwireless.org/en/users/Drivers/ath5k αλλά η τεκμηρίωση βρίσκεται στον κώδικα με τη μορφή σχολίων (τα οποία και θα μετατραπούν σε kerneldoc) Ο κώδικας βρίσκεται στον πυρήνα του linux απ' την έκδοση 2.6.25 και μετά, μπορείτε να τον κατεβάσετε απ' τη διεύθυνση www.kernel.org, ενώ η ανάπτυξη του γίνεται στο wireless-testing tree που μπορείτε να δείτε με git στη διεύθυνση http://git.kernel.org/?p=linux/kernel/git/linville/wireless-testing.git;a=tree;f=drivers/net/wireless/ath5k;hb=HEAD. Στόχοι --------- Στόχος μου είναι, στα πλαίσια της συμμετοχής μου στην ανάπτυξη του οδηγού (είμαι author και maintainer) να κάνω τις απαραίτητες παρεμβάσεις στον κώδικα και να συνοδέψω τις αλλαγές μου με όσο το δυνατόν επαρκή τεκμηρίωση, ώστε να μπορέσουν και οι υπόλοιποι προγραμματιστές που διαβάζουν τον κώδικα να συνεισφέρουν σε αυτόν αλλά και να τον διορθώσουν αν χρειάζεται. Επίσης καθότι οι συγκεκριμένες κάρτες χρησιμοποιούνται ευρύτατα σε διάφορες λύσεις ασύρματων router (όπως πχ. στο Ασύρματο Μητροπολιτικό Δίκτυο Αθηνών ή και σε εμπορικές λύσεις που παρέχονται από διάφορες εταιρίες, τόσο στην Ελλάδα -π.χ. www.linkshop.gr- όσο και στο εξωτερικό -κυρίως βασισμένες στη διανομή OpenWRT με τους προγραμματιστές της οποίας συνεργαζόμαστε στενά), οι αλλαγές αυτές θα βοηθήσουν στην αντικατάσταση των binary οδηγών με τον επίσημο οδηγό που υποστηρίζεται από το Linux. Τέλος λόγω του ότι οι συγκεκριμένες κάρτες δεν έχουν υλικολογισμικό, είναι πλήρως παραμετροποιήσιμες (σε βαθμό που θεωρούνται από αρκετούς SDR -Software Defined Radios) και έτσι χρησιμοποιούνται εκτενώς στην έρευνα των ασύρματων δικτύων, τόσο από ερευνητικές ομάδες του εξωτερικού (βλ. orbit lab) όσο και από Έλληνες (βλ. ics.forth.gr). Παραδοτέα ---------------- Κώδικας σε C με σχόλια (στα Αγγλικά) που να τεκμηριώνουν τις διάφορες λειτουργίες, ο οποίος θα ανέβει στο wireless-testing tree του kernel ή θα ανέβει στον χώρο που έχω στη διάθεσή μου στο kernel.org (http://www.kernel.org/pub/linux/kernel/people/mickflemm/) Χρονοδιάγραμμα ------------------------ 20/2 - Επανεγγραφή του κώδικα για την δυναμική ρύθμιση του AGC (Automatic Gain Circuitry) για τα chip RF5111 και RF5112 20/2 - Εκκαθάριση του κώδικα που αφορά την ρύθμιση του RF (RF registers/ RF buffer control) 20/2 - Eκκαθάριση του κώδικα της διαδικασίας reset της κάρτας και επέκτασή του βάσει του κώδικα που έχει δώσει η Atheros 27/2 - Εκκαθάριση του κώδικα που αφορά το parsing της EEPROM 27/2 - Αρχική υλοποίηση της ρύθμισης tx power (χωρίς TPC και regulatory control) 20/3 - Ολοκλήρωση του debuging στον παραπάνω κώδικα με χρήση αναλυτή φάσματος (για να δούμε αν η spectral mask είναι όπως θα έπρεπε) 20/3 - Βελτιστοποίηση του κώδικα για την περιοδική μικρορύθμηση του BaseBand (calibration) 30/3 - Υλοποίηση του αλγορίθμου για αυτόματη προσαρμογή των παραμέτρων αντιμετώπισης θορύβου (Adaptive Noise Immunity) 18/4 - Υλοποίηση TPC και regulatory control 18/4 - Βελτίωση του κώδικα διαχείρισης των κεραιών (antenna diversity, antenna profiles κλπ) Το χρονοδιάγραμμα είναι σχετικό καθότι στον kernel ακολουθούνται συγκεκριμένες διαδικασίες, συγκεκριμένα για να μπει ο κώδικας στο git repository πρέπει να γίνει review από τους υπόλοιπους προγραμματιστές και να δοκιμαστεί σε όλο το εύρος των chip που υποστηρίζει ο οδηγός, ενώ τον τελευταίο λόγο τον έχει ο Kernel maintainer του wireless-testing tree (ο οποίος πχ. ενδέχεται να καθυστερήσει να ανεβάσει τον κώδικα στο tree). Επίσης ενδέχεται όσο εγώ γράφω τις παραπάνω διορθώσεις, κάποιος άλλος να κάνει παρεμβάσεις στον κώδικα, οπότε και θα χρειαστεί να κάνω re-base (που μπορεί να είναι ιδιαίτερα χρονοβόρο). Τέλος σπουδάζω στο τμήμα Φυσικής και εργάζομαι στο Ι.Τ.Ε. οπότε ενδέχεται να υπάρχουν καθυστερήσεις και λόγω άλλων υποχρεώσεων ή αλλαγή στη σειρά των παραπάνω εργασιών (πχ. να γράψω πρώτα τον κώδικα για τις κεραίες και μετά το TPC). Σε κάθε περίπτωση οι απαραίτητες εργασίες θα έχουν τελειώσει πριν τους 3 μήνες που είναι η διορία. Βιογραφικό ---------------- Ασχολούμαι με το ελεύθερο λογισμικό απ' το 1998 ως χρήστης και ξεκίνησα να ασχολούμαι με τον προγραμματισμό το 2004 - 2005. Έχω μεταξύ άλλων συμβάλει στην ανάπτυξη του Mediawiki και την μετάφρασή του στα Ελληνικά (https://bugzilla.wikimedia.org/show_bug.cgi?id=1924, https://bugzilla.wikimedia.org/show_bug.cgi?id=4042, https://bugzilla.wikimedia.org/show_bug.cgi?id=3573), την ανάπτυξη του madwifi driver (http://madwifi-project.org/wiki/TeamMembers), την ανάπτυξη του gnupg-pkcs11 (http://gnupg-pkcs11.sourceforge.net/changelog.html) και ήμουν απ' τα πρώτα μέλη του Ασύρματου Μητροπολιτικού Δικτύου Αθηνών απ' το 2002 (ανέβασα το πρώτο PC σε ταράτσα). Σπουδάζω στο τμήμα Φυσικής του Πανεπιστημίου Κρήτης και εργάζομαι ως προπτυχιακός υπότροφος στο εργαστήριο τηλεπικοινωνιών και δικτύων του Ιδρύματος Τεχνολογίας Ερευνας (http://www.ics.forth.gr/netlab/people.html). Είμαι ο ένας εκ' των δυο authors του ath5k, έχοντας γράψει το μεγαλύτερο μέρος του κώδικα που αφορά το hw (αποτελούσε ξεχωριστό project μέχρι τότε, με το όνομα OpenHAL και συντηρούταν στο svn repository του madwifi project όπου είμαι μέλος) και μικρό μέρος του κώδικα που αφορά το API του kernel (τον οποίο έχει γράψει στο μεγαλύτερο μέρος του ο Jiri Slaby). Η ενασχόλησή μου με τις συγκεκριμένες κάρτες ξεκίνησε λόγω του AWMN, απ' όπου και διαπίστωσα το πόσο προβληματικός είναι ο binary driver για τις συγκεκριμένες κάρτες και πόσο πολύ λείπει ένα open source alternative στο Linux. Λόγω της συνεργασίας μου με την κοινότητα του OpenBSD ο κώδικας που γράφω παραμένει BSD licensed έτσι ώστε να ωφεληθούν και άλλες κοινότητες πέραν του Linux. Πέραν του προγραμματισμού, βοηθάω διάφορους χρήστες αλλά και φοιτητές/ερευνητές που ασχολούνται με τις συγκεκριμένες κάρτες και έχουν διάφορες απορίες, ενώ έχω επανειλημμένα προτρέψει και Έλληνες προγραμματιστές να ασχοληθούν. Προσπάθησα επίσης να οργανώσω την επόμενη συνάντηση της ομάδας των προγραμματιστών του πυρήνα που ασχολούνται με σχετικούς οδηγούς στην Ελλάδα αλλά λόγω της οικονομικής κρίσης θα γίνει hosted απ' τη Nokia στο Helsinki. Έχω συμβάλει σε δράσεις του Hellug στη Φαρκαδώνα και αλλού καθώς και σε διάφορα workshops του AWMN, ενώ έχω γράψει κατά καιρούς διάφορα tutorials για δίκτυα και linux. Κοσσυφίδης Νικόλαος Ρούμελης 38 Χαλάνδρι/ Αθήνα κιν: +306973695206 mail: mickflemm [ at ] gmail [ dot ] com, mick [ at ] madwifi-project [ dot ] org (no reply) -- GPG ID: 0xD21DB2DB As you read this post global entropy rises. Have Fun ;-) Nick -- Πριν εκτυπώσετε αυτό το μήνυμα, σκεφθείτε το περιβάλλον! Ένα χαρτί λιγότερο! - http://karounos.gr/blog/
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) Comment: Use GnuPG with Firefox : http://getfiregpg.org (Version: 0.7.3) iEYEARECAAYFAkmPhwYACgkQOF4mXtIdsttfuwCeO/+aiiZOdMux6cYe3TiUGFUw 4FgAni1dmDHMWz0n1R2dFkmYObpcuH8T =XK6X -----END PGP SIGNATURE-----