驱动---动态模块编译

动态模块编译

ctags 用法 

  • 创建文件 ------- ctags -R 
    一定要在顶层目录下

    1. ctags –R *  

    2.   vi –t tag    (请把tag替换为您欲查找的变量或函数名)
    3. Ctrl + ]    (跳转到要找的目标)
    4. Ctrl + T   (回跳)

    5. set tag=/path/tags(vi 底行模式下设置目标tags)

动态加载模块 ---- 每次不用再 make uImage  进入minicom 也不需要tftp 0x30008000 uImage

著需要修改完后 make demo.ko  再cp

  • make menvconfig 对应模块设置为        M

     
  • make modules 编译动态加载的驱动模块(与对应的.c 文件在同一目录下)

     


  •  
  • insmod demoy.ko 动态加载驱动模块

    lsmod 查看已经动态加载的驱动模块

     
  • 运行模块

GPL:许可证

修改:

#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/kdev_t.h>
#include <linux/cdev.h>
#include <linux/module.h>#define MAJOR_NUM 255
#define MINOR_NUM 0
#define DEV_NAME "demo"
#define DEV_NUM 1static int open (struct inode * inode, struct file * file)
{printk("demoy open ...\n");return 0;
}static ssize_t read (struct file * file, char __user * buf, size_t len, loff_t * offset)
{printk("demoy read ...\n");return 0;
}static ssize_t write (struct file * file, const char __user * buf, size_t len, loff_t * offset)
{printk("demoy write ...\n");return 0;
}static int close (struct inode * inode, struct file * file)
{printk("demoy close ...\n");return 0;
}static struct file_operations fops = 
{.owner = THIS_MODULE,.open = open,.read = read,.write = write,.release = close
};
static struct cdev cdev;
static dev_t dev;static int __init demo_init(void)
{int ret =0;dev = MKDEV(MAJOR_NUM, MINOR_NUM);cdev_init(&cdev, &fops);ret =cdev_add(&cdev, dev, DEV_NUM);if(ret < 0)goto err_cdev_add;ret  = register_chrdev_region(dev, DEV_NUM, DEV_NAME);if(ret <0)goto err_register_chrdev_region;printk("demo_init  ###############################\n");return ret;err_cdev_add:cdev_del(&cdev);printk("demoy_cdv add fail");return ret;err_register_chrdev_region:unregister_chrdev_region(dev, DEV_NUM);printk("demoy_register fail");return ret;}static void __exit demo_exit(void)
{unregister_chrdev_region(dev, DEV_NUM);cdev_del(&cdev);printk("demo_exit  ###############################\n");
}module_init(demo_init);
module_exit(demo_exit);
MODULE_LICENSE("GPL");

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

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

相关文章

计算机的错误计算(九十八)

摘要 探讨 的计算精度问题。 由计算机的错误计算&#xff08;九十六&#xff09;知&#xff0c;IEEE 754-2019标准中含有 运算。 另外&#xff0c;似乎没有语言直接编程实现内置了该运算。 例1. 已知 x-0.9999999999321 . 计算 不妨用Java编程计算&#xff1a; import…

【linux】基础IO(上)

1. 共识原理 文件 内容 属性文件分为 打开的文件 没打开的文件打开的文件 &#xff1a; 是进程打开的 ----- 本质是要研究文件和进程的关系没打开的文件 &#xff1a; 没打开的文件储存在磁盘上&#xff0c;由于没打开的文件很多&#xff0c;所以需要分门别类的防止好&…

【Linux实用教程】-03-用户权限命令

点个关注吧 &#x1f334; 3.1 Linux 的用户和组 &#x1f33e;3.1.1 用户的管理 添加用户 useradd 添加一个用户useradd test 添加 test 用户useradd test -d /home/t1 指定用户 home 目录 注意&#xff1a; 用户操作需要使用管理员权限操作&#xff0c;可以先使用…

8583 顺序栈的基本操作

### 思路 1. **初始化栈**&#xff1a;分配初始大小为 STACK_INIT_SIZE 的内存空间&#xff0c;并将 base 和 top 指针指向该空间的起始位置。 2. **入栈**&#xff1a;检查栈是否已满&#xff0c;如果已满则扩展栈的存储空间。将新元素插入栈顶&#xff0c;并更新 top 指针。 …

用pod部署prometheus

用pod部署prometheus node_exporter 节点数据收集器 daemonset ————> 保证每个节点都有一个收集器 prometheus————>监控主程序 grafana————>图形化 altermanager————>告警模块 [rootmaster01 ~]# kubectl create ns monitor-sa namespace/moni…

【天怡AI-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

使用SpringCloud构建可伸缩的微服务架构

Spring Cloud是一个用于构建分布式系统的开源框架。它基于Spring Boot构建&#xff0c;并提供了一系列的工具和组件&#xff0c;用于简化开发分布式系统的难度。Spring Cloud可以帮助开发人员快速构建可伸缩的微服务架构。 要使用Spring Cloud构建可伸缩的微服务架构&#xff0…

