第一个hello驱动

这篇具有很好参考价值的文章主要介绍了第一个hello驱动。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Linux驱动程序的分类

  • 字符设备驱动、块设备驱动和网络设备驱动。

Linux驱动程序运行方式

  • 把驱动程序编译进内核里面,这样内核启动后就会自动运行驱动程序了;
  • 把驱动程序编译成以.ko为后缀的模块文件,然后在Linux启动后,我们自己手动安装驱动程序。

驱动程序

#include <linux/module.h>	//包含初始化加载模块的头文件
#include <linux/init.h>		//包含宏定义的头文件

static int hello_init(void)
{
	printk("hello_init\n");
	return 0;
}


static void hello_exit(void)
{
	printk("hello_exit\n");
}

module_init(hello_init);	//驱动入口
module_exit(hello_exit);	//驱动出口

MODULE_LICENSE("GPL");	//许可声明
MODULE_AUTHOR("CMF");	//作者
MODULE_VERSION("V1.0");	//版本

Makefile

ARCH            ?= arm64
CROSS_COMPILE   ?= /home/cmf/debian/LubanCat_SDK/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-

export ARCH
export CROSS_COMPILE
# -m表示编译成模块
obj-m += hello.o
KDIR:=/home/cmf/debian/LubanCat_SDK/kernel
PWD?=$(shell pwd)
all:
        make -C $(KDIR) M=$(PWD) modules	#make modules 使用来编译成内核模块的
        echo $(PWD)

clean:
        rm -f *.ko *.o *.mod.o *.mod.c *.symvers *.order

编译

这里我们使用把驱动程序编译成以.ko为后缀的模块文件的方式,首先要保证kernel已经被成功编译过的。再修改Makefile,其中CROSS_COMPILE,KDIR使用自己的目录。编译成功后会生成hello.ko文件。

把ko文件拷贝到开发板

scp hello.ko cat@192.168.31.110:	(省略远程目录默认为主机的家目录即: ~)

第一个hello驱动文章来源地址https://www.toymoban.com/news/detail-825244.html

安装驱动模块

# 打印驱动模块信息
cat@lubancat:~$ modinfo hello.ko
filename:       /home/cat/hello.ko
version:        V1.0
author:         CMF
license:        GPL
srcversion:     AABA8E17AB5E10CE104D4C1
depends:
name:           hello
vermagic:       4.19.232 SMP mod_unload aarch64’
# 安装驱动模块
cat@lubancat:~$ sudo insmod hello.ko
[ 4616.557876] hello_init
# 查看已安装的驱动模块
cat@lubancat:~$ lsmod
Module                  Size  Used by
hello                  16384  0
iwlmvm                368640  0
iwlwifi               270336  1 iwlmvm
r8125                 143360  0
cat@lubancat:~$ cat /proc/modules
hello 16384 0 - Live 0x0000000000000000 (O)
iwlmvm 368640 0 - Live 0x0000000000000000
iwlwifi 270336 1 iwlmvm, Live 0x0000000000000000
r8125 143360 0 - Live 0x0000000000000000
# 卸载驱动模块
cat@lubancat:~$ sudo rmmod hello
[ 4634.443350] hello_exit

