OpenWrt添加软件包之三hellokernel实例

第一步创建目录编写代码

首先在<BUILDROOT>/package/kernel下创建一个Makefile文件以及录hellokernel目录,并且在hellokernel创建一个src目录 ,用来保存自己写的代码。src中加入两个文件 hellokernel.c 和 Makefile。结构如下:
在这里插入图片描述
src/Makefile 内容如下:

obj-m += hellokernel.o

obj-m += $(KO_NAME).o //m是编译成module
obj-y += $(KO_NAME).o //y是编译进 kernel 只可以看到.o 不会生成ko

  • src/hellokernel.c 内容如下:
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>

#define DRV_DESC        "Hello Kernel"
#define DRV_VERSION     "0.0.1"

static int hellokernel_init(void)
{
	printk("hellokernel installed\n");
	return 0;
}
static void hellokernel_exit(void)
{
	printk("hellokernel uninstalled\n");
}
module_init(hellokernel_init);
module_exit(hellokernel_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Hzlarm");
MODULE_DESCRIPTION(DRV_DESC);
MODULE_VERSION(DRV_VERSION);

重点是这个Makefile内容 点击参考概述

  • 外层Makefile 内容如下:
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk

PKG_NAME:=hellokernel
PKG_VERSION:=0.0.1

include $(INCLUDE_DIR)/package.mk

define KernelPackage/hellokernel
	SUBMENU:=Other modules
	TITLE:=hellokernel for test
	#DEPENDS:=
	FILES:=$(PKG_BUILD_DIR)/hellokernel.ko
	#自动加载,30 表示优先级(1 最优先),后面的 hellokernel 表示模块名称
	#AUTOLOAD:=$(call AutoLoad,30,hellokernel)
endef

define KernelPackage/hellokernel/description
	Kernel module for helloworld.
endef

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

define Build/Compile
	$(MAKE) -C "$(LINUX_DIR)" \
	ARCH="$(LINUX_KARCH)" \
	CROSS_COMPILE="$(TARGET_CROSS)" \
	SUBDIRS="$(PKG_BUILD_DIR)" \
	EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \
	$(EXTRA_KCONFIG) \
	$(MAKE_OPTS) \
	modules
endef
$(eval $(call KernelPackage,hellokernel))

第二步 编译

到顶层目录 make menuconfig配置(默认原始SDK都配置好,可以跑通的前提下)
先选择Kernel modules然后Other modules 下选择kmod-hellokernel如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
选中为M:(这里选择 M 为编译生成模块,切记与src目录的Makefile保持一致。)
保存编译make ./package/kernel/hellokernel/compile V=s(单独编译 hellokernel)

第三步 运行

  • 把生成文件拷到开发板openwrt/bin/ramips/packages/base/kmod-hellokerne_xxx.ipk
    在这里插入图片描述
    opkg安装
    opkg install kmod-hellokerne_xxx.ipk
    在这里插入图片描述
    然后modprobe 加载模块
    在这里插入图片描述
    然后rmmod 卸载模块
    在这里插入图片描述
    执行 opkg remove kmod-hellokernel 卸载软件包
    在这里插入图片描述
发布了73 篇原创文章 · 获赞 39 · 访问量 6809

猜你喜欢

转载自blog.csdn.net/hzlarm/article/details/102974862