外国药品位置检测系统源码分享

外国药品位置检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

office2016 增强版 KMS

第一步&#xff1a; 用管理员权限登陆&#xff1a;Windows PowerShell &#xff08;安装最新的 PowerShell&#xff0c;了解新功能和改进&#xff01;https://aka.ms/PSWindows&#xff09; 第二步&#xff1a; C:\Windows\system32> cd C:\Program Files\Microsoft Off…

OpenCv(一)

计算机视觉和机器视觉的区别 计算机视觉&#xff08;Computer Vision&#xff09;和机器视觉&#xff08;Machine Vision&#xff09;是两个密切相关但又有区别的领域。两者在应用、技术和目标上都有所不同。 **计算机视觉&#xff1a;**主要是研究如何使计算机能够理解和处理…

cadence SPB17.4 - allegro - 用板子外形创建整板铺铜

文章目录 cadence SPB17.4 - allegro - 用板子外形创建整板铺铜概述笔记先确定自己板子的 board Geometry/Design_Outline 是否有外形shape为了将软件提示看得更清楚&#xff0c;在每个操作之前&#xff0c;先将命令提示区内容先删了用Z-copy从外形层生成整板的铺铜备注END cad…

[PTA]7-6 整数分解为若干项之和

[PTA]7-6 整数分解为若干项之和 将一个正整数N分解成几个正整数相加&#xff0c;可以有多种分解方法&#xff0c;例如761&#xff0c;752&#xff0c;7511&#xff0c;…。编程求出正整数N的所有整数分解式子。 输入格式&#xff1a; 每个输入包含一个测试用例&#xff0c;即…

Oracle 19c 安装教程学习

Oracle 19c 安装教程学习 &#xff08;最新&#xff09; 很久没有用Oracle 我记得用的时候还是 2021年 &#xff0c;那个时候用的 Oralce 11g 。 今天本人实测安装 。 今天的学习目标就是教大家怎么安装 。直接上图 19c下载地址&#xff1a;https://www.oracle.com/cn/databa…

【高级编程】网络编程 基于 TCPUDP 协议的 Socket 编程

文章目录 IP地址Socket基于 TCP 协议的 Socket 编程基于 UDP 协议的 Socket 编程 IP地址 IP地址&#xff08;Internet Protocol&#xff09;&#xff1a;唯一标识网络上的每一台计算机 IP地址的组成&#xff1a;32位&#xff0c;由4个8位二进制数组成 11000000.10101000.000…

TMStarget学习——Functional Connectivity

今天基于结构像和功能像数据试验操作TMStarget 的第二个功能模块Functional Connectivity。参考季老师的文档PPT来学习的&#xff0c;整个处理过程蛮长的&#xff0c;可能配置原因一路上报错也比较多&#xff0c;下面还是逐步记录吧&#xff0c;后面采用连更的方式直到跑通后再…

微服务注册中⼼2

5.Nacos配置管理 Nacos除了可以做注册中⼼&#xff0c;同样可以做配置管理来使⽤ 5.1 统⼀配置管理 当微服务部署的实例越来越多&#xff0c;达到数⼗、数百时&#xff0c;逐个修改微服务配置就会让⼈抓狂&#xff0c;⽽且很容易出错。我们需要⼀种统⼀配置管理⽅案&#xf…

怎样把PPT上顽固的图标删了

例如&#xff1a; 解决&#xff1a; 首先打开下载好的PPT模板&#xff0c;然后在视图选项卡里面找到幻灯片母版。 进入幻灯片母版后&#xff0c;找到第一页母版页就会看到LOGO了&#xff0c;这时使用鼠标就可以选中删除啦。

【论文阅读】PolarNet: 3D Point Clouds for Language-Guided Robotic Manipulation

Abstract 基于自然语言指令的机器人理解和执行操作任务的能力是机器人的长期目标。语言引导操作的主要方法使用 2d 图像表示&#xff0c;这在组合多视图相机并推断精确的 3d 位置和关系方面存在困难。为了解决这些限制&#xff0c;我们提出了一种基于三维点云的policy&#xf…

供方软件供应链安全保障要求及开源场景对照自评表(下)

国标《信息安全技术 软件供应链安全要求》确立了软件供应链安全目标&#xff0c;规定了软件供应链安全风险管理要求和供需双方的组织管理和供应活动管理安全要求。 开源软件供应链作为软件供应链的一种特殊形式&#xff0c;该国标亦适用于指导开源软件供应链中的供需双方开展组…

专业化的自动化解决方案 VM5XX系列模块在应力应变、仪器仪表和自动化信息化领域的广泛应用

专业化的自动化解决方案 VM5XX系列模块在应力应变、仪器仪表和自动化信息化领域的广泛应用 VM501系列模块是一款专业化的读数模块&#xff0c;采用了单振弦式传感器激励、频率读取和温度转换技术。该模块具有集成度高、体积小、精度高和适应能力强等优点&#xff0c;能够极大地…