【发布时间】:2018-06-04 14:27:00
【问题描述】:
我正在为 Openwrt 编写一个简单的内核模块。我有工作代码可以加载并完成它需要做的事情。我缺少的是如何将代码放入 Openwrt 的构建过程中。我有一个 Makefile 如下:
# Copyright (C) 2006-2012 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
# name
PKG_NAME:=HelloWorld
# version of what we are downloading
PKG_VERSION:=1.0
# version of this makefile
PKG_RELEASE:=0
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)
PKG_CHECK_FORMAT_SECURITY:=0
include $(INCLUDE_DIR)/package.mk
define KernelPackage/$(PKG_NAME)
SUBMENU:=Other modules
TITLE:=helloworld lkm
FILES:= $(PKG_BUILD_DIR)/hello.ko
endef
define KernelPackage/$(PKG_NAME)/description
A sample kernel module.
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,$(PKG_NAME)))
我正在尝试按照此处的说明进行操作:https://wiki.openwrt.org/doc/devel/packages#creating_packages_for_kernel_modules
现在,我可以在 make menuconfig 中看到该模块并选择它。但是,当我在 QEMU 中运行构建时,我看不到该模块。我实际上可以复制 *.ko 模块并加载它,这很有效。我只想让模块自动加载。我该怎么做?
【问题讨论】:
-
您使用稍微错误的术语来描述您想要实现的目标。如果我理解这个问题,问题在于创建一个包含内核模块的图像。最简单的方法就是合二为一。
-
您似乎缺少安装模块的功能。签入 build 或 tmp 目录。我猜它正在构建中,但未包含在最终图像中。
-
@LucasRamage 我认为这是问题所在。现在我用什么功能来安装模块?我在文档中没有看到。
标签: linux-kernel kernel-module openwrt