Gå til innhold

Kompilere linux driver i c for ESXi VMkernel


Anbefalte innlegg

Da er jeg igang med ett prosjekt for og få en sata driver til og fungere på min ESXi server.

 

Problem stilling. Hovedkort har en Marvell se6121 chip driver som ikke støttes i linux. Skal visst være ett kjent problem link

Så det som er målet mitt er og få esxi'en til og registrere driver og greie og lese disker. Helst i RAID. (Har 5 disker på 250GB som jeg skulle hatt i RAID 5)

 

 

Her er det jeg har av info om kernel

 

Kernel : VMKernel 4.1.0

Build : SMP Release build-260247

BusyBox v1.9.1-VMware-visor-klnext-2965 (2010-04-19 12:53:48 PDT) multi-call binary

 

Her stopper min kunnskap når det kommer til programmering og kompilering

 

Denne skal vel kompileres til en .o ?

 

http://git.kernel.or...b42f6e834cd39cd

 

Setter pris på all hjelp. Har søkt og søkt og finner masse stoff, men det er tydeligvis folk som kan C som skriver det meste Det stopper fort opp for meg kan du si.

 

På forhånd takk.

 

PS. Vennligst flytt post hvis i feil del av forum

Lenke til kommentar
Videoannonse
Annonse

For at en driver skal kunne kompilerer til en lastbar kjerne modul (.ko) så krever det at man har tilgang til kildekoden til den kjernen man skal kompilere for. Man trenger nødvendighvis ikke all kildekoden men man trenger header-filene (.h) som definerer alle grensesnitt og definisjoner.

 

Så de blir første spørsmål, får du tak i kildekode (kernel-source eller kernel-headers) til Vmware sin "VMKernel 4.1.0" ?

Lenke til kommentar
  • 4 uker senere...

Setter pris på all hjelp. Har søkt og søkt og finner masse stoff, men det er tydeligvis folk som kan C som skriver det meste Det stopper fort opp for meg kan du si.

 

Da er det kanskje feil forum å spørre, for jeg kan også C. :) Alle Linux drivere er skrevet i C, og alle Windows drivere ditto (sist jeg sjekket).

 

Jeg kjenner ikke til VMware og VMkernel 4.1.0, og akter ikke å titte på linken din, men her følger eksempel på hvordan du kompilerer en Linux driver.

 

Først finner vi kernel versjon på maskinen

$ uname -r
2.6.17-12-generic

 

så laster vi ned kernel header filer, som på Ubuntu er en en-linjer

$ sudo apt-get install kernel-headers-2.6.17-12

 

du må nå bli konge på maskinen (dvs. root bruker)

$ sudo bash

 

hvis du programmerer driver'n selv, så trengs to filer

# emacs Makefile
# emacs mod_example.c

 

det slipper du, så da er det bare å skrive 'make':

# make
make -C /lib/modules/2.6.17-12-generic/build M=/usr/src modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.17-12-generic'
  CC [M]  /usr/src/mod_example.o
  Building modules, stage 2.
  MODPOST
  CC      /usr/src/mod_example.mod.o
  LD [M]  /usr/src/mod_example.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.17-12-generic'

 

make filen ser noe ala sånn ut

obj-m = mod_example.o
KVERSION = $(shell uname -r)
all:
       make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
       make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean

 

resultatet av kompilering er mod_example.ko, og du kan bruke modinfo til å sjekke driver'n (fjernet navet mitt på author):

 

# modinfo mod_example.ko
filename:       mod_example.ko
license:        GPL
author:         xxxxxxxxx 
description:    Example driver
vermagic:       2.6.17-12-generic SMP mod_unload 586 REGPARM gcc-4.1
depends:
srcversion:     C1805F0A69B3AC8D81261C1

 

for å laste denne driver'n manuelt

# insmod mod_example.ko

 

for å fjerne driver'n

# rmmod mod_example.ko

 

for å installere driver'n slik at den lastes automatisk ved oppstart, så kan du prøve

# make install

 

for å se hvilke drivere som er lastet, sjekk lsmod eller kikk i /proc/modules. Meldinger driver'n skriver, kan du se via dmesg eller titt i /var/log/kern.log.

 

...meeeen hvis du ikke har root bruker på maskinen, så kommer du ingen vei.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...