如何将驱动编译为kernel 模块

news2025/1/13 2:25:17

前言:

本文章目标平台是PC Linux,不包含其他平台。
执行下面的步骤之前,请先编译kernel通过。

linux KO编译

将驱动程序源码集成到Linux内核中:

  1. 将驱动源码文件放到drivers/net/wireless并命名

自己简单创建的几个没有任何关联的源文件:
在这里插入图片描述
并命名为:driver_test
在这里插入图片描述
任意贴一个源程序代码:dricer.c

#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#define HUANGRUI  1
#define huangrui 2

MODULE_LICENSE("GPL v2");
int huangrui_function(void)
         {
                 int i=1,j=2;
                 if (i==2)
                 {
                         return 0;
                 }
                 else if(j ==3)
                 {
                         return 1;
                 }
                 else
                 {
                         return 2;
                 }

         }

其中MODULE_LICENSE(“GPL v2”);是必须要的

  1. 在drivers/net/wireless/Makefile中添加相应源码目录:

在这里插入图片描述

  1. 在drivers/net/wireless/Kconfig中添加相应Kconfig目录

在这里插入图片描述

  1. 在driver_test中创建Kconfig和Makefile

在这里插入图片描述
Konfig

 config DRIVER_TEST
      tristate  "driver_test_bool"
      depends on USB
      select USB_USBNET
      select USB_NET_CDCETHER
      default m
      help
        driver testing

Kconfig的字符解释

  • menuconfig:表示菜单(本身属于一个菜单中的项目,但是他又有子菜单项目)config表示菜单中的一个配置项(本身并没有子菜单下的项目)。一个menuconfig后面跟着的所有config项就是这个menuconfig的子菜单。这就是Kconfig中表示的目录关系。
  • source:内核源码目录树中每一个Kconfig都会用source引入其所有子目录下的Kconfig,从而保证了所有的Kconfig项目都被包含进menuconfig中。这个也说明了:如果你自己在linux内核中添加了一个文件夹,一定要在这个文件夹下创建一个Kconfig文件,然后在这个文件夹的上一层目录的Kconfig中source引入这个文件夹下的Kconfig文件。
  • tristate:意思是三态(3种状态,对应Y、N、M三种选择方式),意思就是这个配置项可以被三种选择。
  • bool:是要么真要么假(对应Y和N)。意思是这个配置项只能被2种选择。
  • depends:意思是本配置项依赖于另一个配置项。如果那个依赖的配置项为Y或者M,则本配置项才有意义;如果依赖的哪个配置项本身被设置为N,则本配置项根本没有意义。depends项会导致make menuconfig的时候找不到一些配置项。所以在menuconfig中如果找不到一个选项,但是这个选项在Kconfig中却是有的,则可能的原因就是这个配置项依赖的一个配置项是不成立的。depends依赖的配置项可以是多个,还可以有逻辑运算。这种时候只要依赖项目运算式子的结果为真则依赖就成立。
  • select:表示depends on的值有效时,下面的select也会成立,将相应的内容选上。
  • default:表示depends on的值有效时,下面的default也会成立,将相应的选项选上,有三种选项,分别对应y,n,m。
  • help:帮助信息,解释这个配置项的含义,以及如何去配置他。
    Makefile
MODULE_NAME := driver_all
$(MODULE_NAME)-y :=           \
                   driver.o     \
                   led.o        \
                   key.o
obj-$(CONFIG_DRIVER_TEST) += $(MODULE_NAME).o
  1. 使用make menuconfig命令选择宏定义
    使用"/DRIVER_TEST"查找目录:
    在这里插入图片描述
    接下来:
    在这里插入图片描述
    接下来Device Drivers —>Network device support —>driver_test_bool
    如下图:
    在这里插入图片描述
    配置好后保存,检查根目录的.config文件是否生效。
  2. 使用make命令进行全编译。
    在这里插入图片描述
  3. 如果没有报错,会生成相应的ko文件
    在这里插入图片描述

