设备驱动开发_2

编译和调试

主要内容

  • 写一个可加载模块
  • 编译和加载一个可加载模块
  • 使用printk 进行跟踪和调试
  • 使用跟踪和调试

1 写一个可加载模块

内核头文件 linux/module.h
module_init(e1000_init_module)
static int __init e1000_init_module(void)
module_exit (e1000_exit_module)
static void _exit e1000_exit_module(void)

tan@ubuntu:~/samba_workspaces/linux-5.4.26$ cat -n ./include/linux/module.h   | grep "module_init("78   * module_init() - driver initialization entry point81   * module_init() will either be called during do_initcalls() (if85  #define module_init(x)  __initcall(x);108  #define early_initcall(fn)              module_init(fn)109  #define core_initcall(fn)               module_init(fn)110  #define core_initcall_sync(fn)          module_init(fn)111  #define postcore_initcall(fn)           module_init(fn)112  #define postcore_initcall_sync(fn)      module_init(fn)113  #define arch_initcall(fn)               module_init(fn)114  #define subsys_initcall(fn)             module_init(fn)115  #define subsys_initcall_sync(fn)        module_init(fn)116  #define fs_initcall(fn)                 module_init(fn)117  #define fs_initcall_sync(fn)            module_init(fn)118  #define rootfs_initcall(fn)             module_init(fn)119  #define device_initcall(fn)             module_init(fn)120  #define device_initcall_sync(fn)        module_init(fn)121  #define late_initcall(fn)               module_init(fn)122  #define late_initcall_sync(fn)          module_init(fn)124  #define console_initcall(fn)            module_init(fn)126  /* Each module must use one module_init(). */127  #define module_init(initfn)                                     \546  static inline bool within_module_init(unsigned long addr,555          return within_module_init(addr, mod) || within_module_core(addr, mod);725  static inline bool within_module_init(unsigned long addr,
module_init(e1000_init_module);/*** e1000_exit_module - Driver Exit Cleanup Routine** e1000_exit_module is called just before the driver is removed* from memory.**/
static void __exit e1000_exit_module(void)
{pci_unregister_driver(&e1000_driver);
}
module_exit(e1000_exit_module);MODULE_AUTHOR("Intel Corporation, <linux.nics@intel.com>");
MODULE_DESCRIPTION("Intel(R) PRO/1000 Network Driver");
MODULE_LICENSE("GPL v2");
MODULE_VERSION(DRV_VERSION);
"drivers/net/ethernet/intel/e1000e/netdev.c" 7927L, 227450C 

2 编译和加载一个可加载模块

obj-m
cat skeleton.c
cat makefile.1
cat makefile.2 —> 多文件 指向内核参数
/lib/modules/uname -r/build M= P W D m o d u l e s l n − s f m a k e f i l e . 1 m a k e f i l e m a k e − C / l i b / m o d u l e s / ‘ u n a m e − r ‘ / b u i l d M = PWD modules ln -sf makefile.1 makefile make -C /lib/modules/`uname -r`/build M= PWDmoduleslnsfmakefile.1mak

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

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

相关文章

Fiddler抓包(网页、手机、MUMU模拟器)

前置条件&#xff1a;电脑上下载安装好了Fiddler&#xff0c;有浏览器 一、网页抓包 1、fiddler下载安装证书 Tools-Options 勾选下面两个框 点击下面的选项&#xff0c;信任证书 会弹出弹窗&#xff0c;点击yes&#xff08;这个时候注意&#xff0c;DO_NOT_TRUST_FiddlerRo…

七天入门大模型 :大模型量化及低成本部署最佳实践

七天入门大模型已完成了5篇&#xff0c;喜欢记得收藏、关注、点赞。 七天入门大模型 &#xff1a;LLM大模型基础知识最全汇总七天入门大模型 &#xff1a;提示词工程 Prompt Engineering&#xff0c;最全的总结来了&#xff01;七天入门大模型 &#xff1a;LLM和多模态模型高效…

数据结构实验之栈与队列七:出栈序列判定

数据结构实验之栈与队列七&#xff1a;出栈序列判定 Description 给一个初始的入栈序列&#xff0c;其次序即为元素的入栈次序&#xff0c;栈顶元素可以随时出栈&#xff0c;每个元素只能入栈依次。输入一个入栈序列&#xff0c;后面依次输入多个序列&#xff0c;请判断这些序…

【web | CTF】BUUCTF [BJDCTF2020]Easy MD5

天命&#xff1a;好像也挺实用的题目&#xff0c;也是比较经典吧 天命&#xff1a;把php的MD5漏洞都玩了一遍 第一关&#xff1a;MD5绕过 先声明一下&#xff1a;这题的MD5是php&#xff0c;不是mysql的MD5&#xff0c;把我搞迷糊了 一进来题目啥也没有&#xff0c;那么就要看…

物理机安装kali

ventoyU盘,ventoy做好后把kali的iso拷贝到U盘&#xff0c;设置U盘启动&#xff0c;选择kali.iso启动。 安装包 文件SHA256发布日期大小ventoy-1.0.97-windows.zip44fb53f26872c6304e1cb3d47b65d0613665666100c48deeee4cd87901fb500f2024-01-2415 MBventoy-1.0.97-linux.tar.g…

Python OpenCV 牛刀小试(练习)

BGR与RGB OpenCV在读取图像时&#xff0c;默认的颜色空间是BGR&#xff08;蓝绿红&#xff09;&#xff0c;而在大多数其他的图像处理库和图像格式中&#xff0c;使用的颜色空间是RGB&#xff08;红绿蓝&#xff09;。因此&#xff0c;当你需要使用OpenCV处理图像&#xff0c;然…

python系统学习Day3

section4 python function part one&#xff1a;函数的参数 python函数的参数共有五种类型 #位置参数 def power(x):return x * x#默认参数 def power(x, n 2) #设置默认值&#xff08;可省略&#xff09;s 1while n > 0:n n - 1s s * xreturn s#note print(默认参数必…

人工智能学习与实训笔记(十五):Scikit-learn库的基础与使用

人工智能专栏文章汇总&#xff1a;人工智能学习专栏文章汇总-CSDN博客 本篇目录 一、介绍 1. 1 Scikit-learn的发展历程及定义 1.2 理解算法包、算法库及算法框架之间的区别和联系 二、Scikit-learn官网结构 三、安装与设置 3.1 Python环境的安装与配置 3.2 Scikit-lea…

【leetcode刷题之路】面试经典150题(1)——数组/字符串

文章目录 1 数组/字符串1.1 【排序】合并两个有序数组1.2【双指针】移除元素1.3 【双指针】删除有序数组中的重复项1.4 【双指针】删除有序数组中的重复项 II1.5 【数学】多数元素1.6 【数组】轮转数组1.7 【动态规划】买卖股票的最佳时机1.8 【贪心】买卖股票的最佳时机 II1.9…

【Windows】MacOS制作纯净版Windows10安装U盘

方法一、在window系统中更新win10&#xff08;不更新引导程序&#xff09; cp -rp /Volumes/Windows10专业版\ 64位/* /Volumes/WIN10/https://baijiahao.baidu.com/s?id1760695844372493842&wfrspider&forpc 方法二、在window系统中更新win10&#xff08;更新引导程…

《Docker极简教程》--Docker容器--Docker容器的创建和使用

一、创建Docker容器 1.1 使用现有镜像创建容器 当使用现有镜像创建容器时&#xff0c;通常会涉及以下步骤&#xff1a; 获取镜像&#xff1a;首先&#xff0c;需要从Docker Hub或其他镜像仓库获取所需的镜像。可以使用docker pull命令来获取镜像&#xff0c;语法如下&#x…

45. 跳跃游戏 II(难度:中等)

题目链接&#xff1a;https://leetcode.cn/problems/jump-game-ii/ 题目描述&#xff1a; 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳…

软件实例分享,洗车店系统管理软件会员卡电子系统教程

软件实例分享&#xff0c;洗车店系统管理软件会员卡电子系统教程 一、前言 以下软件教程以 佳易王洗车店会员管理软件V16.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、会员卡号可以绑定车牌号或手机号 2、卡号也可以直接使用手机号&a…

【Java万花筒】优雅配置,从容应对:Java配置管理库深度解读

灵活应对变化&#xff1a;Java配置管理库全景解析 前言 在构建现代化的Java应用时&#xff0c;配置管理是一个至关重要的方面。精心设计的配置管理能够为应用提供灵活性、可维护性和适应性&#xff0c;而Java社区提供了多种优秀的配置管理库。本文将深入探讨一些主流的Java配…

优秀的电机驱动MCU:MM32SPIN360C

DC-DC电源布局注意点&#xff1a; 电源模块布局布线可提前下载芯片的datasheet&#xff08;数据表&#xff09;&#xff0c;按照推荐的布局和布线进行设计。 1) 芯片电源接近原则&#xff1a; 对于为芯片提供电压的开关电源&#xff0c;应确保它尽量靠近芯片放置。这样可以避…

2024 CKS 题库 | 8、沙箱运行容器 gVisor

不等更新题库 CKS 题库 8、沙箱运行容器 gVisor Context 该 cluster 使用 containerd 作为 CRI 运行时。containerd 的默认运行时处理程序是 runc 。 containerd 已准备好支持额外的运行时处理程序 runsc (gVisor)。 Task 使用名为 runsc 的现有运行时处理程序&#xff0c;…

【打工日常】使用docker部署可视化工具docker-ui

一、docker-ui介绍 docker-ui是一个易用且轻量化的Docker管理工具&#xff0c;透过Web界面的操作&#xff0c;方便快捷操作docker容器化工作。 docker-ui拥有易操作化化界面&#xff0c;不须记忆docker指令&#xff0c;仅需下载镜像即可立刻加入完成部署。基于docker的特性&…

幻兽帕鲁新手游戏攻略分享

在幻兽帕鲁中&#xff0c;提高实力是玩家不断追求的目标。以下是一些提高实力的攻略&#xff1a; 1、升级和进化&#xff1a;通过战斗和完成任务&#xff0c;玩家可以获得经验值&#xff0c;提升自己的等级。随着等级的提升&#xff0c;玩家可以获得技能点&#xff0c;用于提升…

AGAST角点检测

一、AGAST角点检测 C #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/common/io.h> #include <pcl/visualization/pcl_visualizer.h> #include <boost/thread/thread.hpp> #include <p…

支付交易——跨境交易

摘要 老王兢兢业业经营生意多年&#xff0c;一步步从小杂货店做到现在&#xff0c;成立大型贸易公司。在做大做强的过程中&#xff0c;老王觉得国内市场已经饱和&#xff0c;竞争处处是红海。老王留意海外很多年了&#xff0c;决定走出去&#xff0c;转向海外:将国外的商品引进…