How to insert dependent modules into Kernel?

211 Views Asked by At

I have a Parrot AR.Drone 2.0 running Ubuntu and I want to connect it to the single board computer using cable. There are no Ethernet ports on the drone so I decided to use USB-Ethernet adapter (D-Link DUB-E100). After entering uname -a in the terminal I get the following line:

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

I followed this article and instead of module for wifi I used module for USB-Ethernet adapter.

This how I edited 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

After that I compiled the kernel with following lines:

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

Leter on I transfer generated 'dub_e100.ko' file into drone and ran the following command line:

insmod dube100.ko

Terminal threw an error insmod: can't insert 'dub_e100.ko': unknown symbol in module, or unknown parameter. Checking dmesg | tail gives:

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

I assume that adapter's module depends on mii module, so I generated mii.ko file with following 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
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

After that I consiquately run mii.ko and dube100.ko on the drone. All the modules visible in lsmod. But after inserting the adapter to the drone it crushes and reboots. After reboot this modules dessapiar from lsmod. Is there something I am doing wrong? I might generated or ran modules improperly.

1

There are 1 best solutions below

0
On

insmod does not handle module dependencies. It's manual page says:

insmod is a trivial program to insert a module into the kernel. Most users will want to use modprobe(8) instead, which is more clever and can handle module dependencies.

Note that you may have to run depmod before the modprobe automatic dependency loading works as intended.