驱动开发-入门【1】

1.内核下载地址

Linux内核源码的官方网站为https://www.kernel.org/,可以在该网站下载最新的Linux内核源码。进入该网站之后如下图所示:

从上图可以看到多个版本的内核分支,分别为主线版本(mainline)、稳定版本(stable)和长期支持版本(longterm)。以上各个支线和主线是由linus torvalds(Linux之父)所领导。半导体厂商和一些内核爱好者会在官网下载相应版本的内核源码,对该源码进行打补丁等操作。以此让官网的内核源码可以在半导体厂家设计的主控(CPU)上跑起来,所以在开发和学习的过程中,我们并不会直接去Linux内核官网下去下载源码,而且是使用半导体厂家提供的源码包。

2.内核源码结构

3.内核编译(内核源码编译过再进行驱动开发)

使用命令“./build.sh kernel”进行内核源码的编译,其他SDK包kernal使用厂商编写的脚本进行编译如./make.sh

 4.驱动的基本框架


       Linux驱动的基本框架主要由模块加载函数模块卸载函数模块许可证声明模块参数模块导出符号模块作者信息等几部分组成,其中模块参数,模块导出符号,模块作者信息是可选的部分,也就是可要可不要。剩余部分是必须有的。

  • 模块加载函数:当使用加载驱动模块时,内核会执行模块加载函数,完成模块加载函数中的初始化工作。
  • 模块卸载函数:当卸载某模块时,内核会执行模块卸载函数,完成模块卸载函数中的退出工作。
  • 模块许可证声明:许可证声明描述了内核模块的许可权限,如果不声明模块许可,模块在加载的时候,会收到“内核被污染(kernel tainted)”的警告。可接受的内核模块声明许可包括“GPL”“GPL v2”。

5.hello简单驱动编写

#include<linux/module.h>
#include<linux/kernel.h>static int __init hellow_init(void)
{printk(KERN_INFO "Hello, world!\n");return 0;
}static void __exit hello_exit(void)
{printk(KERN_INFO "Goodbye, world!\n");
}module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL v2");
MODULE_AUTHOR("wjw");

  模块加载函数如下:

static int __init hellow_init(void)
{printk(KERN_INFO "Hello, world!\n");return 0;
}
module_init(hello_init);

模块卸载函数如下:

static void __exit hello_exit(void)
{printk(KERN_INFO "Goodbye, world!\n");
}module_exit(hello_exit);

  模块许可生命函数如下:

MODULE_LICENSE("GPL v2");

6.编写Makefile

#1.设置ARCH变量为arm64
export ARCH=arm64#2.设置交叉编译器前缀为aarch64-linux-gnu-
export CROSS_COMPILE= home/RK3568_SDK/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-#3.内核源码路径
KERNELDIR := /home/RK3568_SDK/kernel#4.obj-m += <文件>:将指定的文件(需要是以.o结尾)设为编译时以模块形式编译
obj-m := hello.oCURRENT_PATH := $(shell pwd)build: kernel_moduleskernel_modules:$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
clean:$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean

7.编译

执行make进行编译,输入hello.ko驱动模块,如下图

