OpenWrt驱动编译成模块方法

1.建立源文件

1.1在./package下建立example文件

mkdir example

1.2进入exmple文件,建立Makefile

内容如下:

#Kernel module example
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=example
PKG_RELEASE:=1
include $(INCLUDE_DIR)/package.mk


EXTRA_CFLAGS:= \
    $(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=m,%,$(filter %=m,$(EXTRA_KCONFIG)))) \
	$(patsubst CONFIG_%, -DCONFIG_%=1, $(patsubst %=y,%,$(filter %=y,$(EXTRA_KCONFIG)))) \

MAKE_OPTS:=ARCH="$(LINUX_KARCH)" \
	CROSS_COMPILE="$(TARGET_CROSS)" \
	SUBDIRS="$(PKG_BUILD_DIR)" \
	EXTRA_CFLAGS="$(EXTRA_CFLAGS)"

define KernelPackage/example
  SUBMENU:=Other modules
  TITLE:=Support Module for example
  # DEPENDS:=@XXX   #如果有依赖,这个名字可去make menuconfig里面找到 Symbol:XXX
  FILES:=$(PKG_BUILD_DIR)/example.ko
  AUTOLOAD:=$(call AutoLoad,81,example) /*系统启动时自动装载*/
endef

#PKG_BUILD_DIR:/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7621/example 
#建立 PKG_BUILD_DIR ,并将代码拷贝到此处
define Build/Prepare
	mkdir -p $(PKG_BUILD_DIR)/              
	$(CP) -R ./src/* $(PKG_BUILD_DIR)/
endef

define Build/Compile
	$(MAKE) -C "$(LINUX_DIR)" $(MAKE_OPTS) CONFIG_EXAMPLE=m modules
endef
$(eval $(call KernelPackage,example))

1.3在example下建立src目录

mkdir src
在src目录下创建Makefile文件,如下:
obj-${CONFIG_EXAMPLE}+= example.o
在创建Kconfig文件
config EXAMPLE
    tristate "Just a example"
    help
    This is a example, for debugging kernel model.
    If unsure, say N.

增加example.c文件

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
/* hello_init ---- 初始化函数,当模块装载时被调用,如果成功装载返回0 否则返回非0值 */
static int __init hello_init(void)
{
    printk("I bear a charmed life.\n");
    return 0;
}
/* hello_exit ---- 退出函数,当模块卸载时被调用 */
static void __exit hello_exit(void)
{
    printk("Out, out, brief candle\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");


保存

2.编译

make ./package/example/compile 
,如果编译没出错可以在
./build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7621/example
./build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7621/example/example.ko
./build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7621/example/ipkg-ramips_24kec/kmod-example/lib/modules/2.6.36/example.ko
./staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/root-ramips/lib/modules/2.6.36/example.ko
如果编译出错,可以用make V=99编译察看出错的地方。/*可能是代码出错*/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

byd yes

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值