Jon Masters пишет: >> Some of modules have no MODULE_DEVICE_TABLE(...) and do not export hardware >> ("pnp") aliases, but have all required data to do this. I found it after >> ioatdma module (currently fixed in tree). This information may be useful to >> hardware/modules detection. > Thanks for the patch. linux-modules is mostly for userspace > module-init-tools (modprobe, etc.) however I will take a look at your > patch. You might also want to send this to Rusty Russell (the kernel > side maintainer) for his opinion prior to/at the same time as posting to > the LKML upstream. Thanks again. After post, I found next related problem: some of modules (scx200_acb.c and pch_dma.c) have not NULL-terminated pci_device_id record. Prior I just exclude scx200_acb, now pch_dma is new (in 2.6.36). To be correct, pch_dma exclusion must be added to patch-script or both modules may be fixed - just add array element: static const struct pci_device_id ... = { ... { 0, } } Or change in script: */scx200_acb.c|*/mdio-gpio.c) to */scx200_acb.c|*/mdio-gpio.c|*/pch_dma.c) (attached) In case scx200_acb.c & pch_dma.c will be fixed - this exclusion may be removed (mdio-gpio.c was buggy only in older kernels). PS Thanks, now posting all to Rusty Russel. -- WBR, Dzianis Kahanovich AKA Denis Kaganovich, http://mahatma.bspu.unibel.by/
#!/bin/bash ## (c) Denis Kaganovich ## v4 ## grep-pcre required #BUS="pci" BUS="\w+" STR="^(?:static\s+)?(?:const\s+)?struct\s+" fnd(){ grep -Prhl "${STR}${BUS}_device_id\s+" $1 --include="*.c" | while read i ; do local bus=`grep -Prho "${STR}${BUS}_device_id.*\s+" $i` bus="${bus#*struct }" local n="${bus%%[*}" n="${n%%=*}" n="${n##*device_id }" n="${n// }" bus="${bus%%_device_id*}" grep -Pq "^module_init\s*\(" $i || continue grep -q "MODULE_DEVICE_TABLE" $i && continue local ii="${i#$1}" ii="${ii#/}" # add NULL element into scx200_acb.c & pch_dma.c pci_device_id and may remove "case" case $ii in */scx200_acb.c|*/mdio-gpio.c|*/pch_dma.c) echo "BROKEN: $bus: $ii" continue ;; esac bus="${bus%%_*}" local BU case "$bus" in sdio)BU=MMC;; *)BU="${bus^^}";; esac if grep -Prq "^\s*(?:menu)?config\s+$BU(?:\s.*)?$" $1 --include="Kconfig*"; then echo "Fixing: $BU: ($n) $ii" sed -i -e 's/^\(module_init.*\)$/\n#ifdef CONFIG_'"$BU"'\nMODULE_DEVICE_TABLE('"$bus, $n"');\n#endif\n\n\1/' $i else echo "Fixing: $bus: ($n) $ii" sed -i -e 's/^\(module_init.*\)$/\nMODULE_DEVICE_TABLE('"$bus, $n"');\n\n\1/' $i fi done } [[ -z "$1" ]] && echo "$0 <path_to_kernel>" && exit 1 fnd $*