Βελτίωση του οδηγού για ασύρματες κάρτες 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 μήνες που είναι η διορία.

 
ath5k/κείμενο_πρότασης.txt (870 views) · Τελευταία τροποποίηση: 2014/04/03 17:26
 
Recent changes RSS feed Creative Commons License Donate Valid XHTML 1.0 Valid CSS Driven by DokuWiki