Как вставить зависимые модули в ядро? - PullRequest
0 голосов
/ 06 октября 2018

У меня есть Parrot AR.Drone 2.0 под управлением Ubuntu, и я хочу подключить его к одноплатному компьютеру с помощью кабеля.На дроне нет портов Ethernet, поэтому я решил использовать адаптер USB-Ethernet (D-Link DUB-E100).После ввода uname -a в терминал я получаю следующую строку:

Linux uclibc 2.6.32.9-g980dab2 #1 PREEMPT Mon Oct 6 11:50:23 CEST 2013 armv7l GNU/Linux

Я следовал этой статье и вместо модуля для Wi-Fi я использовал модуль для адаптера USB-Ethernet.

Вот как я редактировал Makefile:

TARGET  = dub_e100
OBJS    = dub_e100.o
MDIR    = drivers/net/usb
KDIR    = /home/artemii/Downloads/linux

EXTRA_CFLAGS = -DEXPORT_SYMTAB
PWD = $(shell pwd)
DEST = /home/artemii/Downloads/linux/$(MDIR)

obj-m      := $(TARGET).o

default:
    make -C $(KDIR) SUBDIRS=$(PWD) modules

$(TARGET).o: $(OBJS)
    $(LD) $(LD_RFLAG) -r -o $@ $(OBJS)

install:
    su -c "cp -v $(TARGET).ko $(DEST) && /sbin/depmod -a"

clean:
    $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean

.PHONY: modules clean

-include $(KDIR)/Rules.make

После этого я скомпилировал ядро ​​со следующими строками:

make
export ARCH=arm
export CROSS_COMPILE=arm-none-linux-gnueabi-
make 

Позвольте мне перенести сгенерированный файл 'dub_e100.ko'файл в дрон и запустить следующую командную строку:

insmod dube100.ko

Терминал выдал ошибку insmod: can't insert 'dub_e100.ko': unknown symbol in module, or unknown parameter.Проверка dmesg |tail дает:

usb 1-1:1.0: uevent
dub_e100: Unknown symbol mii_ethtool_sset
dub_e100: Unknown symbol mii_link_ok
dub_e100: Unknown symbol mii_nway_restart
dub_e100: Unknown symbol generic_mii_ioctl
dub_e100: Unknown symbol mii_ethtool_gset

Я предполагаю, что модуль адаптера зависит от модуля mii, поэтому я сгенерировал файл mii.ko со следующим make-файлом:

TARGET  = dub_e100
OBJS    = dub_e100.o
MDIR    = drivers/net/usb
KDIR    = /home/artemii/Downloads/linux

EXTRA_CFLAGS = -DEXPORT_SYMTAB
PWD = $(shell pwd)
DEST = /home/artemii/Downloads/linux/$(MDIR)

obj-m      := $(TARGET).o
obj-m += mii.o

default:
    make -C $(KDIR) SUBDIRS=$(PWD) modules

$(TARGET).o: $(OBJS)
    $(LD) $(LD_RFLAG) -r -o $@ $(OBJS)

install:
    su -c "cp -v $(TARGET).ko $(DEST) && /sbin/depmod -a"

clean:
    $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean

.PHONY: modules clean

-include $(KDIR)/Rules.make

После этого я последовательно запустил mii.koи dube100.ko на дроне.Все модули видны в lsmod.Но после вставки адаптера в дрон он давит и перезагружается.После перезагрузки эти модули отключаются от lsmod.Есть ли что-то, что я делаю не так?Я мог сгенерировать или запустить модули неправильно.

1 Ответ

0 голосов
/ 06 октября 2018

insmod не обрабатывает зависимости модуля.Это справочная страница говорит:

insmod - тривиальная программа для вставки модуля в ядро.Большинство пользователей захотят использовать modprobe (8) , что более разумно и может обрабатывать зависимости модуля.

Обратите внимание, что вам, возможно, придется запуститьdepmod до того, как автоматическая загрузка зависимостей modprobe будет работать как задумано.

...