Προς το περιεχόμενο

Hardware και drivers στο linux


Προτεινόμενες αναρτήσεις

Δημοσ.

καλημερα!!!, θελω να κανω μια ερωτιση, καθως βαζω τα ντριβερς απο τον package manager γινετε κανονικα μετα απο την επανεκκινηση η οθονη δεν ανοιγει και θελει μετα ξανα εγκατασταση τα ubuntu. Ξερει κανενας τι μπορει να φταιει?

  • Απαντ. 39
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Συχνή συμμετοχή στο θέμα

Δημοσ.

Μπραβο για το thread.

Μπορει καποιος να μας εξηγησει γιατι χρειαζονται firmware πολλες συσκευες για να παιξουν?

 

Όλες οι συσκευές χρειάζονται firmware για να δουλέψουν. Ή τέλος πάντων όλες όσες παρουσιάζουν κάποιο επίπεδο "νοημοσύνης"

Η αλήθεια είναι πως δέν υπάρχει κάποιος ορισμός για το firmware για να παραθέσω, τουλάχιστον όχι κάποιος που να αναγνωρίζεται ευρέως σαν ακριβής. Η ουσία πάντως είναι αυτή:

Ακριβώς όπως χρειάζεται ο υπολογιστής σου ένα λειτουργικό σύστημα για να κάνει κάτι χρήσιμο, έτσι και μια συσκευή με ένα microcontroller ή οποιουδήποτε άλλου είδους "επεξεργαστή" χρειάζεται ένα set εντολών που να του λέει τί θα κάνει σε περίπτωση που λάβει συγκεκριμένα σήματα/εντολές. Αυτό το κάνει το firmware, ουσιαστικά δηλαδή όταν εσύ για παράδειγμα λές στην κάρτα ήχου σου να παίξει ένα audio file, το λειτουργικό στέλνει το αντίστοιχο command στη συσκευή ακολουθούμενο από τα data του audio αρχείο .Το firmware αναλαμβάνει να ερμηνεύσει αυτό το command, να στείλει με τη σειρά του αν χρειάζεται κάποια σήματα στα υπόλοιπα υποσυστήματα της συσκευής και τέλος να στείλει τα data στα σωστά pins και chipsets της συσκευής.

Επίσης, το firmware μπορεί να έχει κάποιες λειτουργίες, πολύ κοινές για το είδος της συσκευής, και να τις εκτελεί αντί να χρειάζεται το λειτουργικό να επεξεργαστεί πληροφορίες και να στείλει την εντολή πίσω στη συσκευή. Αυτό γίνεται για να μειωθεί ο φόρτος του συστήματος (αφού αυτές οι λειτουργίες δέν περνάνε από την κεντρική CPU αλλά μένουν και εξυπηρετούνται από την ίδια τη συσκευή) και για να μειωθεί και ο χρόνος απόκρισης της ίδιας της συσκευής. Παράδειγμα, οι περισσότερες κάρτες δικτύου πλέον έχουν ενσωματωμένη στο firmware τους μιά function η οποία απαντάει σε εισερχόμενα ping. Σάν αποτέλεσμα έχεις σημαντικά μικρότερα RTTs στο ping και η CPU δέν χρειάζεται να απασχολείται με κάτι τόσο trivial.

Μετά από αυτή τη "μικρή" εισαγωγή λοιπόν, υποθέτω οτι ρωτάς γιατί χρειάζονται κάποιες συσκευές στο linux εξωτερικά firmware αρχεία για να δουλέψουν. Η απάντηση είναι οτι κάποιοι κατασκευαστές προτιμούν να αφήνουν τον driver της συσκευής να στέλνει το firmware στην αντίστοιχη συσκευή μόλις αυτός φορτώνεται, παράδειγμά κάποιες gigabit nic της realtek. Γίνεται έτσι πιό εύκολο να αλλάξει αυτό το firmware για debugging/development λόγους σε βάρος του χρόνου που χρειάζεται η συσκευή για να γίνει διαθέσιμη στο λειτουργικό για να τη χρησιμοποιήσει. Επίσης, μπορεί ο κατασκευαστής για λόγους οικονομίας RAM ή/και EEPROM πάνω στη συσκευή, να βάζει ένα μικρό μόνο μέρος του firmware πάνω στο device και να αφήνει μεγάλο κομμάτι data να γίνεται load εξωτερικά και φυσικά unload όταν τερματίζει το λειτουργικό. Το πρόβλημα με αυτή τη πρακτική είναι οτι είναι σχετικά εύκολο για κάποιον που έχε το firmware στα χέρια του να καταλάβει ακριβώς πως δουλεύει η συσκευή και να γράψει ένα άλλο που να τη χρησιμοποιεί όπως ο χρήστης θέλει και οχι όπως η εταιρεία σχεδίαζε. Αυτό σημαίνει πως τελικά όλο το R&D που έχει γίνει πάνω στο device γίνεται ουσιαστικά κοινός τόπος για όποιον θέλει να το ψάξει και αυτό όπως καταλαβαίνεις είναι κάτι που οι εταιρείες δέν θέλουν για τα προϊόντα τους.

