0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Openwrt开发指南 第17章 驱动开发之字符设备驱动程序

嵌入式大杂烩 来源:嵌入式大杂烩 作者:嵌入式大杂烩 2023-07-02 09:20 次阅读

开发环境:

主机:Ubuntu12.04

开发板:RT5350

Openwrt:Openwrt15.05

1 配置编译驱动程序

首先将 RT5350_drv 文件夹传到 OpenWrt 源码的chaos_calmer/package/kernel 目录下。然后进入 OpenWrt 源码的顶层目录,执行 make menuconfig。

注意:至于RT5350_drv的内容,建议初学者按照步骤做就是了,不必追问细节,初学者应该知道openwrt驱动开发流程,代码的具体实现笔者在后文也会讲到,跟着笔者一步一步做就是了。

$ cd openwrt/

$ make menuconfig

在弹出的菜单界面里,配置选项。

Kernel modules  --- >  
Other modules  --- >
< * > kmod-RT5350_drv

然后我们就能看到我们的驱动程序的选项了 kmod-RT5350_drv,将它配置成M,也可编译进入内核。

1688223181226dultyxkrju

图1

最后,退出保存。然后再执行编译命令。

make V=99

编译完成以后,就能在源码/bin/ramips/packages/base目录下看到我们的内核模块驱动程序的软件包。

kmod-RT5350_drv_3.18.109-1_ramips_24kec.ipk

2 字符设备驱动软件包 Makefile 介绍

首先进入到RT5350_drv 文件夹,里面有两个文件。Makefile内容如下。

#
# Copyright (C) 2008-2019 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

PKG_NAME:=RT5350_drv
PKG_RELEASE:=1

include $(INCLUDE_DIR)/package.mk

define KernelPackage/RT5350_drv
  SUBMENU:=Other modules
  # DEPENDS:=@!LINUX_3_3
  TITLE:=Motor driver
  FILES:=$(PKG_BUILD_DIR)/RT5350_drv.ko
  # AUTOLOAD:=$(call AutoLoad,30,RT5350_drv,1)
  KCONFIG:=
endef

define KernelPackage/RT5350_drv/description
 This is a RT5350_drv drivers
 endef

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

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

define Build/Compile
	$(MAKE) -C "$(LINUX_DIR)" \\
		$(MAKE_OPTS) \\
		modules
endef

$(eval $(call KernelPackage,RT5350_drv))

至于该 Makefile 文件中每行是什么意思,请查阅上一章,这里不再赘述。进入到 src 文件夹中;我们看一下 Makefile 的内容,非常简单:

obj-m +=RT5350_drv.o

告诉内核添加的模块目标文件名称为RT5350_drv.o,至于RT5350_drv.c 这一个驱动模板,在上一章介绍过了,这里就不加以阐述了。

3 动态的加载和卸载内核驱动模块软件包

通过前面的努力,我们终于得到了我们自己的内核驱动模块软件包了。接下来就来使用它。首先将 kmod-RT5350_drv_3.18.109-1_ramips_24kec.ipk软件包传到开发板上面。

1688223182014qr7vk4ud8h

然后使用 opkg install 命令来安装软件包。

opkg install kmod-RT5350_drv_3.18.109-1_ramips_24kec.ipk

1688223182346mlfokkqlxi

使用 opkg list 命令来查看已经安装了哪些软件包。这里是否执行该命令都无所谓。接下来进入我们的/lib/modules/3.18.109 目录,就能看到我们的驱动程序模块了。

cd lib/modules/3.18.109/

16882231826216l6flkumvm

接下来就通过 insmod 命令来装载驱动模块。

insmod RT5350_drv.ko

当我们一执行该命令,串口终端上面就会打印出。

1688223182903d4xk8ahm3e

这行打印信息,正是我们在驱动程序的入口函数中添加的调试信息。如果我们想卸载驱动模块,则使用 rmmod 命令。

rmmod RT5350_drv

当执行完这条命令后,就成功的卸载了该驱动程序。我们也能看到如下打印。

