曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3047|回复: 0
打印 上一主题 下一主题

建立自己的内核模块及内核模块 Makefile

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2015-4-10 21:48:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
也鼓捣了个内核模块,虽然参考了网上一些例子,但放在自己身上用时,总会遇到这样那样的问题,下面这个是经过实践可以跑的,使用环境是 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 的错误。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-4 02:07 , Processed in 0.079245 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表