OpenWrt添加软件包之三hellokernel实例

墨蓝 2023-05-30 08:53 97阅读 0赞

第一步创建目录编写代码

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

  1. obj-m += hellokernel.o

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

  • src/hellokernel.c 内容如下:

    include

    include

    include

    define DRV_DESC “Hello Kernel”

    define DRV_VERSION “0.0.1”

    static int hellokernel_init(void)
    {

    1. printk("hellokernel installed\n");
    2. return 0;

    }
    static void hellokernel_exit(void)
    {

    1. 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

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

    endef

    define KernelPackage/hellokernel/description

    1. Kernel module for helloworld.

    endef

    define Build/Prepare

    1. mkdir -p $(PKG_BUILD_DIR)
    2. $(CP) ./src/* $(PKG_BUILD_DIR)/

    endef

    define Build/Compile

    1. $(MAKE) -C "$(LINUX_DIR)" \
    2. ARCH="$(LINUX_KARCH)" \
    3. CROSS_COMPILE="$(TARGET_CROSS)" \
    4. SUBDIRS="$(PKG_BUILD_DIR)" \
    5. EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \
    6. $(EXTRA_KCONFIG) \
    7. $(MAKE_OPTS) \
    8. 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 卸载软件包
    在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,97人围观)

还没有评论,来说两句吧...

相关阅读

    相关 OpenWrtddns

    OpenWrt之ddns DDNS原理 利用DNS可以将域名解析为IP地址,从而实现使用域名访问网络中的主机。但是DNS仅仅提供了域名和IP地址之间的静态对应关系,