1688223183173btdvzl4o3d

这条打印,是在我们的驱动的出口函数中添加的调试信息

4 驱动开机自动加载

虽然我们通过 opkg insall 得到了.ko 为后缀的驱动模块,但是每次要使用都得进行insmod,比较麻烦,我们可以让系统开机后自动的加载该驱动模块。

首先进入到特定的目录:

$cd /etc/modules.d

然后创建一个文件并且写入一些信息:

vi 61-RT5350_drv

说明:61 表示不使用外接 usb 类的自启动程序,分隔符‘ -’后面接驱动模块名称!在创建的该文件中写入RT5350_drv 即驱动的名称。最后,必须保证RT5350_drv.ko 文件即我们的驱动模块文件放在: /lib/modules/3.18.109/

好的,重新启动系统即可:reboot

可以通过命令查询当前已经加载的驱动模块:lsmod
审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 驱动程序
    +关注

    关注

    19

    文章

    823

    浏览量

    47948
  • 开发板
    +关注

    关注

    25

    文章

    4933

    浏览量

    97157
  • Ubuntu
    +关注

    关注

    5

    文章

    560

    浏览量

    29548
  • 驱动开发
    +关注

    关注

    0

    文章

    130

    浏览量

    12061
  • OpenWrt
    +关注

    关注

    10

    文章

    127

    浏览量

    39261