这不是正式的驱动移植,驱动移植的具体细节还要具体debug

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

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

相关文章

力扣(LeetCode)30. 串联所有单词的子串(C++)

滑动窗口哈希表 哈希表 tottottot 存 wordswordswords 所有单词的出现次数。 维护滑动窗口&#xff0c;窗口长度 mwm\times wmw &#xff0c; mmm 是单词数量 www是单词长度 &#xff0c; 窗口长度对应可行解的长度。哈希表 wdwdwd 维护滑动窗口内每个单词的出现次数。 维护…

jstack问题定位分析

目录 1、jstack是什么 2、jstack的使用 1、jstack是什么 jstack是java虚拟机自带的一种堆栈跟踪工具。jstack用来打印出给定的java进程ID或者core file或者远程调试服务的java堆栈信息。 主要是用于生成java虚拟机当前时刻的线程快照&#xff0c;线程快照是当前java虚拟机…

记录运行项目的一些报错

一、git pull 报错 There is no tracking information for the current branch. Please specify whic... There is no tracking information for the current branch.Please specify which branch you want to merge with.See git-pull(1) for detailsgit pull <remote>…

身份安全的零信任方法

一、什么是零信任&#xff1f; 零信任是一组不断发展的网络安全范例术语&#xff0c;它将组织的防御措施从静态的、基于网络的边界转移到关注用户、资产和资源。这是一种安全心态&#xff0c;在明确验证之前&#xff0c;每个传入连接都被视为潜在的恶意请求。这个概念是由世界…