Γι αυτό και ακόμη το συνηθέστερο είναι η συσκευή να έχει build in το firmware της και για να αποκτήσεις πρόσβαση σε αυτό το κομμάτι της NAND flash (συνήθως τέτοια είναι τα ολοκληρωμένα που έχουν το firmware μέσα) πρέπει να δώσεις μιά σειρά εντολών στη συσκευή που η εταιρεία φυλάει ως κόρη οφθαλμού.

Αυτά τα ολίγα και καλημέρα σε όλους.

Δημοσ.

Ρε παιδια δεν μπορω να βρω κατι που να λεει τι ακριβως ειναι το firmware, μην με πιεζετε :P

 

Δεν εχω να προσθεσω κατι αλλο. Για υπερβολικα λεπτομερεις πληροφοριες υπαρχουν τα lpcii -vv, lsusb -v, lshw κλπ.

 

@filipp16

Ανοιξε ενα νεο θεμα ακι πες μας ποια καρτα εχεις, ποια οθονη, αν την εχεις με dsub ή dvi κλπ.

Δημοσ.

Ρε παιδια δεν μπορω να βρω κατι που να λεει τι ακριβως ειναι το firmware, μην με πιεζετε :P

 

Easy way out (a.k.a. reference στον καθηγητή Tannebaum)

Στην 3η έκδοση του Modern Operating Systems θυμάμαι οτι σίγουρα υπάρχει ένας ορισμός για το τί είναι firmware. Δέν έχω το βιβλίο πρόχειρο στη δουλειά και δέν μπορώ να δώσω ακριβές reference αλλά είναι εκεί, όποιος ενδιαφέρεται ας το ψάξει :P

Και έτσι ξεμπερδεύεις με τους ορισμούς mrgreen.png

 

 

 

Δημοσ.

NullScan, σε ευχαριστω για τον κοπο που εκανες για να γραψεις τα περι firmware. Μου γεννηθηκε μια αλλη απορια. Δεν μπορει ο κωδικας των firmwares με καποιον τροπο να ενσωματωθει στον πυρηνα? Ειναι αναγκη να υπαρχει το /lib/firmware/ με τα περιεχομενα του? Επισης η ιδια συσκευη που θελει firmware σε linux, σε windows δεν χρειαζεται κατι αλλο εκτος απο τους drivers. Σε αυτη τη περιπτωση το firmware ειναι τα .sys, .inf .cat και .dll?

Δημοσ.

Δέν είναι πρακτικό να βάλεις το binary αρχείο του firmware στον kernel ακόμα και να γινότανε. Το οτι έχεις ένα .bin αρχείο, αυτό δέν σημαίνει οτι έχεις και τον κώδικα πάντα. Αλλά ακόμα και να τον είχες, αυτός είναι κώδικας που πρέπει να γίνει binary όχι για τον kernel του λειτουργικού αλλά για τη συσκευή. Γι αυτό και είναι ξεχωριστό αρχείο το οποίο γίνεται load πάνω στη συσκευή και τρέχει εκεί.

Με λίγα λόγια ναι, πρέπει να υπάρχει το directory που έχει μέσα τα firmware files που χρειάζονται όλες οι συσκευές σου.

Σε windows αν και δέν ξέρω πάρα πολλά πράγματα για αυτό το λειτουργικό, γίνεται στις περιπτώσεις που ξέρω το ίδιο πράγμα, μέσα στο exe που σου εγκαθιστά τον driver υπάρχει και το ίδιο firmware που χρειάζεται και για το Linux. Επαναλαμβάνω, μή μπερδεύεσαι, το firmware είναι platform independent. Έχει σχέση μόνο με τη συσκευή για την οποία προορίζεται.

Δημοσ.

να ρωτήσω, ένα εκτελέσιμο αν θέλουμε ας πούμε να το κάνουμε module του kernel είναι εφικτό, και αν ναι πόσο δύσκολο ?

πρέπει να λιώσεις στο kernel tree ?

το source είναι ανοιχτό

Δημοσ.

Δεν είναι απλή η απάντηση σε αυτό που ρωτάς.