收藏 人收藏

    评论

    相关推荐

    Openwrt开发指南 16 驱动开发字符设备驱动程序框架

    我们在学习 C 语言的时候,知道每个应用程序的入口函数,即第一个被执行的函数是 main函数,那么,我们自己的驱动程序,哪个函数是入口函数呢?
    的头像 发表于 06-30 09:01 3337次阅读
    <b class='flag-5'>Openwrt</b><b class='flag-5'>开发指南</b> <b class='flag-5'>第</b>16<b class='flag-5'>章</b> <b class='flag-5'>驱动</b><b class='flag-5'>开发</b><b class='flag-5'>之</b><b class='flag-5'>字符</b><b class='flag-5'>设备</b><b class='flag-5'>驱动程序</b>框架

    Openwrt开发指南 25 配置OpenWrt支持网络摄像头

    Openwrt开发指南 25 配置OpenWrt支持网络摄像头
    的头像 发表于 07-13 08:56 2301次阅读
    <b class='flag-5'>Openwrt</b><b class='flag-5'>开发指南</b> <b class='flag-5'>第</b>25<b class='flag-5'>章</b> 配置<b class='flag-5'>OpenWrt</b>支持网络摄像头

    Openwrt开发指南 15 驱动开发字符设备驱动程序概念介绍

    从上到下,一个软件系统可以分为:应用程序、库、操作系统(内核)、驱动程序开发人员可以专注于自己熟悉的部分,对于相邻层,只需要了解它的接口,无需关注它的实现细节。
    的头像 发表于 06-30 09:00 2645次阅读
    <b class='flag-5'>Openwrt</b><b class='flag-5'>开发指南</b> <b class='flag-5'>第</b>15<b class='flag-5'>章</b> <b class='flag-5'>驱动</b><b class='flag-5'>开发</b><b class='flag-5'>之</b><b class='flag-5'>字符</b><b class='flag-5'>设备</b><b class='flag-5'>驱动程序</b><b class='flag-5'>之</b>概念介绍

    Openwrt开发指南 18 驱动开发字符设备应用程序

    在前面的章节中, 我们成功的写出了我们自己的驱动程序, 并且向应用程序提供了 open、read、write 三个接口,那么接下来我们就来编写应用程序,调用这些接口。
    的头像 发表于 07-02 09:21 2488次阅读
    <b class='flag-5'>Openwrt</b><b class='flag-5'>开发指南</b> <b class='flag-5'>第</b>18<b class='flag-5'>章</b> <b class='flag-5'>驱动</b><b class='flag-5'>开发</b><b class='flag-5'>之</b><b class='flag-5'>字符</b><b class='flag-5'>设备</b>应用<b class='flag-5'>程序</b>

    Openwrt开发指南 20 驱动开发LED应用程序

    在前面的章节中, 我们成功的写出了我们自己的驱动程序, 并且向应用程序提供了 open、ioctl 两个接口,那么接下来我们就来编写应用程序,调用这些接口。
    的头像 发表于 07-03 09:02 2577次阅读
    <b class='flag-5'>Openwrt</b><b class='flag-5'>开发指南</b> <b class='flag-5'>第</b>20<b class='flag-5'>章</b> <b class='flag-5'>驱动</b><b class='flag-5'>开发</b><b class='flag-5'>之</b>LED应用<b class='flag-5'>程序</b>

    Openwrt开发指南 22 Openwrt串口的使用2

    在上一中,我们成功的让驱动程序支持了串口 2,并且做了简单的测试。接下来,我们就为串口 2 添加一个应用程序,从而实现 Wi-Fi 串口。实现过程非常简单,首先进入 OpenWrt
    的头像 发表于 07-05 09:09 3961次阅读
    <b class='flag-5'>Openwrt</b><b class='flag-5'>开发指南</b> <b class='flag-5'>第</b>22<b class='flag-5'>章</b> <b class='flag-5'>Openwrt</b>串口的使用2

    Openwrt开发指南 24 配置开发板支持U盘

    Openwrt开发指南 24 配置开发板支持U盘
    的头像 发表于 07-13 08:55 2949次阅读
    <b class='flag-5'>Openwrt</b><b class='flag-5'>开发指南</b> <b class='flag-5'>第</b>24<b class='flag-5'>章</b> 配置<b class='flag-5'>开发</b>板支持U盘

    CE驱动程序开发指南资料分享

    CE驱动程序开发指南资料分享
    发表于 08-03 12:03

    WINCE驱动程序开发指南

    CE驱动程序所有驱动皆为动态链接库驱动实现中可以调用所有标准的APICE驱动程序模型本机驱动程序流接口
    发表于 07-07 15:06 41次下载

    PCI设备WINDOWS驱动程序开发

    PCI设备WINDOWS驱动程序开发 本文主要介绍了在Windows9x操作系统下开发PCI设备驱动
    发表于 05-03 11:54 3312次阅读

    Windows WDM设备驱动程序开发指南

    书主要介绍Windows 98和Windows 2000新的驱动程序模型(WDM)。描述了WDM设备驱动程序的结构、功能和开发方法.
    发表于 12-12 15:31 0次下载
    Windows WDM<b class='flag-5'>设备</b><b class='flag-5'>驱动程序</b><b class='flag-5'>开发指南</b>

    《Linux设备驱动开发详解》17、Linux音频设备驱动

    《Linux设备驱动开发详解》17、Linux音频设备
    发表于 10-27 11:14 17次下载
    《Linux<b class='flag-5'>设备</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>详解》<b class='flag-5'>第</b><b class='flag-5'>17</b><b class='flag-5'>章</b>、Linux音频<b class='flag-5'>设备</b><b class='flag-5'>驱动</b>

    《Linux设备驱动开发详解》6字符设备驱动

    《Linux设备驱动开发详解》6字符设备
    发表于 10-27 11:46 23次下载
    《Linux<b class='flag-5'>设备</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>详解》<b class='flag-5'>第</b>6<b class='flag-5'>章</b>、<b class='flag-5'>字符</b><b class='flag-5'>设备</b><b class='flag-5'>驱动</b>

    Linux设备驱动程序的平台驱动程序字符驱动程序介绍

    了解Linux设备驱动程序的基础知识,重点介绍平台驱动程序字符驱动程序。 提出了简单的平台驱动程序
    的头像 发表于 11-27 06:32 4258次阅读

    UM2298_STM32Cube BSP驱动程序开发指南

    UM2298_STM32Cube BSP驱动程序开发指南
    发表于 11-22 19:19 1次下载
    UM2298_STM32Cube BSP<b class='flag-5'>驱动程序</b><b class='flag-5'>开发指南</b>