【特征选择】基于二元多邻域人工蜂群 (BMNABC) 特征选择问题(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

1.EdgeX实战 Ubuntu18.04搭建运行环境

文章目录前言:1、搭建Ubuntu18.04服务器平台2、安装docker和docker-compose3、运行EdgeX4、使用浏览器访问EdgeX前言: 想着把之前arduino和树莓派搭建的物联网平台迁移到EdgeX上来&#xff0c;原因有二&#xff1a; 不想去造轮子&#xff0c;自己从零开始写一个物联网的框架&…

影响 SEO 的排名优化的因素

我们在做网站SEO运营的时候&#xff0c;经常会遇到没有排名的情况。即使我们每天保持原创内容的更新和发布&#xff0c;也没有用。这时候就要马上检查网站存在哪些问题&#xff0c;及时解决&#xff0c;让我们的日常努力尽快盈利。以下因素按米贸搜排序&#xff0c;影响SEO排名…

凡亿教育嘉立创宠粉福利,9.9元秒杀PCB多层板设计实战特训班

层林浸染&#xff0c;秋意渐浓 随着双11活动的落幕 意味着工程师最忙碌的时候即将结束 然而在这多事之秋&#xff0c;还是项目高峰期 想必很多工程师都很少过好双11吧 这可不行&#xff01;&#xff01;&#xff01; 别人家有的&#xff0c;我们家的工程师都要有&#xff01;为…

pytest学习和使用10-Pytest中的测试用例如何跳过执行?

10-Pytest中的测试用例如何跳过执行&#xff1f;1 引入2 Unittest中的用例跳过3 pytest.mark.skip4 pytest.skip()5 pytest.mark.skipif()6 跳过标记7 pytest.importorskip1 引入 有时候我们需要对某些指定的用例进行跳过&#xff0c;或者用例执行中进行跳过&#xff0c;在Uni…

高项 成本管理论文

4个过程 1&#xff0c;规划成本&#xff1a;为规划、管理、花费和控制项口成本而制定政策、程序和文档的过程。 2&#xff0c;估算成本&#xff1a;对完成项目活动所需资金进行近似估算的过程。 3&#xff0c;制定预算&#xff1a;汇总所有单个活动或工作包的估算成本&…

【面试题】JavaScript面试题详细总结(一)

js基础部分 01 值类型与引用类型 1.1 问法 js判断数据类型&#xff1f;js值类型与引用类型有哪些&#xff1f;值类型与引用类型的区别&#xff1f; 1.2 介绍 JavaScript存储数据两个区域&#xff1a;栈和堆 栈&#xff1a;通常空间是固定的&#xff08;占据空间小、大小固定&…

MySQL基础|数据库存储时间段,数字从指定值递增AUTO_INCREMENT【详细版,建议收藏】

今天&#xff0c;在写SQL语句存储时间时遇到了一些问题&#xff0c;最后成功解决了 mysql基础一、时间字段的格式限制&#xff08;一&#xff09;精确到秒的表达1、错误的表达2、解决方式如下3、查看创建的表&#xff08;二&#xff09;存储一个时间段1、错误的表达语句2、解决…

一个优秀的程序员应该养成哪些好的习惯?

文章目录一、写代码前先想好思路&#xff0c;先规划框架&#xff0c;再到局部实现二、注重代码风格三、注重代码执行效率四、掌握一些编码原则五、解决问题时&#xff0c;对于原理性的问题&#xff0c;不要面向搜索引擎编程。六、注重基础知识的学习&#xff0c;不忙碌跟风新技…

分享美容美发会员管理系统功能的特点_分享美容美发会员管理系统的制作

人们越来越关心美发&#xff0c;美发行业发展迅速&#xff0c;小程序可以连接在线场景&#xff0c;许多美发院也开发了会员卡管理系统。那么一个实用的美发会员管理系统怎么制作呢&#xff1f;它有什么功能&#xff1f;我们一起来看看~&#xff08;干货满满&#xff0c;耐心看完…

艾美捷Immunochemistry FAM FLICA Poly Caspase检测方案

Caspases在细胞凋亡和炎症中发挥重要作用。ICT的FLICA检测试剂盒被研究人员用于通过培养的细胞和组织中的胱天蛋白酶活性来定量凋亡。FAM FLICA Poly Caspase探针允许研究人员评估胱天蛋白酶的激活。 用艾美捷Immunochemistry FAM-FLICA Poly caspase检测试剂盒检测活性半胱天冬…

2022年信息学部物联网工程学院学生科协机器学习科普

什么是机器学习 机器学习是一门多领域交叉学科&#xff0c;涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为&#xff0c;以获取新的知识或技能&#xff0c;重新组织已有的知识结构使之不断改善自身的性能。 它是人…

【安全学习】记一次内网环境渗透

注意&#xff1a; 本文仅用于技术讨论与研究&#xff0c;对于所有笔记中复现的这些终端或者服务器&#xff0c;都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技术仅用于学习目的&#xff0c;如果列出的技术用于其他任何目标&#xff…

讲讲 Redis 缓存更新一致性,看了都说好!

当执行写操作后&#xff0c;需要保证从缓存读取到的数据与数据库中持久化的数据是一致的&#xff0c;因此需要对缓存进行更新。 因为涉及到数据库和缓存两步操作&#xff0c;难以保证更新的原子性。 在设计更新策略时&#xff0c;我们需要考虑多个方面的问题: 对系统吞吐量的影…

那些测试行业的细分岗位,你知道多少?薪资又如何?

软件测试是个需求多&#xff0c;就业机会大的职业。目前&#xff0c;我国具备软件测试能力的人员数量和市场需求相差巨大&#xff0c;巨大的市场空缺&#xff0c;使软件测试工程师从初级到高级&#xff0c;只需要 1 年甚至更短的时间来完成。所以作为一名软件测试工程师&#x…

【北亚数据恢复】不认盘的移动硬盘恢复数据案例解决方案

【案例一】 一块西数移动硬盘不小心摔了&#xff0c;插到电脑上就不认盘&#xff0c;之后没在其他的任何操作。这是比较典型的硬盘故障类型&#xff1a;故障原因就是移动硬盘磁头损坏。 北亚数据恢复工程师在用户同意的前提下开盘&#xff0c;对移动硬盘开盘换磁头。&#xff0…