曲径通幽论坛

标题: 建立自己的内核模块及内核模块 Makefile [打印本页]

作者: beyes    时间: 2015-4-10 21:48
标题: 建立自己的内核模块及内核模块 Makefile
也鼓捣了个内核模块,虽然参考了网上一些例子,但放在自己身上用时,总会遇到这样那样的问题,下面这个是经过实践可以跑的,使用环境是 bb 14.07 。

建立内核模块:

1. 在 package 下建立一个工程目录,该目录下存放 Openwrt 编译时需要的 Makefile 。

2. 在该目录下创建一个 src 目录,该目录下存放内核模块的源码,以及一个简单的 Makefile,其内容如:
  1. obj-m:=hello.o
复制代码


其实最关键的是工程目录下的 Makefile,如果这个没写对,即使生成内核模块,但也可能没法生成固件。我的 Makefile 如下:
  1. include $(TOPDIR)/rules.mk
  2. include $(INCLUDE_DIR)/kernel.mk

  3. PKG_NAME:=hello
  4. PKG_RELEASE:=1

  5. include $(INCLUDE_DIR)/package.mk

  6. define KernelPackage/hello
  7.         SUBMENU:=Other modules
  8.         TITLE:=Kmod for hello
  9.         DEPENDS:=@!LINUX_3_X
  10.         AUTOLOAD:=$(call AutoLoad,81,hello)
  11.         FILES:=$(PKG_BUILD_DIR)/hello.ko
  12.         KCONFIG:=
  13. endef

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

  18. MAKE_OPTS:= \
  19.         ARCH="$(LINUX_KARCH)" \
  20.         CROSS_COMPILE="$(TARGET_CROSS)" \
  21.         SUBDIRS="$(PKG_BUILD_DIR)"

  22. define Build/Compile
  23.         $(MAKE) -C "$(LINUX_DIR)" \
  24.                 $(MAKE_OPTS) \
  25.                 modules
  26. endef

  27. $(eval $(call KernelPackage,hello))
复制代码

这里,比较重要的是,最好将 DEPENDS:=@!LINUX_3_X 这个依赖写上,否则又可能提示 ERROR: .....modules is missing 的错误。





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2