Spørgsmål:
Optagelse af OS / hardwarekommunikation / reverse engineering-drivere
Fakhri Zulkifli
2015-08-15 22:00:19 UTC
view on stackexchange narkive permalink

Mit hovedspørgsmål er, hvordan open source-samfundet omvendt udvikler Windows-drivere (for eksempel videokort) til at omskrive dem under linux.

Links til ressourcer er fine, jeg forventer ikke en tutorial om driverudvikling i et svar. Men i det mindste skal jeg pege i den rigtige retning.

Dette er faktisk blevet bedt om i et andet stackoverflow-underdomæne. Den originale forfatter får dog ikke det rigtige svar, og jeg vil også gerne vide om denne reverse engineering-metode. Jeg håber, at dette spørgsmål ikke betragtes som duplikat.

Vilde gæt: statisk analyse af .sys-filer? Ligesom ethvert andet software
Tilbage til det tidspunkt, hvor CPU og anden tredjepartshardware endnu ikke er integreret. Jeg spekulerer på, hvordan de omvendt konstruerer hardwaren for måske at opfange noget signal eller output fra hardwaren og bruge den som en afbrydelse. Det er ikke som omvendt engineering almindelig software AcidShout
godt, alt hvad du kan vende softwaremæssigt, er den driver, der kommunikerer dit system med din GPU ... som faktisk beskriver, hvordan du har brug for at kommunikere med driveren, så den gør, hvad du vil have den til at gøre. Du skal bare kontrollere, hvad førerkoden laver for hvert signal, den modtager, og hvad skal der ske for at den kan sende et signal. Jeg tror ikke * du kan gå længere. Eller måske misforstår jeg dig? (At vende om selve hardwaren er ikke en god idé, da du har Windows-drivere, som allerede har alt hvad du behøver for at forstå driveren indeni)
Mit spørgsmål er, om der er en proprietær enhed, som sælgeren ikke afslører noget instruktionsregister eller afbrydelseskoden. Hvordan kan jeg få den IR, indtil videre, hvad jeg forstår, er, at jeg skal manuelt trykke på hvert enkelt I / O-system på den enhed og overvåge svaret (Live kernel debugging). Baseret på svarkoden kan jeg begynde at opbygge driveren. Selvfølgelig skal du være dygtig inden for EE for at udløse output fra selve enheden. Vide, hvordan enheden tændes ved at levere jævnstrøm til kortet. Jeg tror, ​​at det er afgørende at kunne forstå elektronikdele.
En svar:
Edward
2015-08-18 15:53:42 UTC
view on stackexchange narkive permalink

Det afhænger af den bestemte grænseflade, men den generelle idé er ofte den samme og involverer normalt IKKE adskillelse af driveren. Årsagen er, at demonteringsmetoden til reverse engineering ikke betragtes som lovlig i alle jurisdiktioner. Her er de sædvanlige trin:

1. Kontakt producenten for at få de nødvendige oplysninger

Den mest direkte tilgang er naturligvis også den nemmeste, hvis den lykkes. Nogle producenter er mere samarbejdsvillige end andre. For nogle typer enheder, selvom producenten af ​​en enhed ikke er samarbejdsvillig, er producenten af ​​større chips på enheden nogle gange villige til at dele nogle oplysninger, og det kan hjælpe.

2. Få generel information om enheden ved observation

En masse information kan fås blot ved observation. For eksempel, hvad er hovedkomponenterne i enheden? Kan vi slå delnumre op og finde datablad til dem? Er denne version n + 1 og findes der allerede en version n driver til Linux? Giver manualen eller Windows-driverens brugergrænseflade vigtige spor om registre, indstillinger eller funktioner? Understøtter Windows-driveren flere enheder? Dette kan være en indikation af, at enhederne muligvis ligner hinanden, og hvis der allerede er en Linux-driver til en af ​​dem, kan det hjælpe.

3. Optag kommunikation med enheden til analyse

For nogle enheder, såsom serielle porte eller USB, er det normalt ret ligetil at fange kommunikationen mellem enhedsdriveren og enheden. (Se Sådan reverse engineer simpel USB-enhed [windows -> linux]) Optagelse af kommunikation til videokort kan ske på et par måder. En måde, det kan gøres på, er ved at bruge en proprietær Linux-driver og derefter opfange opfordringer til det, som med værktøjet REnouveau. Deling af data er vigtigt, og det er en af ​​grundene til, at så mange drivere er blevet skrevet med succes til Linux. En af de store styrker ved open source-samfundet er, at der er mennesker over hele verden, der kan og samarbejder med en sådan indsats.

4. Forsøg på at duplikere kommunikationen under Linux

Dette er et spørgsmål om at skrive kode og prøve resultatet. Fordi Linux allerede har et stort sæt drivere, er det ofte nemmest at starte med noget lignende og ændre det. Da alt er open source, er tinkering ikke kun tilladt men opmuntret! På andre enheder end videokort kan man ofte skrive brugerrumskode for at forsøge at udøve enheden og for at indsamle data og prøve eksperimenter. I sidste ende er en ægte driver skrevet, ideelt som et kernemodul, for at tillade aflæsning og genindlæsning. Dette fremskynder udviklingscyklussen over at skulle genstarte efter enhver driverændring (jeg kigger på DU , Windows!)

5. Test grundigt

Test og bugfixing er generelt vigtigt for open source-software, og det gælder bestemt for enhedsdrivere såvel som alt andet. For det første, for at blive inkluderet i kernen, ser andre udviklere på koden i en undertiden brutal, men altid anvendelig proces kaldet code review. Andre erfarne udviklere ser på kildekoden og påpeger svagheder i koden, mangler i antagelser og endda skrivefejl i kommentarer og formateringsproblemer. Når nok folk har gjort det, prøver folk med den aktuelle enhed faktisk det på deres hardware og rapporterer fejl eller uregelmæssigheder. Dette viser ofte problemer som versionforskelle (f.eks. Var der flere versioner af den fysiske enhed, men alle solgt som den samme ting) og enhedskonflikter (både enhed A og enhed B fungerer godt individuelt, men mislykkes, når begge er tilsluttet).

I sidste ende er resultatet en skinnende ny fejlfri open source-driver, som alle kan bruge. (Eller det er alligevel målet!)

Jeg håbede på teknisk svar, men det giver mig en lille idé om processen. Jeg tror, ​​jeg fik det, meget tak Edward. Må Gud velsigne dig: D
Det er svært at give et detaljeret teknisk svar, fordi spørgsmålet er meget bredt, og der er et meget stort udvalg af anvendelige værktøjer og teknikker. Hvis du stiller et andet spørgsmål med et mere fokuseret omfang, vil du sandsynligvis få mere specifikke og mere tekniske svar.


Denne spørgsmål og svar blev automatisk oversat fra det engelske sprog.Det originale indhold er tilgængeligt på stackexchange, som vi takker for den cc by-sa 3.0-licens, den distribueres under.
Loading...