Πρώτον, δεν βάζεις ότι να 'ναι μέσα στον kernel. Πρέπει αυτό που θέλεις να γράψεις να έχει να κάνει με τη δουλειά του kernel δηλαδή την επικοινωνία με το hardware και μόνο.

Δεύτερον, υπάρχουν διαφορετικοί κανόνες που πρέπει να ακολουθήσεις όταν γράφεις kernel modules. Ένα userspace πρόγραμμα ΔΕΝ μπαίνει έτσι απλά σε kernel space και δεν θα έπρεπε. Δεν χρησιμοποιούνται οι ίδιες functions γιατί ο kernel δεν έχει καμία επαφή με την libc που τρέχει σε userland και σου δίνει το γνωστό API.

Γιατί δε μου λες ακριβώς αυτό που έχεις στο μυαλό σου για να σου δώσω κι εγώ μια πιο σαφή απάντηση;

Δημοσ.

τπτ σπουδαίο η απαραίτητο, έπεσε σαν ιδέα σε μια συζήτηση και απλά ήθελα να μου επιβεβαιώσει τις αμφιβολίες μου για το εάν γίνετε τελικά ένας γνώστης του είδους μιας και δεν σκαμπάζω από kernel

ας το αφήσουμε στην άκρη το σωστό η λάθος, να το φιλοσοφήσουμε ρε παιδί μου πώς το λένε :mrgreen:

 

το εκτελέσιμο είναι αυτό και ανάλογα σε τι stb θα μπει θα πρέπει να γίνει και το κατάλληλο compile

 

jim_p sorry φίλε

Δημοσ.

Πολύ ευχαρίστως να φιλοσοφήσουμε όσο θέλεις αλλά το θέμα είναι οτι ο kernel είναι πολύ μυστήριο θέμα του τί θα περιλαμβάνει.

Αν θέλεις να σου δώσω μιά απάντηση στην ερώτηση για το project που λές τότε αυτή είναι οτι κάποια κομμάτια του κώδικα θα μπορούσανε να περάσουνε σε kernel space αλλά σε καμία περίπτωση ολόκληρο το project.

Και αυτό συμβαίνει γιατί δέν μπορείς να περιμένεις από kernel process να σου δώσει curses GUI. Μπορείς όμως να περιμένεις να υπάρχει in-kernel ο driver για το USB interface αντί να χρησιμοποιεί την pseudo-driver-των-φτωχών libusb.

Το compile είναι αδιάφορο γιατί υπάρχουν μηχανισμοί στον kernel για cross-compile και για πολλές αρχιτεκτονικές.

Έχω τις αμφιβολίες μου για το άν βοηθάω ή μπερδεύω τον κόσμο περισσότερο με τα τελευταία μου posts unsure.gif

Δημοσ.

σε έχασα ... :cry:

δεν υπάρχει GUI για το συγκεκριμένο..

ούτε απαραίτητα χρειάζεται το libusb, είναι hardware του stb ο cardreader και πρέπει να δοθεί η εντολή σε αυτόν να ξεκινάει το oscam

α και ο kernel που παρέχετε από τις ομάδες για τα stb είναι χιλιοκουτσουρεμένος

Δημοσ.

Δέν το ξέρω το project και έριξα μιά πολύ πρόχειρη ματιά στο source οπότε μπορεί να λέω και ότι νά 'ναι αλλά τη libusb κάπου την είδα γι αυτό το είπα. Από αυτά που κατάλαβα πάντως, δέν γίνεται να περάσει όλο το souce σε kernel γιατί χρειάζεται να κάνει κάποιου είδους client-server επικοινωνία. Αυτά τα πράγματα δέν είναι δουλειά του kernel.

Το άν ο kernel που δίνει το project δέν έχει κάποιες λειτουργίες που θα ήθελες να έχεις, λύνεται. Τσιμπάς το config του kernel που σου δίνουνε (δεν χρειάζεται απαραίτητα να εχεις το .config του, μπορείς ΑΝ το έχουν συμπεριλάβει στο build να το κάνεις extract από το binary του kernel) και το χρησιμοποιείς σαν βάση για να φτιάξεις τον δικό σου.

Το έχουμε σκίσει το thread του jim_p με αυτά και με αυτά, sorry jim. Αν μπορούσε κάποιος mod να το κάνει ένα split θα ήταν μάλλον καλύτερα.

  • 1 μήνα μετά...
Δημοσ.

Αλλιως θα το κανω bump καθε 15 μερες για να μην πεσει στη 2η σελιδα :D

Πλακα πλακα, οταν το χρειαστηκα αυτες τις μερες ηταν στην 4η.

Επισκέπτης
Αυτό το θέμα είναι πλέον κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...