openwrt 驱动模块的编译与加载

1、要编译一个适用于openwrt系统的nids驱动, 源代码由硬件商提供。
首先在ubuntun 下 make 编译一下, 查看是否编译正常,是否出现错误, 修改错误。

OpenWrt环境下的编译
1、 进入openwrt的编译目录,即是 make menuconfig 的配置。

在 ./package/kernel/ 下
mkdir gobinet
touch gobinet/Makefile
mkdir gobinet/src
将编译所需的源代码及相关头文件copy 到 gobinet/src 下
cd gobinet/src
touch Makefile
编辑Makefile

obj-m := gobinet.o
gobinet-objs := GobiUSBNet.o QMIDevice.o QMI.o

其中 gobinet.o 为所需生成的 gobinet.ko 对应的名字
GobiUSBNet.o QMIDevice.o QMI.o 为生成gobinet 所需的源文件

硬件厂商提供的Makefile 为

obj-m := GobiNet.o
GobiNet-objs := GobiUSBNet.o QMIDevice.o QMI.o
EXTRA_CFLAGS := -DSIMCOM_NETWORK_MANAGER
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
OUTPUTDIR=/lib/modules/`uname -r`/kernel/drivers/net/usb/

all: clean
    $(MAKE) -C $(KDIR) M=$(PWD) modules

install: all
    mkdir -p $(OUTPUTDIR)
    cp -f GobiNet.ko $(OUTPUTDIR)
    depmod

clean:
    rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions Module.* modules.order

cd .. 进入package/kernel/gobinet, 编辑此目录下的Makefile

include $(TOPDIR)/rules.mk          #必须包含
include $(INCLUDE_DIR)/kernel.mk

PKG_NAME:=gobinet                  #包名称, 在menuconfig中显示
PKG_RELEASE:=2                     #版本号

include $(INCLUDE_DIR)/package.mk

define KernelPackage/gobinet
  SUBMENU:=Other modules          #子目录           
  TITLE:= GobiNet device          #包说明
  DEPENDS:=+kmod-usb-core         #编译此ko文件必须依赖的ko文件,必须正确添
                                  #加,不然不通过 
  FILES:=$(PKG_BUILD_DIR)/gobinet.ko  #生成文件
  KCONFIG:=
endef

define KernelPackage/gobinet/description
 Kernel module for register a custom gobinet platform device.
endef

EXTRA_CFLAGS := -DSIMCOM_NETWORK_MANAGER   #编译所依赖的选项, 由原始    
                                            #Makefile 中得来, 必须有

MAKE_OPTS:= \                            #固定格式
    ARCH="$(LINUX_KARCH)" \
    CROSS_COMPILE="$(TARGET_CROSS)" \
    SUBDIRS="$(PKG_BUILD_DIR)" \
    EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \
    $(EXTRA_KCONFIG)

define Build/Prepare
    mkdir -p $(PKG_BUILD_DIR)
    $(CP) ./src/* $(PKG_BUILD_DIR)/
endef

define Build/Compile
    $(MAKE) -C "$(LINUX_DIR)" \
        $(MAKE_OPTS) \
        modules
endef

$(eval $(call KernelPackage,gobinet))

在编译过程中若出错 可以先检查 EXTRA_CFLAGS 是否添加正确
出现
Package kmod-gobinet is missing dependencies for the following libraries:
usbcore.ko
则是模块依赖额问题
可查看make menuconfig 是否选中相关模块, 以及DEPENDS 选项的配置

你可能感兴趣的:(openwrt,linuxming)