文章标题 ╰+哭是因爲堅強的太久メ 2022-07-14 20:29 45阅读 0赞 应用层open,write,read根据打开文件的属性找到对应的硬件或者存储设备驱动。 驱动框架 ### 一、LED驱动框架 ### (1)、写出len\_open,len\_read……… (2)、怎么告诉内核 a.定义一个file\_operations b.把该结构用register\_chrdev(major,”first\_drv”,&first\_drv\_fops);函数注册内核,告诉内核 c.谁来调用->驱动的入口调用first\_drv\_init…… int first_drv_init(void) { register_chrdev(major,"first_drv",&first_drv_fops);//注册,告诉内核 return 0; } d.修饰module_init(first_drv_init);//module_init定义一个结构体,该结构体里有一个函数指针,指向first_drv_init入口函数,当我们安装加载一个驱动时,内核会自动去找该结构体,调用里面的函数指针指向first_drv_init入口函数,入口函数就把first_drv_fops结构告诉内核。 //驱动程序 #include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/init.h> #include <linux/delay.h> #include <asm/uaccess.h> #include <asm/irq.h> #include <asm/io.h> #include <asm/arch/regs-gpio.h> #include <asm/hardware.h> static int first_drv_open(struct inode *inode, struct file *file) { printk("first_drv_opne\n"); return 0; } static ssize_t firse_drv_write(struct file *file, const char __user *buf, size_t count, loff_t * ppos) { printk("first_drv_write\n"); return 0; } static struct file_operations s3c24xx_leds_fops = { .owner = THIS_MODULE, /* 这是一个宏,推向编译模块时自动创建的__this_module变量 */ .open = first_drv_open, .write = firse_drv_write, }; int first_drv_init(void) { register_chrdev(111,"first_drv",&first_drv_fops);//注册,告诉内核 return 0; } void first_drv_exit(void) { unregister_chrdev(111,"first_drv");//卸载驱动 return 0; } module_init(first_drv_init); module_exit(first_drv_init); 驱动程序:make 之后加载xxx.ko:insmod xxx.ko,通过cat /proc/devices可以查看到驱动设备和设备号。 设备写0:系统自动分配主设备号,不是手动分配。 //测试程序 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> int main(int argc,char **argv) { int fd; int val = 1; fd = open("/dev/xxx",O_RDWR); if(fd < 0) printf("can't open!\n"); write(fd,&val,4); return 0; } 测试应用程序: 1.mknod /dev/xxx c 9 0//根据设备号手动创建立该设备节点,再执行该a.out就会执行驱动程序,显示执行结果。 2.驱动里面提供系统信息,mdev就可以自动创建该设备节点。 cat /proc/devices //查看驱动设备,设备号 cat /proc/mounts //查看已挂载文件系统
相关 文章标题 \[数据库\]关于 Oracle 11g r2 Enterprise Manager (EM) 在windows环境无法启动的解决办法 在环境变量中添加以下三个变量: O 梦里梦外;/ 2022年07月21日 00:04/ 0 赞/ 55 阅读
相关 文章标题 应用层open,write,read根据打开文件的属性找到对应的硬件或者存储设备驱动。 驱动框架 一、LED驱动框架 (1)、写出len\_open,len\_re ╰+哭是因爲堅強的太久メ/ 2022年07月14日 20:29/ 0 赞/ 46 阅读
相关 文章标题 > 原文: [ASM file number 7][] > 作者: Bane Radulovic > 译者:郭旭瑞,沃趣科技产品交付部经理,负责QData Cloud高 柔光的暖阳◎/ 2022年07月12日 11:26/ 0 赞/ 75 阅读
相关 文章标题 CSDN MarkDown语法写博客 二级标题 介绍内容 分隔线:空行,再加上三个横杠— 三级标题 无序列表项一 (横杠 加空格) 无序列表项一 不念不忘少年蓝@/ 2022年06月15日 09:23/ 0 赞/ 247 阅读
相关 文章标题 html部分 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> 小咪咪/ 2022年06月09日 13:39/ 0 赞/ 100 阅读
相关 文章标题 售票厅 【问题描述】 售票厅出售关于音乐会的票,取代原来的卖一张票的形式,而是一组座号连续的票。售票室已经收到很多预订。每个预订包含指定最小座号的一组连续的票。 售 ╰半夏微凉°/ 2022年06月09日 03:49/ 0 赞/ 275 阅读
相关 文章标题 用AJAX简单实现注册页面的用户名检测 js代码: <script> // 原生的方式使用AJAX // function getXMLHttpRequest( 旧城等待,/ 2022年06月09日 02:49/ 0 赞/ 307 阅读
相关 文章标题 状态模式 状态模式定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式主要解决的问题是:当控制一个对象状态转换的条件表达式过于复杂时的情 末蓝、/ 2022年06月05日 07:59/ 0 赞/ 313 阅读
相关 文章标题 apache端口被异常占用导致无法启动的解决方法 最近遇到LNMPA一键安装包的Apache无法启动的问题,Apache提示以下信息: (98)Address alre 红太狼/ 2022年06月03日 01:54/ 0 赞/ 298 阅读
相关 文章标题 coding:utf-8 author = “xshengjing” from Tkinter import \ class App: def init(se Myth丶恋晨/ 2021年09月13日 22:56/ 0 赞/ 403 阅读
还没有评论,来说两句吧...