[Megoldva] A modprobe mcp320x parancs "unknown symbol in module, or unknown parameter" hibával tér vissza

Fórumok

Sziasztok!

 

Van nekem egy Intel Galileo Gen2 vezérlőm, amin Yocto Linux fut. Erre a vezérlőre szabványos Arduino Shield-eket, lehet tenni.

Eddig minden rendben. Vettem hozzá egy MCP3201 ADC-t tartalmazó shield-et, ami SPI-n kommunikál(na) a vezérlővel.

A probléma, hogy az itt található forrásból fordított kernel modul a címben említett hibával tér vissza.

 

A parancs amit kiadok:

modprobe mcp320x

A dmesg sem sokkal bőbeszédűbb:

[ 5349.763606] mcp320x_driver: Unknown symbol mcount (err 0)

 

Ha jól értem kell a modprobe parancsnak plusz paraméter, de nem tudom, hogy milyen paraméter=érték (parameter=value) párosra van szüksége.

 

Találtam doksit is, de sokat segítene ha valaki tapasztaltabb meg tudná mondani, hogy tényleg csak a paraméterezést rontom el, vagy más a hiba? Plusz az is jól jönne, hogy hogyan paraméterezzem helyesen a modeprobe parancsot?

 

Az overaly nevezetű programmal elvileg egyszerű lenne a paraméterezés, viszont azt a Yocto linux polky verziójára nem találtam meg.

 

Szerk.:

Végül sikerült megoldani. :)

Újrafordítottam az imaget és hozzá a modult, így már működött. Tehát vl-nek volt igaza a hibával kapcsolatban. Köszönöm a segítséget!

 

Szerk II.:

Azért azt ideírom még, hogy ne legyen félrevezető: Sikerült továbbá 3.14-es kernellel fordítani, így csak egy sort kellett módosítani az eredeti kódon, az is csak egy include.

Hozzászólások

A dirver nincs véletlenül benne itt:

grep mcp  /etc/modprobe.d/*

 

Ha jól értem kell a modprobe parancsnak plusz paraméter

Nem, a hibaüzenet nem ezt jelenti. Hanem azt, a megadott nevű függvény/változó hiányzik neki. Ennek vagy a kernelben, vagy egy másik modulban kéne definiálva lennie. Tehát vagy nem jó kernelhez sikerült fordítani (esetleg a kernel fordítási opciók nem stimmelnek), vagy egy másik modulra lenne szüksége.
 

Háttöö... az van, hogy a fordítás során azt gondolja, hogy a kernelben majd lesz ilyen függvény/változó, hiszen lefordult a modul. Aztán runtime már nem találja. Ha a fordításnál sincs ott a függvény/változó, akkor a fordításnál kéne hibát kapni. Ergó vagy egy modult be kellett volna tölteni, amit nem tettél meg, ezért hiányzik a függvény/változó, vagy a modult egy másik kernelhez sikerült fordítani, mint ami fut. Az egyezéshez nem elég, hogy ugyanaz legyen a kernelverzió, hanem a kernel confignak is egyeznie kell. Sőt, ha valaki más gcc verziót használ, abból is lehet galiba. Tehát ugyanaz a kernel forrás, ugyanazokkal a config opciókkal, ugyanazzal a gcc-vel.
 

modinfo mcp320x filename: /lib/modules/5.0.0-31-generic/kernel/drivers/iio/adc/mcp320x.ko license: GPL v2 description: Microchip Technology MCP3x01/02/04/08 and MCP3550/1/3 author: Oskar Andero srcversion: 2132041D64E02EAE44E7397 alias: spi:mcp3553 alias: spi:mcp3551 alias: spi:mcp3550-60 alias: spi:mcp3550-50 alias: spi:mcp3301 alias: spi:mcp3208 alias: spi:mcp3204 alias: spi:mcp3202 alias: spi:mcp3201 alias: spi:mcp3008 alias: spi:mcp3004 alias: spi:mcp3002 alias: spi:mcp3001 depends: industrialio retpoline: Y intree: Y name: mcp320x vermagic: 5.0.0-31-generic SMP mod_unload signat: PKCS#7 signer: sig_key: sig_hashalgo: md4 Szerintem ez nem paraméterezhető, viszont ez rendben van? *** depends: industrialio Szerk.: válaszolok magamnak: ha eltávolítom az industrialio modult, akkor ez van: modprobe: ERROR: could not insert 'mcp320x': Unknown symbol in module, or unknown parameter