嵌入式Linux(2):将Helloworld驱动编译到内核

news2024/12/23 18:12:39

文章目录

  • 分析一个例子
  • 仿写一个例子(需要编译成.ko的)
    • 写三个文件
    • 编辑上一级目录的Makefile文件
    • 编辑上一级目录的Kconfig文件
    • make menuconfig进行配置
  • 烧录到开发板上

分析一个例子

例子:

source "drivers/redled/Kconfig"
config LED__4412
		tristate "Led Support for GPIO Led"
		depends on LEDS_CLASS
		help
		This option enable support for led

分析:

    1. source "drivers/redled/Kconfig" 它会包含/drivers/redled/这个路径下的驱动文件,方便我们对菜单进行管理
    1. config LED__4412 配置选项的名称为 CONFIG_LED_4412
    1. tristate 表示的是当前驱动的状态,有三种状态(tri 前缀词根“三”):把驱动编译成模块,把驱动编译到内核,不编译。与之对应的还有bool类型,分别是编译到内核,不编译。
    1. "Led Support for GPIO Led" 就是make menuconfig显示的名字。
    1. A depends on B 表示只有在选择B的时候才可以选择A。所以例子中的depends on LEDS_CLASS就是在LEDS_CLASS被选中的时候才可以被选中本选项。
    1. 比如我想直接去掉LED相关的东西,直接改.config文件可以吗?可以但是不推荐,如果有依赖的话,直接修改.config是不成功的。
    1. select 就是反向依赖,该选项被选中的时候,后面的定义也会被选中。
    1. help This option enable support for led就是帮助信息。

仿写一个例子(需要编译成.ko的)

写三个文件

1、进入内核源码目录,然后进入drivers/char/目录下,这里就是众多字符设备驱动的地方。在这个目录下新建一个目录mkdir hello,然后进入hello目录,新建文件touch hello.ctouch Kconfigtouch Makefile

hello.c文件

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

static int hello_init(void)
{
	printk("hello world\n");
	return 0;
}
static void hello_exit(void)
{
	printk("Bye Bye\n");
}

/* 模块的入口 */
module_init(hello_init);
/* 模块的出口 */
module_exit(hello_exit);

/* 模块声明 */
MODULE_LICENSE("GPL");

Kconfig文件

config HELLO
	tristate "hello world"
	help
	Hello Liefyuan

Makefile文件

obj-$(CONFIG_HELLO)+=hello.o

OK,上面的三个文件搞好后就像这样:

liefyuan@ubuntu:~/Liefyuan/bingpi-v3s/linux-zero-5.2.y/drivers/char/hello$ ls
hello.c  Kconfig  Makefile

接下来就要在上一级的目录(/drivers/char路径下)里面把我们写的包含进入。

编辑上一级目录的Makefile文件

在上一级目录的Makefile文件里面进行编辑:
将下面这一行添加进去。

obj-y +=hello/

在这里插入图片描述

编辑上一级目录的Kconfig文件

在上一级目录的Kconfig文件里面进行编辑:
将下面这一行添加进去:

source "drivers/char/hello/Kconfig"

在这里插入图片描述

make menuconfig进行配置

如下,就出现了。

Device Drivers  --->
	Character devices  --->
		<*> hello world (NEW)

配置编译进内核,在源码的根目录看看.config里面:
在这里插入图片描述

烧录到开发板上

...
[    0.177909] sun8i-v3s-pinctrl 1c20800.pinctrl: 1c20800.pinctrl supply vcc-pb not found, using dummy regulator
[    0.179041] printk: console [ttyS0] disabled
[    0.199358] 1c28000.serial: ttyS0 at MMIO 0x1c28000 (irq = 34, base_baud = 1500000) is a U6_16550A
[    0.706217] printk: console [ttyS0] enabled
[    0.711217] hello world
[    0.737881] MACsec IEEE 802.1AE
[    0.741315] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    0.747844] ehci-platform: EHCI generic platform driver
[    0.753409] ehci-platform 1c1a000.usb: EHCI Host Controller
...

