嵌入式Linux驱动
文章平均质量分 59
龙心雕虫
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux网络驱动示例之snull网络接口(三):测试验证
1. 编译得到.ko文件后用insmod snull.ko添加模块;2. 在/etc/networks中添加网络号: snullnet0 192.168.0.0 snullnet1 192.168.1.03. 在/etc/hosts中添加主机IP号:192.168.0.1 local0192.168.0.2 remote0192.168.1...原创 2020-01-07 17:06:40 · 563 阅读 · 0 评论 -
Linux网络驱动示例之snull网络接口(二):设备方法的实现
上一节描述了snull网络接口的入口和出口函数,在入口函数分配一个net_device,用snull_init函数初始化net_device的成员,之后注册这个网络设备。初始化net_device成员主要是实现一些设备操作方法,如下所示:static const struct net_device_ops snull_dev_ops = { .ndo_open = s...原创 2020-01-07 16:33:55 · 883 阅读 · 0 评论 -
Linux网络驱动示例之snull网络接口(一):总体框架
《Linux设备驱动程序》(第三版)第十七章以snull网络接口为例讲解了网络驱动程序的设计,本文分析了snull这个示例,并对驱动程序做了一些简化和修改,只保留该程序的核心功能,并在2.6.31版本的内核上测试运行。1. 入口和出口函数 Linux网络设备驱动基本是围绕net_device这个结构做文章,程序的入口函数中主要是分配并注册net_device结构体,对...原创 2020-01-06 16:33:00 · 1578 阅读 · 1 评论 -
Linux设备驱动并发控制的简单总结
设备驱动中并发控制的常用机制:中断屏蔽,原子操作,自旋锁,互斥量。1. 中断屏蔽: Linux的进程调度都使用中断实现,屏蔽中断也就屏蔽了内核抢占引起的并发问题,但是中断屏蔽只针对本CPU,不能解决多 个CPU引起的竞争。 local_irq_disable(); //屏蔽中断 local_irq_enable(); //开中断...原创 2019-11-12 13:05:20 · 194 阅读 · 0 评论 -
Linux块设备驱动(三)程序设计
本节我们利用前两节所总结的内容设计一个简单的块设备驱动程序,分配一块内存作为磁盘实现块设备的功能。首先是一些宏定义和全局变量#define RAMDISK_SIZE (1024*1024)#define SECTOR_SIZE 512static int major;struct ramdisk_dev { unsigned char...原创 2018-10-24 11:02:24 · 958 阅读 · 0 评论 -
platform设备驱动
Linux设备驱动有三个重要概念:总线,设备和驱动。向系统注册设备时,会寻找与之匹配的驱动;同样,向系统注册驱动时,会寻找与其匹配的设备。总线用来完成匹配的动作。 platform总线是Linux提供的一种虚拟总线,设备用struct platform_device表示:...原创 2018-10-10 17:46:16 · 409 阅读 · 0 评论 -
Linux块设备驱动(二)请求
与请求处理相关的几个数据结构:struct request_queuestruct requeststruct bio一个bio对应上层传递的I/O请求,I/O调度算法会把多个bio合并为一个request,多个request又构成了request_queue,request_queue是上节提到的gendisk结构中的成员。bio的定义:...原创 2018-10-16 16:23:06 · 1312 阅读 · 0 评论 -
Linux块设备驱动(一)gendisk结构体
Linux内核中,用gendisk结构体表示一个磁盘设备或分区,块设备驱动程序的设计主要就是围绕gendisk这个数据结构展开的。一个简单的块设备驱动程序框架如下:在init函数中分配、设置、添加一个gendisk;设计gendisk结构体fops成员包含的操作函数;设计gendisk结构体queue(请求队列)成员的请求处理函数。gendisk结构的定义:struct gendis...原创 2018-10-15 22:28:33 · 5147 阅读 · 0 评论 -
Linux I/O多路转接之应用
我们再编写一个应用程序测试上一篇文章的驱动,代码如下:#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include &am原创 2018-09-26 11:56:24 · 156 阅读 · 0 评论 -
Linux I/O多路转接之驱动程序
1. 基本原理:I/O多路转接主要用于操作多个文件描述符的场合,先将要进行I/O操作的描述符构造为一个描述符列表,然后调用select或poll函数,当这些描述符中的一个可以进行I/O时,函数返回,进而我们可以根据结果找到该描述符并进行操作。2. 驱动程序设计:在设备驱动程序中,主要通过poll()函数实现该功能,我们在这里通过对一块内存的操作(这里将其定义为一个名为memfifo的设备),了解...原创 2018-09-26 10:58:41 · 158 阅读 · 0 评论 -
Linux看门狗驱动程序设计(三) 测试验证
测试驱动之前需要执行make menuconfig,去掉内核自带看门狗驱动(位于Device Drivers -> Character devices -> Watchdog Timer Support),重新编译烧写内核。 将驱动编译为wdt_drv.ko文件,insmod加载驱动,如图所示,可以看到probe函数中的提示信息:再编写一个简单的应用程序测试驱动功能,代码...原创 2018-07-01 11:29:00 · 1850 阅读 · 0 评论 -
Linux看门狗驱动程序设计(二) 代码设计
先给出头文件、宏定义及变量定义#include <linux/module.h>#include <linux/moduleparam.h>#include <linux/types.h>#include <linux/timer.h>#include <linux/miscdevice.h>#include <linux/watc...原创 2018-07-01 11:04:49 · 591 阅读 · 0 评论 -
Linux看门狗驱动程序设计(一) 概念和框架
1. 实验目的:设计s3c2410的linux看门狗驱动程序,内核版本linux-2.6.22.62. s3c2410看门狗定时器的相关寄存器 WTCON用于设置看门狗定时器时钟,使能或禁止看门狗定时器,使能或禁止看门狗中断,以及设置是否输出复位信号: WTDAT用于设置看门狗的超时时间 、 WTCNT是看门狗计数器,看门狗...原创 2018-06-30 17:31:12 · 2549 阅读 · 0 评论
分享