到了这里,关于第一个hello驱动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 这个设备(服务)的驱动程序已被禁用。另一个驱动程序可以提供这个功能。(代码32)

    今天拿到一台笔记本,插上U盘没有反应,进【设备管理器】发现【USB大容量存储设备】有个黄色的叹号。   鼠标右键【USB大容量存储设备】打开属性查看信息,显示设状态“这个设备(服务)的驱动程序已被禁用。另一个驱动程序可以提供这个功能。(代码32)”   研究了

    2024年02月11日
    浏览(55)
  • [Microsoft] [SQL Server的ODBC驱动程序11] SQL Server网络接口:连接字符串无效[87] [Microsoft] [SQL Server的ODBC驱动程序

    解决 [Microsoft] [SQL Server的ODBC驱动程序11] SQL Server网络接口:连接字符串无效[87]     [Microsoft] [SQL Server的ODBC驱动程序11]登录超时已过期     [Microsoft] [SQL Server的ODBC驱动程序11]建立与SQL Server的连接时发生了与网络相关或特定于实例的错误。请检查实例名称是否正确以及SQL SER

    2024年02月10日
    浏览(51)
  • 报错:[Microsoft][ODBC 驱动程序管理器] 无效的字符串或缓冲区长度

    问题描述 执行到 preparedStatement.setObject(1, “1111”); 出现报错 :[Microsoft][ODBC 驱动程序管理器] 无效的字符串或缓冲区长度 解决方法 原因分析 具体什么原因也不清楚,大概就是:不使用Object等类型,改用 bytes 字节数组。 因为Jdk 1.6/7在64位操作系统上JDBC-ODBC桥上的Bug,导致在调

    2024年02月16日
    浏览(47)
  • Linux驱动开发—最详细应用程序调用驱动程序解析

    Linux下进行驱动开发,完全将驱动程序与应用程序隔开,中间通过 C标准库函数 以及 系统调用 完成驱动层和应用层的数据交换。 驱动加载成功以后会在“/dev”目录下生成一个相应的文件,应用程序通过 对“/dev/xxx” (xxx 是具体的驱动文件名字) 的文件进行相应的操作 即可实

    2024年02月16日
    浏览(47)
  • Jetson nano编译第一个驱动程序,挂载并运行

    这篇文章主要记录自己在嵌入式Linux学习过程中的收获,以方便后续自己查看,这次记录的内容是我使用nano板加载了自己的第一个驱动程序,并且测试成功!下面是具体的步骤。 所谓的交叉编译指的就是在一个CPU架构平台上,编译出另外一个CPU架构平台上可以执行的程序。交

    2024年02月16日
    浏览(44)
  • Linux设备驱动程序(一)——设备驱动简介

    这一部分主要是用来介绍 Linux 设备驱动程序的一些基本概念,包括:Linux 设备驱动程序的作用、内核功能的划分、设备和模块的分类以及版本编号。 设备驱动程序就像一个个的“黑盒子”,使某个特定硬件响应一个定义良好的内部编程接口,这些操作完全隐藏了设备的工作

    2024年02月05日
    浏览(88)
  • Linux驱动(一)之最简单的驱动程序

    为什么要有驱动?为了防止像我等小菜程序员写应用程序的时候权限过高直接去操作底层设备,给设备造成不可挽回的损失,所以要过度一下,让大牛们将底层封装好,应用开发工程师只需要通过特定的接口来完成特定的功能就可以了。 通常情况下,应用开发只需要open一个

    2024年02月17日
    浏览(49)
  • 【Linux】按键驱动程序

    【Linux】按键驱动程序 前言: 一、按键驱动程序的背景知识 1.1 查询方式 1.2 休眠-唤醒方式 1.3 poll方式 1.4 异步通知  1.5 总结  二、按键驱动程序的框架 三、按键驱动程序实战 3.1 头文件(button_drv.h) 3.2 驱动程序(button_drv.c) 3.3 驱动程序(button_100ask_imx6ull.c) 3.4 Makefil

    2024年02月10日
    浏览(44)
  • 手把手教你在ARM板上写一个驱动程序!

    摘要:搞嵌入式有两个方向,一个是嵌入式软件开发(MCU方向),另一个是嵌入式软件开发(Linux方向)。其中MCU方向基本是裸机开发和RTOS开发。而Linux开发方向又分为驱动开发和应用开发。其中应用开发相比于驱动开发来说简单一些,因为搞驱动你要和Linux内核打交道。而我们普

    2024年02月01日
    浏览(87)
  • Linux 设备驱动程序(四)

    Linux 内核设计与实现 深入理解 Linux 内核 Linux 设备驱动程序(一) Linux 设备驱动程序(二) Linux 设备驱动程序(三) Linux 设备驱动程序(四) Linux设备驱动开发详解 深入理解Linux虚拟内存管理     ⇐ ⇒ ⇔ ⇆ ⇒ ⟺ ①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳㉑㉒㉓㉔㉕

    2024年02月16日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包