上电信息有打印hello world说明驱动加载进去了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简单分享微信怎么添加报名链接的步骤

最近看到很多小伙伴都在问有没有简单的报名链接制作办法&#xff0c;因为最近是暑期活动开展的前期&#xff0c;需要用到很多报名链接&#xff0c;希望可以直接通过微信小程序进行报名&#xff0c;扫一扫微信小程序的二维码就可以进入报名页面&#xff0c;然后制作步骤也是简单…

残差 Gabor 卷积网络和 FV-Mix 指数级数据增强策略用于手指静脉识别

论文背景 手指静脉识别系统的性能受到手指静脉训练样本不足的限制&#xff0c;导致特征学习不足和模型泛化能力弱&#xff1a;DCNN 需要大量的数据来学习更抽象的语义信息进行分类。对于指静脉识别&#xff0c;由于每个类别只包含少量样本&#xff0c;极易出现过拟合。原因之一…

MinIO快速入门

一、MinIO概述 官网地址&#xff1a;http://www.minio.org.cn/ 文档地址&#xff1a;http://docs.minio.org.cn/docs/ MinIO是一款基于Apache License v2.0开源协议的分布式文件系统&#xff08;或者叫对象存储服务&#xff09;&#xff0c;可以做为云存储的解决方案用来保存海…

如何借助测控终端实现设备远程运维?

随着物联网技术的发展&#xff0c;数字化越来越重要。数据是新的生产要素&#xff0c;是基础性资源和战略性资源&#xff0c;也是重要生产力。因此许多企业纷纷转型智慧工厂&#xff0c;但老旧的设备无法获取相应的数据&#xff0c;更换老旧设备的成本又太高&#xff0c;就无法…

【计算机架构】如何计算 CPU 时间

目录 0x00 响应时间和吞吐量&#xff08;Response Time and Throughput&#xff09; 0x01 相对性能&#xff08;Relative Performance&#xff09; 0x02 执行时间测量&#xff08;Measuring Execution Time&#xff09; 0x03 CPU 时钟&#xff08;Clocking&#xff09; 0x…

用docker承载mysql

这两天部署系统到生产服务器&#xff0c;前端后端部署docker是毫无疑义的&#xff0c;但mysql呢&#xff1f; 答案是mysql可以部署到docker。 1、数据文件挂载到宿主机 将mysql部署于docker&#xff0c;会有一个担心&#xff0c;就是docker容器的删除非常的容易&#xff0c;…

修改树莓派系统的更新源,软件安装源和pip安装源

本文目录 1、更换系统更新源2、更改软件源3、更换 pip 源4、更新系统与软件5、附加知识 Linux系统常用的安装源主要有系统更新源和软件安装源二大类&#xff0c;系统更新源是用于对Linux系统本身进行升级更新的&#xff0c;软件安装源是用于通过apt命令安装软件的。随着python的…

【Zigbee】解密Zigbee地址分配——你需要知道的一切

&#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是Zeeland&#xff0c;全栈领域优质创作者。&#x1f4dd; CSDN主页&#xff1a;Zeeland&#x1f525;&#x1f4e3; 我的博客&#xff1a;Zeeland&#x1f4da; Github主页: Undertone0809 (Zeeland) (github.com)&…

URL 转为QR code(二维码)

推荐一个良心的网站&#xff0c;能够免费地将url、text编码为二维码&#xff0c;而且还能设计logo、颜色等。 https://www.the-qrcode-generator.com/ 如下图&#xff1a; 可以自己定义logo、颜色&#xff1a; 还能查看扫描历史等统计信息&#xff1a; 上述所有功能都是免…

【人工智能概论】 RNN、LSTM、GRU简单入门与应用举例

【人工智能概论】 RNN、LSTM、GRU简单入门与应用举例 文章目录 【人工智能概论】 RNN、LSTM、GRU简单入门与应用举例一. RNN简介1.1 概念简介1.2 方法使用简介 二. 编码层embedding2.1 embedding的参数 一. RNN简介 1.1 概念简介 循环神经网络(Recurrent Neural Network)理念…