8.驱动加载与载卸载

       在开发板上通过“insmod hello.ko”或modprobe hello.ko(更智能,将驱动依赖的驱动也进行加载)命令可以加载驱动,在加载驱动模块的时候会执行驱动入口的函数,也就是hello程序中的hello_init函数,可通过lsmod查看加载的驱动模块。注:也可以将驱动编译进内核(不推介

      卸载hello内核模块,可以通过“rmmod hello”命令来卸载驱动模块,同理在卸载驱动模块的时候会执行驱动出口的函数,所以可以看到驱动出口函数打印出来的字符串信息“hello_exit”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/491661.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Room 数据库使用详解

一、Room介绍 Android Room 是 Google 提供的一个 Android 数据持久化库&#xff0c;是 Android Jetpack 组成部分之一。它提供了一个抽象层&#xff0c;使得 SQLite 数据库的使用更为便捷。通过 Room&#xff0c;开发者可以轻松地操作数据库&#xff0c;不需要直接编写繁琐的…

使用k6进行Redis基准测试

1.安装环境 前提条件&#xff1a;已经安装go 安装xk6 go install go.k6.io/xk6/cmd/xk6latest 安装成功会在GOPATH目录生成xk6可执行文件 安装xk6-redis 切换到xk6工作目录&#xff0c;执行如下命令 cd /Users/wan/go/bin ./xk6 build --with github.com/grafana/xk6-re…

【期末复习】JavaEE(上)

1. Java EE概述 开发环境及开发工具 1.1. HTTP协议 开发模式 2. Java Web技术 JSP技术 2.1. Servlet技术 2.1.1. HttpServletRequest 常用方法 2.1.2. HttpServletRequest 请求乱码 tomcat7 及以下&#xff08;对于每个参数单独进行编码转换&#xff09;&#xff1a; 2.…

KeyFormer:使用注意力分数压缩KV缓存

Keyformer: KV Cache Reduction through Key Tokens Selection for Efficient Generative Inference 202403&#xff0c;发表在Mlsys Introduction 优化KV cache的策略&#xff0c;主要是集中在系统级别的优化上&#xff0c;比如FlashAttention、PagedAttention&#xff0c;它…

Win11安装安卓子系统WSA

文章目录 简介一、启用Hyper-V二、安装WSA三、安装APKAPK商店参考文献 简介 WSA&#xff1a;Windows Subsystem For Android 一、启用Hyper-V 控制面板 → 程序和功能 → 启用或关闭 Windows 功能 → 勾选 Hyper-V 二、安装WSA 进入 Microsoft Store&#xff0c;下拉框改为 …

PHP排序算法:数组内有A~E,A移到C或者C移到B后排序,还按原顺序排序,循环

效果 PHP代码 public function demo($params){function moveNext($arr){$length count($arr);$lastElement $arr[$length - 1];for ($i $length - 1; $i > 0; $i--) {$arr[$i] $arr[$i - 1];}$arr[0] $lastElement;return $arr;}function moveAndReplace($array, $from…

【数字花园】个人知识库网站搭建:①netlify免费搭建数字花园

目录 [[数字花园]]的构建原理包括三个步骤&#xff1a;五个部署方案教程相关教程使用的平台 步骤信息管理 这里记录的自己搭建数字花园&#xff08;在线个人知识库&#xff09;的经历&#xff0c;首先尝试的是网上普遍使用的方法&#xff0c;也就是本篇文章介绍的。 后面会继续…

el-table表格嵌套子表格:展开所有内容;对当前展开行内容修改,当前行默认展开;

原文1 原文2 原文3 一、如果全部展开 default-expand-all"true" 二、设置有数据的行打开下拉 1、父table需要绑定两个属性expand-row-key和row-key <el-table:data"tableData":expand-row-keys"expends" //expends是数组&#xff0c;设置…

区间预测 | MATLAB实现QRDNN深度神经网络分位数回归时间序列区间预测

区间预测 | MATLAB实现QRDNN深度神经网络分位数回归时间序列区间预测 目录 区间预测 | MATLAB实现QRDNN深度神经网络分位数回归时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现QRDNN深度神经网络分位数回归时间序列区间预测。QRDNN模型…

用.Net Core框架创建一个Web API接口服务器

我们选择一个Web Api类型的项目创建一个解决方案为解决方案取一个名称我们这里选择的是。Net 8.0框架 注意&#xff0c;需要勾选的项。 我们找到appsetting.json配置文件 appsettings.json配置文件内容如下 {"Logging": {"LogLevel": {"Default&quo…

扩展SpringBoot中的SpringMVC的默认配置

SpringBoot默认已经给我们做了很多SpringMVC的配置&#xff0c;哪些配置&#xff1f; 视图解析器ViewResolver静态资料的目录默认首页index.html图标名字和图标所在目录&#xff0c;favicon.ico类型转换器Converter&#xff0c;格式转换器的Formatter消息转换器HttpMessageCon…

练习题:一维数组

练习题 第一题 键盘录入一组数列&#xff0c;利用冒泡排序将数据由大到小排序 代码 #include <stdio.h>int arr_home01() {int arr[10];int i,j,temp;printf("请输入10个测试整数&#xff1a;\n");int len sizeof(arr) / sizeof(arr[0]);for(i 0;i < …

2024安装hexo和next并部署到github和服务器最新教程

碎碎念 本来打算写点算法题上文所说的题目&#xff0c;结果被其他事情吸引了注意力。其实我之前也有过其他博客网站&#xff0c;但因为长期不维护&#xff0c;导致数据丢失其实是我懒得备份。这个博客现在部署在GitHub Pages上&#xff0c;github不倒&#xff0c;网站不灭&…

【鸿睿创智开发板试用】RK3568 NPU的人工智能推理测试

目录 引言 驱动移植 例程编译 修改build.sh 执行编译 运行测试 部署libc的库文件 执行测试程序 结语 引言 鸿睿创智的H01开发板是基于RK3568芯片的&#xff0c;瑞芯微芯片的一大特色就是提供了NPU推理的支持。本文将对其NPU推理进行测试。 驱动移植 H01的开发板已经…

概率论得学习和整理29: 用EXCEL 描述二项分布

目录 1 关于二项分布的基本内容 2 二项分布的概率 2.1 核心要素 2.2 成功K次的概率&#xff0c;二项分布公式 2.3 期望和方差 2.4 具体试验 2.5 概率质量函数pmf 和cdf 3 二项分布的pmf图的改进 3.1 改进折线图 3.2 如何生成这种竖线图呢 4 不同的二项分布 4.1 p0.…

数据结构(二叉树)

前言&#xff1a; 在数据结构那片浩瀚无垠、仿若神秘宇宙的天地里&#xff0c;二叉树宛如一颗散发着独特光辉、极为耀眼的星辰。它就像一位技艺精湛的建筑师&#xff0c;运用独特的二叉分支结构&#xff0c;精心构建起层次分明、秩序井然的数据组织 “大厦”。根节点仿若大厦的…

docker仓库数据传输加密

1.进行加密数据运算对配置文件底下的内容进行删除 [rootlocalhost ~]# vim /etc/docker/daemon.json 重新启动docker程序 [rootlocalhost ~]# systemctl restart docker 2.建立加密目录&#xff0c;生成认证key和证书 [rootlocalhost ~]# mkdir certs [rootlocalhost ~]# open…

大数据技术与应用——数据可视化(山东省大数据职称考试)

大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 数据可视化 大…

【指南】03 CSC联系外导

确定外导 课题组有合作关系的国外导师与自己研究方向密切相关的国外导师国外高校官网、谷歌学术、Research Gate等平台检索不可以是中国港澳台的高校科研院所或机构注意外导所在高校排名和科研水平可列表记录注意外国签证政策 发送邮件 自我介绍简要介绍CSC介绍自己的研究对…

0基础学前端-----CSS DAY6

0基础学前端-----CSS DAY6 视频参考&#xff1a;B站Pink老师 今天是CSS学习的第六天&#xff0c;今天开始的笔记对应Pink老师课程中的CSS第三天的内容。 本节重点&#xff1a;CSS的三大特性以及CSS的盒子模型。 1.CSS的三大特性 CSS有三个重要特性&#xff1a;层叠性、继承性…