我有一个运行Ubuntu的Parrot AR.Drone 2.0,我想使用电缆将其连接到单板计算机。无人机上没有以太网端口,因此我决定使用USB-以太网适配器(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
我遵循了this的文章,而不是使用wifi模块,而是使用了USB-以太网适配器模块。
这是我如何编辑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 |尾巴给出:
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模块,所以我生成了带有以下makefile的mii.ko
文件:
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
开始进行设计。
我做错什么了吗?我可能会错误地生成或运行模块。
答案 0 :(得分:0)
json.foo do
json.a @foo.a
json.b @foo.b
end
不处理模块依赖性。 manual page说:
insmod 是一个简单的程序,用于将模块插入内核。大多数用户将改为使用modprobe(8),它更聪明并且可以处理模块依赖性。
请注意,在insmod
自动依赖项加载按预期工作之前,您可能必须运行depmod
。