苹果电容笔值得买吗?ipad电容笔推荐平价

在当今时代&#xff0c;高科技已经成为推动数字产品发展的重要推动力。无论是在工作上&#xff0c;还是在学习上&#xff0c;大屏幕都能起到很好的作用。IPAD将会更好地融入我们的生活&#xff0c;不管是现在还是未来。而ipad配上一支简单的电容笔&#xff0c;不仅可以提高工作…

【机器学习】P22 过拟合和欠拟合的探究2,高偏差与高方差

过拟合与欠拟合的探究2&#xff0c;高偏差与高方差 高偏差和高方差过拟合与欠拟合的解决策略带有L2正则化的神经网络带有早停法的神经网络的完整案例 MINST 高偏差和高方差 高偏差和高方差是机器学习中常见的两个问题&#xff0c;会影响模型的性能。 高偏差&#xff08;High …

MySQL数据库,聚合查询

目录 1、聚合查询 1.1聚合函数 1.1.1count函数 1.1.2sum函数 1.1.3avg函数 1.1.4max函数 1.1.5min函数 1.2group by子句 1.3having 1、聚合查询 1.1聚合函数 聚合函数查询又叫函数查询&#xff0c;它是通过一些特定的函数根据需求来查询相关的信息&#xff0c;常见的…

代码随想录|day52| 动态规划part13● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组

300 最长递增子序列 链接&#xff1a;力扣 看了思路之后写的代码&#xff0c;不知道为什么报错了。 错误一&#xff1a; int nnums.size();vector<int>dp(n,0);dp[0]1;for(int i1;i<n;i){for(int j0;j<i;j){if(nums[i]>nums[j]){dp[i]max(dp[i],dp[j]1);}}}retu…

Java版本企业电子招投标采购系统源代码——功能模块功能描述+数字化采购管理 采购招投标

​ 功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为外…

ChatGPT 聊天接口API 使用

一、准备工作 1.准备 OPENAI_ACCESS_TOKEN 2.准备好PostMan 软件 二、测试交流Demo 本次使用POSTMAN工具进行快速测试&#xff0c;旨在通过ChatGPT API实现有效的上下文流。在测试过程中&#xff0c;我们发现了三个问题&#xff1a;    1.如果您想要进行具有上下文的交流&…

【prettier Error resolving prettier configuration for x:\xxx\.prettierrc.js】

Prettier Error resolving prettier configuration for x:\xxx.prettierrc.js 解决方法 Prettier 出现如下错误 错误 内容内联代码片 Error resolving prettier configuration for d:\map\user_package\Leaflet.FileLayer-master\.prettierrc.js ["ERROR" - 10:38…

Facebook、Google、亚马逊,谁将成为跨境电商的营销宠儿?

跨境电商在全球范围内的发展日益迅猛&#xff0c;而营销渠道的选择也变得越来越多样化。在众多的广告平台中&#xff0c;Facebook、Google和亚马逊被公认为是跨境电商卖家们最主要的营销平台。那么&#xff0c;这三个平台中哪个会成为跨境电商的营销宠儿呢&#xff1f; 一、Fac…

自动驾驶——智能底盘构造详解及新发展

摘要&#xff1a; 汽车底盘是指汽车上由传动系统、行驶系统、转向系统和制动系统等部分的组合&#xff0c;其功能包括支承、安装汽车车身、发动机及其它各部件及总成&#xff0c;形成汽车的整体造型&#xff0c;承受发动机动力&#xff0c;保证车辆正常行驶等。 底盘构造介绍 …

摄像头/视频读取_写入

摄像头/视频读取_写入 ➢VideoCapture类: 使用 OpenCV 播放视频&#xff0c;几乎与使用它来显示图像一样容易。播放视频时只需要处理的新问题就是如何循环地顺序读取视频中的每一顿&#xff0c;以及如何从枯燥的电影视频的读取中退出该循环操作。具体如例如下&#xff1a; #…