С NEC подключил тяжёлую артилерию и пересобрал ядро самостоятельно. Ничего сложного в этой задаче нет, всё делается по инструкции . После сборки радостно побежал включать систему, тыкать в USB, и ничего не произошло. Каково же было моё удивление, когда lsmod не вывел ничего! Хотя собранные модули я переписал, в нужную папочку. Начал разбираться. За загрузку модулей отвечает скрипт
/etc/init.d/modutils.sh
Содержимое скрипта такое:
Как я понимаю делается deprobe -a , которое уже modprobe указывает где брать модули, а потом в цикле осуществляется их загрузка. Отрабатывает скрипт тихо, вот так:
mobilepro9xx:~# /etc/init.d/modutils.sh
Calculating module dependencies ...
Loading modules:
т.е. ничего не делает. Справедливости ради замечу, несколько моментов, совсем уж тупых:
Т.е. файл есть, он прописан, и даже работает.Сейчас после шаманств:
1.переписал файл /lib/modules/2.6.34-mp900c/modules.dep в /etc/modules/
2. Попробовал немного другой скрипт, взятый из rootfs Psiona
начали грузится некоторые модули, и то я не понимаю как и почему загрузились именно эти модули?
Хотя
Такая же хрень, кстати обнаружена в Джорнада. Внимание вопрос:
1. Как загрузить ВСЕ модули в системе? И может я что-то не понимаю, ведь есть обязательные модули, а есть всомогательные (как например usbmon). Как осуществляется их разделение?
2. Какие могут быт причины не загрузки модулей? В общем-то получается, что загруженны какие-то случайные модули, а не весь глобальный их список.
3. Может я чего-то не учитываю, и механизм автозагрузки модулей работает хитрее, чем скрипт /etc/init.d/modules.sh?
UPD. Спасибо коллеге с работы, скрипт загрузки все модулей выглядит вот так:
modprobe -l | while read x; do m='basename "$x"'; m=${m%%.ko}; echo $m; modprobe $m; done
/etc/init.d/modutils.sh
Содержимое скрипта такое:
#!/bin/sh LOAD_MODULE=modprobe [ -f /proc/modules ] || exit 0 [ -f /etc/modules ] || exit 0 [ -e /sbin/modprobe ] || LOAD_MODULE=insmod if [ ! -e /sbin/depmod ]; then [ -f /lib/modules/`uname -r`/modules.dep ] || LOAD_MODULE=insmod else [ "$VERBOSE" != no ] && echo "Calculating module dependencies ..." depmod -Ae fi [ "$VERBOSE" != no ] && echo -n "Loading modules: " (cat /etc/modules; echo; ) | while read module args do case "$module" in \#*|"") continue ;; esac [ "$VERBOSE" != no ] && echo -n "$module " eval "$LOAD_MODULE $module $args >/dev/null 2>&1" done [ "$VERBOSE" != no ] && echo exit 0
Как я понимаю делается deprobe -a , которое уже modprobe указывает где брать модули, а потом в цикле осуществляется их загрузка. Отрабатывает скрипт тихо, вот так:
mobilepro9xx:~# /etc/init.d/modutils.sh
Calculating module dependencies ...
Loading modules:
т.е. ничего не делает. Справедливости ради замечу, несколько моментов, совсем уж тупых:
mobilepro9xx:~# uname -r 2.6.34-mp900c mobilepro9xx:~# ls /lib/modules/2.6.34-mp900c/ build modules.builtin modules.dep.bin modules.isapnpmap modules.seriomap modules.usbmap kernel modules.builtin.bin modules.devname modules.ofmap modules.softdep source modules.alias modules.ccwmap modules.ieee1394map modules.order modules.symbols modules.alias.bin modules.dep modules.inputmap modules.pcimap modules.symbols.bin mobilepro9xx:~# cat /lib/modules/2.6.34-mp900c/modules.dep /lib/modules/2.6.34-mp900c/kernel/drivers/usb/serial/ch341.ko: /lib/modules/2.6.34-mp900c/kernel/drivers/usb/serial/usbserial.ko ....
Т.е. файл есть, он прописан, и даже работает.Сейчас после шаманств:
1.переписал файл /lib/modules/2.6.34-mp900c/modules.dep в /etc/modules/
2. Попробовал немного другой скрипт, взятый из rootfs Psiona
#! /bin/sh
# /etc/init.d/modutils: loads the appropriate modules in `boot'.
PATH="/sbin:/bin:/usr/sbin:/usr/bin"
[ -f /proc/modules ] || exit 0
[ -e /sbin/depmod ] || exit 0
echo -n "Calculating module dependencies... "
depmod -a > /dev/null
echo "done."
# Loop over every line in /etc/modules.
echo -n 'Loading modules: '
(cat /etc/modules; echo) | # make sure there is a LF at the end
while read module args
do
case "$module" in
\#*|"") continue ;;
esac
echo -n "$module "
modprobe $module $args
done
echo
#
# Just in case a sysadmin prefers generic symbolic links in
# /lib/modules/boot for boot time modules we will load these modules
#
if [ -n "`modprobe -l -t boot`" ]
then
modprobe -a -t boot \*
fi
exit 0
начали грузится некоторые модули, и то я не понимаю как и почему загрузились именно эти модули?
mobilepro9xx:~/tmp# lsmod Module Size Used by nls_iso8859_1 3047 1 nls_cp437 4571 1 pxaficp_ir 7545 0 irda 159816 1 pxaficp_ir isp116x_hcd 17727 0
Хотя
mobilepro9xx:~/tmp# modprobe -l /lib/modules/2.6.34-mp900c/kernel/drivers/usb/serial/ch341.ko /lib/modules/2.6.34-mp900c/kernel/drivers/usb/serial/option.ko /lib/modules/2.6.34-mp900c/kernel/drivers/usb/serial/usbserial.ko /lib/modules/2.6.34-mp900c/kernel/drivers/usb/host/isp116x-hcd.ko /lib/modules/2.6.34-mp900c/kernel/drivers/usb/storage/usb-storage.ko /lib/modules/2.6.34-mp900c/kernel/drivers/usb/class/usblp.ko /lib/modules/2.6.34-mp900c/kernel/drivers/usb/mon/usbmon.ko /lib/modules/2.6.34-mp900c/kernel/drivers/i2c/i2c-core.ko /lib/modules/2.6.34-mp900c/kernel/drivers/i2c/algos/i2c-algo-bit.ko /lib/modules/2.6.34-mp900c/kernel/drivers/i2c/i2c-dev.ko /lib/modules/2.6.34-mp900c/kernel/drivers/i2c/busses/i2c-gpio.ko ... УЙМА дров
Такая же хрень, кстати обнаружена в Джорнада. Внимание вопрос:
1. Как загрузить ВСЕ модули в системе? И может я что-то не понимаю, ведь есть обязательные модули, а есть всомогательные (как например usbmon). Как осуществляется их разделение?
2. Какие могут быт причины не загрузки модулей? В общем-то получается, что загруженны какие-то случайные модули, а не весь глобальный их список.
3. Может я чего-то не учитываю, и механизм автозагрузки модулей работает хитрее, чем скрипт /etc/init.d/modules.sh?
UPD. Спасибо коллеге с работы, скрипт загрузки все модулей выглядит вот так:
modprobe -l | while read x; do m='basename "$x"'; m=${m%%.ko}; echo $m; modprobe $m; done