openwrt教程(OpenWRT驱动开发)


一、OpenWRT中的驱动

Openwrt源码中,所有扩展的软件包到在package目录下,自己添加的应用放在该目录下。

所有扩展的内核驱动package/kernel目录下,自己添加的驱动放在该目录下。

openwrt教程(OpenWRT驱动开发)

二、添加驱动步骤

  • 在package/kernel目录下添加一个helloworld文件夹
  • 在helloworld添加一个Makefile文件。具体Makefile怎么写,我们先看两个kernel中自带的驱动的Makefile文件。
  • I2C驱动

    ## Copyright (C) 2008 OpenWrt.org## This is free software, licensed under the GNU General Public License v2.# See /LICENSE for more information.#   I2C驱动#包含上两级目录配置include $(TOPDIR)/rules.mk          # TOPDIR : /openwrtinclude $(INCLUDE_DIR)/kernel.mk    # INCLUDE_DIR: /openwrt/includePKG_NAME:=i2c-gpio-custom           #驱动名字PKG_RELEASE:=2                      #Makefile的版本号include $(INCLUDE_DIR)/package.mk   #包含上一级目录配置# make menuconfig时在配置界面上显示的方式define KernelPackage/i2c-gpio-custom SUBMENU:=I2C support                 #显示的子选项 TITLE:=Custom GPIO-based I2C device  #显示的内容 DEPENDS:=@GPIO_SUPPORT +kmod-i2c-core +kmod-i2c-gpio  #依赖于其他模块 FILES:=$(PKG_BUILD_DIR)/i2c-gpio-custom.ko    #生成的目标文件 KCONFIG:=endefdefine KernelPackage/i2c-gpio-custom/descriptionKernel module for register a custom i2c-gpio platform device. #帮助时显示的内容endefEXTRA_KCONFIG:=    CONFIG_I2C_GPIO_CUSTOM=m    #编译成模块# 无需更改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)"            #CPU架构    CROSS_COMPILE="$(TARGET_CROSS)"  #交叉编译工具   SUBDIRS="$(PKG_BUILD_DIR)"    EXTRA_CFLAGS="$(EXTRA_CFLAGS)"    $(EXTRA_KCONFIG)#编译前的准备define Build/Prepare   mkdir -p $(PKG_BUILD_DIR)   $(CP) ./src/* $(PKG_BUILD_DIR)/  #PKG_BUILD_DIR:编译时的目录,对应于驱动就是 build_dir/target-**/linux-**/endef#编译define Build/Compile   $(MAKE) -C "$(LINUX_DIR)"        $(MAKE_OPTS)        modulesendef#完成前面定义后,必须使用 eval 函数实现各种定义, KernelPackage代表是内核驱动模块,Package表示应用程序$(eval $(call KernelPackage,i2c-gpio-custom))

    RTC驱动

    ## Copyright (C) 2006-2009 OpenWrt.org## This is free software, licensed under the GNU General Public License v2.# See /LICENSE for more information.#   RTC驱动include $(TOPDIR)/rules.mkinclude $(INCLUDE_DIR)/kernel.mkPKG_NAME:=rtc-rv5c386aPKG_RELEASE:=1include $(INCLUDE_DIR)/package.mkdefine KernelPackage/rtc-rv5c386a SUBMENU:=Other modules DEPENDS:=@TARGET_brcm47xx TITLE:=Driver for RTC RV5C386A (used in WL-700gE and WL-HDD) AUTOLOAD:=$(call AutoLoad,70,rtc) FILES:=$(PKG_BUILD_DIR)/rtc.koendefdefine Build/Prepare   mkdir -p $(PKG_BUILD_DIR)   $(CP) ./src/* $(PKG_BUILD_DIR)/endef#有时候CROSS_COMPILE、ARCH、SUBDIRS、EXTRA_CFLAGS会被独立成一个变量,然后再去引用define Build/Compile   $(MAKE) -C "$(LINUX_DIR)"        CROSS_COMPILE="$(TARGET_CROSS)"        ARCH="$(LINUX_KARCH)"        SUBDIRS="$(PKG_BUILD_DIR)"        EXTRA_CFLAGS="$(BUILDFLAGS)"        modulesendef$(eval $(call KernelPackage,rtc-rv5c386a))

    根据上面的注释和解释,并对比两份Makefile,我们发现写的基本结构都是相似的,所以我们可以根据上面的模板来自行写一份。

    以I2C为模板:

    ## Copyright (C) 2008 OpenWrt.org## This is free software, licensed under the GNU General Public License v2.# See /LICENSE for more information.#include $(TOPDIR)/rules.mkinclude $(INCLUDE_DIR)/kernel.mkPKG_NAME:=helloworldPKG_RELEASE:=2include $(INCLUDE_DIR)/package.mkdefine KernelPackage/helloworld SUBMENU:=Other modules TITLE:=HelloWorld FILES:=$(PKG_BUILD_DIR)/helloworld.ko KCONFIG:=endefdefine KernelPackage/helloworld/descriptionKernel module for register helloworld.endefEXTRA_KCONFIG:=    CONFIG_HELLOWORLD=mEXTRA_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)"    $(EXTRA_KCONFIG)define Build/Prepare   mkdir -p $(PKG_BUILD_DIR)   $(CP) ./src/* $(PKG_BUILD_DIR)/endefdefine Build/Compile   $(MAKE) -C "$(LINUX_DIR)"        $(MAKE_OPTS)        modulesendef$(eval $(call KernelPackage,helloworld))

    基本上就是I2C改成helloworld就OK了!

    3、在helloworld文件夹下再新建一个src文件夹,在src下新建一个Kconfig文件。文件内容:

    ## Copyright (C) 2008 OpenWrt.org## This is free software, licensed under the GNU General Public License v2.# See /LICENSE for more information.#include $(TOPDIR)/rules.mkinclude $(INCLUDE_DIR)/kernel.mkPKG_NAME:=helloworldPKG_RELEASE:=2include $(INCLUDE_DIR)/package.mkdefine KernelPackage/helloworld SUBMENU:=Other modules TITLE:=HelloWorld FILES:=$(PKG_BUILD_DIR)/helloworld.ko KCONFIG:=endefdefine KernelPackage/helloworld/descriptionKernel module for register helloworld.endefEXTRA_KCONFIG:=    CONFIG_HELLOWORLD=mEXTRA_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)"    $(EXTRA_KCONFIG)define Build/Prepare   mkdir -p $(PKG_BUILD_DIR)   $(CP) ./src/* $(PKG_BUILD_DIR)/endefdefine Build/Compile   $(MAKE) -C "$(LINUX_DIR)"        $(MAKE_OPTS)        modulesendef$(eval $(call KernelPackage,helloworld))

    再新建一个Makefile文件,内容为:

    obj-${CONFIG_HELLOWORLD}   += helloworld.o

    最后新建一个helloworld.c的驱动文件,内容为:

    #include <linux/module.h>#include <linux/kernel.h>//insmod会执行该函数static int __init helloworld_init(void){   printk("helloworld driver init !n");   return 0;}//rmmod会执行该函数static int __exit helloworld_exit(void){   printk("helloworld driver exit !n");   return 0;}//声明出入口函数module_init(helloworld_init);module_exit(helloworld_exit);MODULE_AUTHOR("YANG");MODULE_LICENSE("GPL");

    4、接下来就是编译了先make menuconfig将驱动配置一下。

    无线路由器-网关-dtu无线路由器-网关-dtu

    无线路由器-网关-dtu无线路由器-网关-dtu

    无线路由器-网关-dtu无线路由器-网关-dtu

    保存后执行makepackage/kernel/helloworld/compile V=99

    5、编译出来的驱动模块在openwrt/bin/ramips/packages/kernel/kmod-helloworld_4.4.7-2_ramips_24kec.ipk

    以上教程由“WiFi之家网”整理收藏!

    原创文章,作者:路由器教程,如若转载,请注明出处:https://www.224m.com/217687.html

    (0)
    路由器教程路由器教程
    赶紧把这几个模组加入下载行列(赶紧把这几个模组加入下载行列中)
    上一篇 2023年2月6日 08:54
    无法正常安装驱动程序(无法正常安装驱动程序怎么办)
    下一篇 2023年2月6日 09:06

    相关推荐

    • 无线网桥能当wifi用吗-tp无线网桥设置.

      无线网桥能当wifi用吗本文目录tp无线网桥设置?单个网桥能干嘛用?网桥做ap效果如何?网桥可以连接路由器接收wifi吗?无线网桥两端都可以连接路由器?tp无线网桥设置?1首先,要确定一点无线桥接的路由器都应具备wifi发送功能,我们使用桥接的路由器要支无线持桥接功能,现在我们来设置路

      2023年2月9日
      3.0K
    • 换路由器后服务器设置不了(换路由器怎么重新设置网络)

      近日,我换了一台新的路由器,但却发现无法设置我的服务器。经过一番研究,我总结出了以下的解决方法。 步骤一:重置服务器IP地址 首先,我们需要重置服务器的IP地址。在电脑上打开命令提…

      网络 2024年11月28日
      959
    • Win7 192.168.1.1打不开 路由器管理界面打不开的检查方法!

      导读:以下是"Win7 192.168.1.1打不开怎么办?"相关路由问题分享。 - 来源:WiFi之家网,下面我们直奔主题吧!

      本文主要介绍了Win7打不开192.168.1.1的解决办法。

      在用Win7电"

      2021年1月1日
      10.6K
    • qq名称简单好听 有什么好听的女生QQ名?

      qq名称简单好听 什么字网名最好?有什么好听的女生QQ名? 早茶月光,笑声,暮烟疏雨,飘散孤絮,转圈,萧萧暮雨,舀一瓢月色,桃花散漫,一杯红尘,追梦者,那些穿过眼瞳的明媚阳光,北斗星光,绿阴红影中

      投稿 2022年7月9日
      2.0K
    • iOS16公测版升级(ios16公测版升级正式版)

      苹果在WWDC22开发者大会上推出了iOS16新系统,目前苹果已经向iPhone手机用户推送了iOS16系统首个公测版升级更新,不知道大家的iPhone手机有没有升级更新到iOS1…

      2022年12月7日
      1.7K
    • 磊科无线路由器激活并配置迅雷下载器教程

      原标题:"磊科无线路由器怎么激活并配置迅雷下载器"相关路由器设置经验分享。 - 来源:WiFi之家网  路由器具有判断网络地址和选择IP路径的功能,它能在多网络互联环境中,建立灵"

      2021年2月15日
      7.7K
    • 电脑屏幕出现闪烁是怎么回事

      原标题:"电脑屏幕出现闪烁的原因分析"相关电脑问题教程分享。 - 来源:WiFi之家网。不少人在使用台式电脑的过程中,都有遇到过电脑屏幕出现一亮一暗的情况,然而查看电脑的一些设置都是正常的。那么,是什么

      2021年8月9日
      10.9K
    • 小米路由器4A管理密码忘记了怎么办?

      问:小米路由器4A管理密码忘记了怎么办?在设置小米路由器4A,进入miwifi.com登录页面时,页面中要求输入管理密码,可是我已经把管理密码忘了,请问现在怎么解决这个问题?答:如果把小米路由器4A的管理密码忘了,不能登录到设置界面;此时,请按照下面的方法操作。小米路由器4A管理密码1、可以先输入你

      2021年6月9日
      97.3K
    • Word中几种常用通配符的使用方法

      使用过Word的朋友肯定对查找替换这个功能不陌生,几乎都用过这个功能。今天要说的是怎么样使用通配符来让查找和替换功能变得更加强大。什么是通配符呢?名称解释是这样的:通配符是一种特殊语句,主要有星号(*)和问号(?),用来模糊搜索文件。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正

      2021年9月12日
      48.0K
    • 极路由(hiwifi)3设置步骤图解

      【导读】极路由(hiwifi)3设置教程图文教程,详细信息请阅读下文!本文主要介绍了hiwifi极路由3的安装、上网设置、无线WiFi名称和密码设置等内容。一台新购买(恢复出厂设置)的极"

      路由器设置 2021年1月5日
      28.6K