|
也鼓捣了个内核模块,虽然参考了网上一些例子,但放在自己身上用时,总会遇到这样那样的问题,下面这个是经过实践可以跑的,使用环境是 bb 14.07 。
建立内核模块:
1. 在 package 下建立一个工程目录,该目录下存放 Openwrt 编译时需要的 Makefile 。
2. 在该目录下创建一个 src 目录,该目录下存放内核模块的源码,以及一个简单的 Makefile,其内容如:
其实最关键的是工程目录下的 Makefile,如果这个没写对,即使生成内核模块,但也可能没法生成固件。我的 Makefile 如下:
- include $(TOPDIR)/rules.mk
- include $(INCLUDE_DIR)/kernel.mk
- PKG_NAME:=hello
- PKG_RELEASE:=1
- include $(INCLUDE_DIR)/package.mk
- define KernelPackage/hello
- SUBMENU:=Other modules
- TITLE:=Kmod for hello
- DEPENDS:=@!LINUX_3_X
- AUTOLOAD:=$(call AutoLoad,81,hello)
- FILES:=$(PKG_BUILD_DIR)/hello.ko
- KCONFIG:=
- endef
- define Build/Prepare
- mkdir -p $(PKG_BUILD_DIR)
- $(CP) ./src/* $(PKG_BUILD_DIR)/
- endef
- MAKE_OPTS:= \
- ARCH="$(LINUX_KARCH)" \
- CROSS_COMPILE="$(TARGET_CROSS)" \
- SUBDIRS="$(PKG_BUILD_DIR)"
- define Build/Compile
- $(MAKE) -C "$(LINUX_DIR)" \
- $(MAKE_OPTS) \
- modules
- endef
- $(eval $(call KernelPackage,hello))
复制代码
这里,比较重要的是,最好将 DEPENDS:=@!LINUX_3_X 这个依赖写上,否则又可能提示 ERROR: .....modules is missing 的错误。
|
|