Proloog(Lees: semi-nutteloze informatie.)
Op mijn servertje draai ik al een tijdje Gentoo en met plezier welteverstaan. Ook gebruik ik een monolithic kernel. Geen probleem. Geen issues met modules, modprobe, lijst met modules die geladen moet worden bij het booten, gewoon lekker clean en simpel: werkt het? Dan werkt het en dan werkt het probleemloos. Zo ook mijn servertje. Ding draait heerlijk monolithic uit z'n neus te vreten. Dit gaat niet veranderen, enige discussie omtrent dit gebeuren hoef je niet mee aan te komen. Zo ben ik bijv als wijze van "omdat het kan!" bezig met Hardened Gentoo, waarbij ook je /dev/(k)mem e.d. dichtgetimmerd wordt, gewoon je servertje lekker zo secure mogelijk krijgen, wederom, "omdat het kan". Zie het als een experiment.
Het probleem
Ik heb een USB webcam-geval welke "prima" werkt met de GSPCA-driver. Die zit prachtig in Portage en kun je gewoon `emerge`-en zodat je een kernel-module geleverd krijgt. Maar daar zit hem nu net het probleem, die module gaat natuurlijk nevernooitniet werken.
De (voorgestelde) oplossing
Nou, dat lijkt me "simpel". Een custom "patch" schrijven die "ff" de GSPCA-driver "in" de kernel bakt. Zou toch niet zó moeilijk kunnen zijn? Van een standaard-driver een module maken lijkt me lastiger, dus dan is andersom wel simpel
Helaas, in mijn zoektocht bleek het niet zó simpel te zijn. (Probeer daar maar eens op te Googlen, uiteraard krijg je alleen maar 'hoe bak/maak ik een module' als resultaten
)
Wat ik al geprobeerd heb
Nou, ik dacht, we pakken het zooitje gewoon eventjes uit en kopiëren alle broncode van "/var/tmp/portage/media-video/gspcav1-20071224/work/gspcav1-20071224/" naar de nieuwe map "/usr/src/linux/drivers/media/video/gspca/". Vervolgens nemen we "gewoon" even een kijkje in een map van een collega-driver zoals "../sn9c102/".
Wat zien we bijvoorbeeld daar?:
Die Kconfig en Makefile zien er vrij belangrijk uit. De laatste had de gspca-map al wel uiteraard, maar die eerste nog niet.
Nu staat daar niet zoveel boeiends in:
Dus die C/P-en we gewoon eventjes naar de gspca-map, veranderen USB_SN9C102 eventjes naar USB_GSPCA en klaar.
Kijken we naar de SN9C102-Makefile, dan zien we 't volgende:
Een hele lijst objecten en een obj-[y/m] op 't einde. Nou, dat kan een kind nog wel fixen.
Dus ik heb het module-gebeuren uit die GSPCA-Makefile verwijdert en hem gereduceerd tot:
('t Een en ander aan commentaar niet mee-geC/P'd)
Aangezien de originele Makefile ook slechts zo weinig qua objecten deed leek me het wel voldoende.
Enige wat nu nog hoefde, mijn inziens, was het toevoegen van de line 'source "drivers/media/video/gspca/Kconfig"' aan /usr/src/linux/drivers/media/video/Kconfig, zodat de driver ook in `make menuconfig` voor zou komen.
De issues die er nog zijn
Nu is diezelfde `make menuconfig` nogal weerbarstig. Zo staat de driver er prima in, maar alleen als module? Idem ditto voor de SN9C102-driver overigens, ik snap niet waarom. Willekeurig andere module die wel "in" de kernel kan heeft dezelfde Kconfig?
Module is prima te vinden in:
VIDEO_DEV op '=y' zetten heeft geen nut. Ook de `.config` handmatig op =y zetten heeft geen nut.
Toen ik dat laatste had gedaan en `make` draaide, sloeg ie 'em gewoon over
Sterker nog, de complete source is ook verdwenen uit de desbetreffende driver-map 
Kortom, ik heb geen flauw idee meer waar ik tegenaan loop en hoe ik verder moet
Wellicht moet ik ook wel vanalles aanpassen in de .c-files, géén idee
Bij gebrek aan How-To's ben ik gewoon wat gaan prutsen aan dingen waar ik absoluut geen verstand van heb, maar dat was al wel duidelijk geloof ik
Op mijn servertje draai ik al een tijdje Gentoo en met plezier welteverstaan. Ook gebruik ik een monolithic kernel. Geen probleem. Geen issues met modules, modprobe, lijst met modules die geladen moet worden bij het booten, gewoon lekker clean en simpel: werkt het? Dan werkt het en dan werkt het probleemloos. Zo ook mijn servertje. Ding draait heerlijk monolithic uit z'n neus te vreten. Dit gaat niet veranderen, enige discussie omtrent dit gebeuren hoef je niet mee aan te komen. Zo ben ik bijv als wijze van "omdat het kan!" bezig met Hardened Gentoo, waarbij ook je /dev/(k)mem e.d. dichtgetimmerd wordt, gewoon je servertje lekker zo secure mogelijk krijgen, wederom, "omdat het kan". Zie het als een experiment.
Het probleem
Ik heb een USB webcam-geval welke "prima" werkt met de GSPCA-driver. Die zit prachtig in Portage en kun je gewoon `emerge`-en zodat je een kernel-module geleverd krijgt. Maar daar zit hem nu net het probleem, die module gaat natuurlijk nevernooitniet werken.
De (voorgestelde) oplossing
Nou, dat lijkt me "simpel". Een custom "patch" schrijven die "ff" de GSPCA-driver "in" de kernel bakt. Zou toch niet zó moeilijk kunnen zijn? Van een standaard-driver een module maken lijkt me lastiger, dus dan is andersom wel simpel
Wat ik al geprobeerd heb
Nou, ik dacht, we pakken het zooitje gewoon eventjes uit en kopiëren alle broncode van "/var/tmp/portage/media-video/gspcav1-20071224/work/gspcav1-20071224/" naar de nieuwe map "/usr/src/linux/drivers/media/video/gspca/". Vervolgens nemen we "gewoon" even een kijkje in een map van een collega-driver zoals "../sn9c102/".
Wat zien we bijvoorbeeld daar?:
1x: [i]built-in.o[/] 1x: [i]Kconfig[/] 1x: [i]Makefile[/] 4x: diverse [i].h[/]-files 13x: diverse [i].c[/]-files
Die Kconfig en Makefile zien er vrij belangrijk uit. De laatste had de gspca-map al wel uiteraard, maar die eerste nog niet.
Nu staat daar niet zoveel boeiends in:
config USB_SN9C102
tristate "USB SN9C1xx PC Camera Controller support"
depends on VIDEO_V4L2
---help---
BlablaDus die C/P-en we gewoon eventjes naar de gspca-map, veranderen USB_SN9C102 eventjes naar USB_GSPCA en klaar.
Kijken we naar de SN9C102-Makefile, dan zien we 't volgende:
sn9c102-objs := sn9c102_core.o \
[me]knip *[/]
sn9c102_tas5130d1b.o
obj-$(CONFIG_USB_SN9C102) += sn9c102.oEen hele lijst objecten en een obj-[y/m] op 't einde. Nou, dat kan een kind nog wel fixen.
Dus ik heb het module-gebeuren uit die GSPCA-Makefile verwijdert en hem gereduceerd tot:
VERSION = 01.00.20 DEFINES = DEFINES += -DGSPCA_ENABLE_DEBUG #DEFINES += -DGSPCA_ENABLE_REGISTERPLAY DEFINES += -DGSPCA_ENABLE_COMPRESSION DEFINES += -DVID_HARDWARE_GSPCA=0xFF -DGSPCA_VERSION=\"$(VERSION)\" EXTRA_CFLAGS += $(DEFINES) gspca-objs := gspca_core.o decoder/gspcadecoder.o obj-$(CONFIG_USB_GSPCA) += gspca.o
('t Een en ander aan commentaar niet mee-geC/P'd)
Aangezien de originele Makefile ook slechts zo weinig qua objecten deed leek me het wel voldoende.
Enige wat nu nog hoefde, mijn inziens, was het toevoegen van de line 'source "drivers/media/video/gspca/Kconfig"' aan /usr/src/linux/drivers/media/video/Kconfig, zodat de driver ook in `make menuconfig` voor zou komen.
De issues die er nog zijn
Nu is diezelfde `make menuconfig` nogal weerbarstig. Zo staat de driver er prima in, maar alleen als module? Idem ditto voor de SN9C102-driver overigens, ik snap niet waarom. Willekeurig andere module die wel "in" de kernel kan heeft dezelfde Kconfig?
Module is prima te vinden in:
-> Device Drivers
-> Multimedia devices
-> Video For Linux (VIDEO_DEV [=m])
-> Video capture adapters (VIDEO_CAPTURE_DRIVERS [=y])VIDEO_DEV op '=y' zetten heeft geen nut. Ook de `.config` handmatig op =y zetten heeft geen nut.
Toen ik dat laatste had gedaan en `make` draaide, sloeg ie 'em gewoon over
Kortom, ik heb geen flauw idee meer waar ik tegenaan loop en hoe ik verder moet
Wellicht moet ik ook wel vanalles aanpassen in de .c-files, géén idee