当前位置: 首页 > news >正文

嵌入式Linux新手入门:北京迅为3568开发板驱动开发第二章helloworld 驱动实验

嵌入式Linux新手入门:为什么迅为RK3568+迅为资料是黄金组合

新人必看: 想玩转RK3568,但纠结买哪家?作为开发板,板卡只是半成品,“板卡+保姆级资料”才是你能握在手里的完整武器! 

 嵌入式Linux驱动的学习路径:手持迅为攻略的“开图玩家”

你手里的不是一堆PDF和视频,而是一张清晰的 “驱动开发藏宝图” 。你的学习路径是这样的:

【一】从开机到驱动“Hello World”
1: 跟着《入门指南》成功启动系统,看到串口日志。
2: 参照文档搭建编译环境,成功编译官方提供的第一个内核。
3: 将自己编译的系统烧录进板子,并让一个LED灯闪烁起来。成就达成!


【二】攻克字符设备驱动与设备树
1: 跟着 《第19章 字符设备驱动框架实验》 和 《第25章 点亮LED灯实验》 ,亲手写出按键驱动,并成功在应用层控制。
2: 学习 《第62-68章 设备树系列实验》 ,从语法到实例,彻底看懂驱动如何从设备树中获取硬件资源。
3: 你已经能独立完成一个“按键控制LED”的综合项目,对驱动框架和设备树有了清晰理解。


【三】向高级驱动工程师迈进
研究 《第46-56章 中断与工作队列》 ,处理更复杂的异步事件。
动手 《第121-128章 pinctrl子系统》 和 《第129-137章 GPIO子系统》 ,掌握现代内核引脚管理的标准方法。
开始尝试移植复杂外设,内核源码在你眼中不再是一座孤岛,而是有地图的宝藏。

跟着迅为学习路径: 信心爆棚,每天都在解锁新成就,学习路径清晰可见。

《北京迅为itop-3568开发板驱动开发指南(重制版)》

  1. helloworld 驱动实验

本章编写第一个驱动程序 helloworld,并讲解 Linux 驱动基本框架。 

2.1 驱动编写 

本小节来编写一个最简单的驱动——helloworld 驱动。其程序 helloworld.c 代码如代码清单 

2.1 所示. 

代码清单 2.1

2.2 驱动基本框架 

Linux 驱动的基本框架由模块加载函数,模块卸载函数,模块许可证声明,模块参数,模 

块导出符号,模块作者信息等几部分组成,我们先来看一下这几个部分的作用。

1 模块加载函数(驱动入口函数) 

当加载驱动模块时,内核会执行模块加载函数,完成模块加载函数中的初始化工作。 

2 模块卸载函数(驱动出口函数) 

当卸载驱动模块时,内核会执行模块卸载函数,完成模块卸载函数中的退出工作。

3 模块许可证声明 

许可证声明描述了内核模块的许可权限,如果不声明模块许可,模块在加载的时候,会收到“内核被污染(kernel tainted)”的警告。可接受的内核模块声明许可有“GPL”“GPL v2” 等。 

4 模块参数(可选择) 

内核模块参数是模块被加载的时候可以传递给它的值。

5 模块导出符号(可选择) 

内核模块可以导出的符号,导出符号以后其他内核模块可以使用本模块中的变量或函数。

6 模块作者信息等说明(可选择) 

其中模块参数,模块导出符号,模块作者信息是可选的部分。其余部分是必须有的。

接下来通过驱动基本框架分析 helloworld 驱动。 

(1)模块加载函数:

(2)模块卸载函数:

(3)模块许可证声明

(4)模块作者信息

(5)头文件

通过上面的分析可知,helloworld 驱动包含了驱动框架所有必要部分。因此 helloworld 驱动可以看作是驱动代码的模板。任何一个驱动代码可以都用它作为基础来编写实现。因此同学们要将 helloworld 驱动记忆下来!

http://www.dtcms.com/a/568816.html

相关文章:

  • 动态背景网站邗江区做网站
  • Milvus:向现有Collections更改和添加字段(十一)
  • ESP32C3开发指南(基于IDF):console控制台命令行交互功能
  • harmonyos的鸿蒙的跳转页面的部署参数传递
  • Git 简介和基础使用
  • HarmonyOS Marquee组件深度解析:构建高性能滚动视觉效果
  • 网站建设绿茶科技zencart 网站建设
  • vscode arm交叉编译 中 cmakeTools 编译器设置
  • 全自动化立体仓库巷道堆垛机使用西门子1500PLC通过EtherCAT主站转Profinet实现与EtherCAT协议的伺服进行通讯方案案例
  • MAC M1系统用pyinstaller分别打包支持ARM系统的app和支持Inter系统的APP
  • MTK平台详解`adb devices`输出的序列号组成
  • uniapp实现的Tab 选项卡组件模板
  • 学习Linux——网络基础管理
  • 杭州做网站比较出名的公司有哪些网站 内容建设存在的问题
  • C# ASP.NET MVC Model 分类:数据传输对象(DTO)—— 跨层传数的 “精简快递“
  • Elasticsearch 7.0 介绍与配置详解
  • 如何理解前端开发中框架一词及其优点?
  • ELK学习记录
  • Paho MQTT C 客户端源码深入解析
  • 零基础学AI大模型之RAG系统链路构建:文档切割转换全解析
  • Vue 核心语法详解:模板语法中的绑定表达式与过滤器(附 Vue3 替代方案)
  • CentOS7.6 部署 k3s 单机版
  • 【算法训练营 · 专项练习篇】Stream流与函数式编程
  • 泰州企业做网站百度地图怎么导航环线
  • int8_to_float(output_tensor->data.int8, output_float, load_class_num);
  • 使用Nmap扫描某个服务器所有开放端口
  • 如何看网站是用什么程序做的如何把qq音乐导入到wordpress
  • SpringCloud网关实战:路由与鉴权全解析
  • 基于ResNet50和PyTorch的猫狗图像分类系统设计与实现
  • 自回归模型例题(AR)与ACF/PACF图绘制