Feljlesztők segítségét kérném, Kernel modul fordítás

 ( PcZolee | 2014. szeptember 13., szombat - 15:24 )

Sziasztok.

Adott egy program, a neve smartcam (http://sourceforge.net/projects/smartcam/) ez arra való, hogy a telefonunk (lehet az androidos vagy akár symbian) kamerájának képét wifin vagy bt-n használhassuk linux alatt (mint egy webkamerát).
Ahhoz, hogy ez működjön szükség van egy kernel modulra. Ezzel nincs is gond, eddig 2.6.35 alatt lefordult és működött is. Most viszont frissítettem a kernelt 3.14-re (egyébként egy 64bit-es ubuntu lucid-ról van szó), mégiscsak számos újdonság van benne ;). De ez alatt a kernel alatt nem fordul :(.
Innen töltöttem le: https://github.com/kripton/smartcam_linux mert ami a fenti oldalon van, az elég régi.

Tehát a konkrét hiba:

$ make -C /lib/modules/`uname -r`/build M=`pwd`
make: Entering directory `/usr/src/linux-3.14.18'
LD /tmp/smartcam_linux-master/driver_src/built-in.o
CC [M] /tmp/smartcam_linux-master/driver_src/smartcam.o
/tmp/smartcam_linux-master/driver_src/smartcam.c:585: warning: initialization from incompatible pointer type
/tmp/smartcam_linux-master/driver_src/smartcam.c:594: warning: initialization from incompatible pointer type
/tmp/smartcam_linux-master/driver_src/smartcam.c:612: error: unknown field ‘current_norm’ specified in initializer
/tmp/smartcam_linux-master/driver_src/smartcam.c:612: warning: initialization makes pointer from integer without a cast
make[1]: *** [/tmp/smartcam_linux-master/driver_src/smartcam.o] Error 1
make: *** [_module_/tmp/smartcam_linux-master/driver_src] Error 2
make: Leaving directory `/usr/src/linux-3.14.18'

Mivel úgy tudom ez alatt a kernel alatt már nincs "current_norm", ezért azt a sort kikkommenteztem, így van pár warning, de lefordul:

$ make -C /lib/modules/`uname -r`/build M=`pwd`
make: Entering directory `/usr/src/linux-3.14.18'
CC [M] /tmp/smartcam_linux-master/driver_src/smartcam.o
/tmp/smartcam_linux-master/driver_src/smartcam.c:585: warning: initialization from incompatible pointer type
/tmp/smartcam_linux-master/driver_src/smartcam.c:594: warning: initialization from incompatible pointer type
Building modules, stage 2.
MODPOST 1 modules
CC /tmp/smartcam_linux-master/driver_src/smartcam.mod.o
LD [M] /tmp/smartcam_linux-master/driver_src/smartcam.ko
make: Leaving directory `/usr/src/linux-3.14.18'

A modinfo szerint:

$ modinfo ./smartcam.ko
filename: ./smartcam.ko
license: Dual BSD/GPL
author: Ionut Dediu
description: Smartphone Webcam
srcversion: 9C88B7E7D9A164D69738815
depends: videodev
vermagic: 3.14.18-pcz-r2 SMP mod_unload modversions

A videodev term be van töltve.

Ha viszont megpróbálom betölteni ezt kapom:

$ sudo insmod ./smartcam.ko
insmod: error inserting './smartcam.ko': -1 Invalid parameters

A dmesg-ben meg ezt látom:

[90514.815289] ------------[ cut here ]------------
[90514.815308] WARNING: CPU: 0 PID: 3328 at drivers/media/v4l2-core/v4l2-dev.c:779 __video_register_device+0x58/0xd7a [videodev]()
[90514.815311] Modules linked in: smartcam(O+) webcamstudio(O) droidcam(O) pl2303 usbserial nls_utf8 isofs bluetooth 6lowpan_iphc b43 usblp ppp_async crc_ccitt snd_usb_audio snd_usbmidi_lib pwc videobuf2_core v4l2_common videobuf2_vmalloc videobuf2_memops videodev media ctr ccm binfmt_misc pci_stub vboxpci(O) vboxnetadp(O) vboxnetflt(O) vboxdrv(O) arc4 vhba(O) coretemp snd_hda_codec_conexant snd_hda_codec_generic snd_hda_intel snd_hda_codec mac80211 snd_hwdep snd_pcm_oss snd_mixer_oss snd_pcm psmouse snd_seq_dummy cfg80211 snd_seq_oss snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq snd_timer snd_seq_device lpc_ich mfd_core snd soundcore ssb sdhci_pci sdhci led_class hp_wmi serio_raw msr sparse_keymap phc_intel(O) lzo i915 fbcon tileblit font bitblit softcursor drm_kms_helper ahci e100 mii drm i2c_algo_bit libahci video intel_agp intel_gtt [last unloaded: webcamstudio]
[90514.815395] CPU: 0 PID: 3328 Comm: insmod Tainted: G W O 3.14.18-pcz-r2 #2
[90514.815398] Hardware name: Hewlett-Packard Presario V6000 (RY564EA#ABU) /30BB, BIOS F.2E 03/22/2010
[90514.815401] 000000000000030b ffff88001c07dc58 ffffffff814feab4 000000000000030b
[90514.815406] 0000000000000000 ffff88001c07dc98 ffffffff8103bca3 00000000000002d2
[90514.815411] ffffffffa0571736 ffffffffa029f7d0 00000000ffffffff 0000000000000000
[90514.815416] Call Trace:
[90514.815425] [] dump_stack+0x49/0x5d
[90514.815432] [] warn_slowpath_common+0x81/0x9b
[90514.815440] [] ? __video_register_device+0x58/0xd7a [videodev]
[90514.815444] [] warn_slowpath_null+0x1a/0x1c
[90514.815451] [] __video_register_device+0x58/0xd7a [videodev]
[90514.815458] [] ? __vmalloc_node+0x35/0x37
[90514.815464] [] smartcam_init+0x58/0x80 [smartcam]
[90514.815472] [] ? 0xffffffffa02a1fff
[90514.815477] [] do_one_initcall+0x84/0x10a
[90514.815488] [] ? __blocking_notifier_call_chain+0x5b/0x67
[90514.815494] [] load_module+0x137d/0x1645
[90514.815498] [] ? module_unload_free+0xd8/0xd8
[90514.815504] [] ? __vmalloc_node+0x35/0x37
[90514.815508] [] SyS_init_module+0xb4/0xb9
[90514.815514] [] system_call_fastpath+0x16/0x1b
[90514.815518] ---[ end trace 2ffbd8ef55355ba7 ]---
[90514.815521] smartcam:(insmod) load status: -22

A drivers/media/v4l2-core/v4l2-dev.c fájl 779-ig sora ez:

/* the v4l2_dev pointer MUST be present */
if (WARN_ON(!vdev->v4l2_dev))
return -EINVAL;

Van már két video eszköt (/dev/video0 és video1), de nem hinném, hogy ez gond lenne (a azokat kiszedem akkor is ez van).

Szerintetek mi lehet a gond, valahogy működésre lehet ezt bírni?

Köszönöm

u.i.: Tudom, hogy van más program, amivel ezt meg tudom oldani, az megy is, de szeretném ha ez is működne.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Több mint 1800 olvasás és senkinek semmi ötlete? Ilyen bonyolult a dolog?

<= Powered By Ubuntu & Gentoo Linux =>

'Software is like sex: It's better when it's free!'
By Linus Torvalds

Igen. Ilyen bonyolult. 2.6.35 és 3.14 közt irgalmatlan sok változás történt a kernelben.

Persze, ez rendben van, de pl 3.0.4 alatt is működik... Szóval lehet, hogy csak az utóbbi pár kernel-ben van vmi változás, ami miatt ezzel már nem megy. Na, mindegy, írtam a fejlesztőnek is, meglátjuk, hátha válaszol...

<= Powered By Ubuntu & Gentoo Linux =>

'Software is like sex: It's better when it's free!'
By Linus Torvalds

Most fordítottam le 3.8.0 alatt, és lefordult rendben, működik is:


# modinfo ./smartcam.ko
filename: smartcam.ko
license: Dual BSD/GPL
author: Ionut Dediu
description: Smartphone Webcam
srcversion: 47533F5C18D20DF202F1571
depends: videodev
vermagic: 3.8.0-35-generic SMP mod_unload modversions 686

Dmesg:


[8644514.810094] Linux video capture interface: v2.00
[8644523.255752] smartcam:(insmod) load status: 0
[8644523.361323] smartcam:(v4l_id) smartcam_open called
[8644523.362135] smartcam:(v4l_id) vidioc_querycap called
[8644523.362707] smartcam:(v4l_id) smartcam_release called

<= Powered By Ubuntu & Gentoo Linux =>

'Software is like sex: It's better when it's free!'
By Linus Torvalds

Aztán ne lepődj meg random összeomlásokon...

Miért? Látsz valami erre utalót?

<= Powered By Ubuntu & Gentoo Linux =>

'Software is like sex: It's better when it's free!'
By Linus Torvalds

Én elkezdtem meghegeszteni hétvégén, de egy óra és két kernelpanic miatti reboot után feladtam.

Szia.

Köszönöm, hogy fáradoztál vele. Úgy fest bonyolultabb a dolog, mint gondoltam :(.

<= Powered By Ubuntu & Gentoo Linux =>

'Software is like sex: It's better when it's free!'
By Linus Torvalds

Nos, ha valakit érdekel, itt a patch: https://sourceforge.net/p/smartcam/bugs/_discuss/thread/8968ed2a/5ba3/attachment/smartcam-1.4.0_v3.patch

Ehhez a verzióhoz való: http://sourceforge.net/projects/smartcam/files/smartcam_linux/smartcam_linux_v_1.4.0/smartcam-1.4.0.tar.gz

Úgy néz ki, minden ok, és teszi a dolgát a progi!

<= Powered By Ubuntu & Gentoo Linux =>

'Software is like sex: It's better when it's free!'
By Linus Torvalds