首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux驱动之网卡驱动剖析

    Linux 网络设备驱动架构 驱动架构自上而下分为4层: 协议接口层 设备接口层 设备驱动功能层 网络设备与媒介层 协议接口层 协议接口层主要功能是给上层协议提供接收和发送的接口。...传递的数据被描述为套接字缓冲区,用struct sk_buff结构描述,该结构体定义位于include/linux/skbuff.h中,用于Linux网络子系统中的各层之间传输数据,该结构整个网络收发过程中贯穿始终...源码分析 笔者基于的是 S5PV210 的 DM9000 驱动,会大体上对 DM9000 的驱动源码进行分析, 分析源码位于DM9000 源码 platform 框架分析 DM9000 的驱动是基于 platform... kernel 2.5 之后引入了新的处理方式,叫 NAPI,综合了中断方式和轮询方式。...4. open 函数中调用napi_enable使能 NAPI 调度 #ifdef CONFIG_DM9000_NAPI napi_enable(&db->napi); #endif 同样

    56K20

    Linux驱动开发: USB驱动开发

    四、 linux内核下USB相关的API函数与数据结构 前面介绍了USB相关一些基础概念与重要的数据结构,接下来就分析linux内核中如何编写一个USB 驱动程序,编写与一个USB设备驱动程序的方法和其他总线驱动方式类似..., 驱动用它来 USB 驱动的探测回调函数中区分不同的设备 该成员一般来保存一个结构体指针,存放该设备特殊的数据 */ kernel_ulong_t driver_info; 填充struct...(中断传输方式) 5.1 USB驱动注册框架代码 #include #include #include /*...#include /* 本程序为USB鼠标驱动程序,要安装本驱动,需要先将内核自带的USB驱动程序卸载掉 */ //定义USB的IDTAB 24ae:2002 static...驱动层里先定义光谱仪设备的设备ID和厂商ID,当设备插入时,ID匹配成功,就会调用probe函数,probe函数里完成设备信息探测,比如: 端点数据传输方向,数据传输大小,传输方式等等。

    69.7K20

    Linux——Linux驱动之基本理论常识总结(什么是Linux驱动Linux驱动需要掌握哪些?)

    2 Linux驱动程序需要掌握的内容 3 Linux驱动可参考的资源 4 ARM处理器体系架构 5 ARM的前世今生 ---- 0 引言 前面Linux专题中关于Linux下系统编程总结了17篇博文,主要是为了提高...Linux下的C编程应用能力,熟悉Linux编程应用环境,从此篇博文起开始Linux驱动的总结,后面计划加一些综合实践项目练习。...对上:Linux设备驱动给上层提供调用的接口; 对中:Linux设备驱动要注册到内核中,标准说法是 挂载总线上; 对下:直接操作硬件,如GPIO、IIC、SPI、PWM等; 以上三个,Linux内核都提供了大量的接口函数...、结构体,其实Linux驱动,就是掌握了这些东西怎么用,适应到自己要写的驱动程序中。...后来,冯诺依曼结构基础上,又有了创新的哈佛结构,取指令和取数据分开,可以同时进行。

    8.7K30

    Linux SPI 驱动

    是Motorola首先在其MC68HCXX系列处理器上定义的一种高速的,全双工,同步的通信总线,并且芯片的管脚上只占用四根线,节约了芯片的管脚,提供方便,简单易用。...6.重复3~5 由此完成了一个周期内的数据交换,这里的难点在哪里呢,这里核心的难点在于,一定要关注到,MO和MI的同时工作,这里并非是一个周期内只有一条线进行数据采集,而是两根线同时都在进行半周期数据的发送和半周期的数据采集的动作...代码部分均来自于linuxkernel开源代码https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/?...五、总结 个人理解现在这个科技发展的风口下,手机、IOT、车机等终端设备齐放异彩的大背景下,新终端生态的搭建、基础智能设备的整合、大健康的趋势下,Sensor的发展是一个非常关键的驱动力,基础驱动软件能力的掌握也是重中之重...,linux给了我们一个很好的平台让我们能在前辈的肩上进行各种高质量的代码学习,我们也需抓住这个机会,在做好本质工作的基础上静心努力钻研,不断前行,祝愿各位也祝愿我自己技术的道路上越走越远。

    18.4K12

    Linux笔记】Linux驱动基础

    但是,嵌入式Linux中,驱动和应用的分层是特别明显的,最直观的感受就是驱动程序是一个.c文件里,应用程序是另一个.c文件。...调试驱动阶段常常选用第一种方式,因为较为方便;调试完成之后才采用第二种方式与内核一同编译。...那是因为有驱动支撑着与硬件相关的操作,应用程序调用打开、关闭、读、写等操作会触发相应的驱动层函数。 本篇笔记我们以hello驱动做分享,hello驱动属于字符设备。...我们串口终端调用装载与卸载驱动的命令,怎么就会执行装载与卸载操作。...据我了解,之前版本的Linux内核中,设备节点需要手动创建,即通过创建节点命令mknod /dev目录下自己手动创建设备文件。既然已经有新的方式创建节点了,这里就不抠之前的内容了。

    25.9K54

    Linux驱动开发-安装驱动参数传递

    一、简介 Linux下进行C语言开发时,经常在命令行传递参数给C程序,常见的Linux命令也是需要传参的,这样用起来就很灵活,根据不同的参数可以执行不同的效果。...Linux驱动安装时也支持传递参数,和命令行上运行的命令原理类似。 只不过在编写驱动的时候,需要在驱动代码里提前将相关信息声明好才可以使用。...这篇文章就介绍如果在命令安装驱动时,传递参数给驱动代码,演示各种类型的参数传输情况。 驱动代码里声明传入参数的类型、权限,接收的变量名称。...module_param(变量的名称,类型,权限) 二、驱动代码里声明传递参数的格式 /*传递整型类型数据*/ int int_data = 0; module_param(int_data, int...=6 [ 2692.220000] str_data=123 六、驱动安装成功sys目录下查看传递的参数 [root@wbyq code]#cd /sys/module/led_drv/parameters

    15.4K40

    Linux驱动开发: 块设备驱动开发

    块设备是与字符设备并列的概念, 这两类设备 Linux驱动的结构有较大差异,总体而言, 块设备驱动比字符设备驱动要复杂得多, I/O 操作上表现出极大的不同,缓冲、 I/O 调度、请求队列等都是与块设备驱动相关的概念...Linux中,驱动对块设备的输入或输出(I/O)操作,都会向块设备发出一个请求,驱动中用request结构体描述。...但对于一些磁盘设备而言请求的速度很慢,这时候内核就提供一种队列的机制把这些I/O请求添加到队列中(即:请求队列),驱动中用request_queue结构体描述。...通用块层中,通常用一个bio结构体来对应一个I/O请求。 Linux提供了一个gendisk数据结构体,用来表示一个独立的磁盘设备或分区,用于对底层物理磁盘进行访问。...注意: 名称必须保证系统中是唯一的(不能与设备名称重名)。

    32.2K30

    linux设备驱动第四篇:linux驱动调试方法

    普通的c应用程序中,我们经常使用printf来输出信息,或者使用gdb来调试程序,那么驱动程序如何调试呢?...我们知道调试程序时经常遇到的问题就是野指针或者数组越界带来的问题,应用程序中运行这种程序就会报segmentation fault的错误,而由于驱动程序的特殊性,出现此类情况后往往会直接造成系统宕机...下面就根据一个简单的实例来说明如何调试驱动程序。...如何根据oops定位代码行 我们借用linux设备驱动第二篇:构造和运行模块里面的hello world程序来演示出错的情况,含有错误代码的hello world如下: #include <linux/...printk的使用方法类似printf,只是要注意一下打印级别,详细介绍linux设备驱动第二篇:构造和运行模块中已有描述,另外需要注意的是大量使用printk会严重拖慢系统,所以使用过程中也要注意。

    10.5K171

    Linux电源驱动-Linux Cpuidle Framework

    前言 现如今,Linux处理器电源管理重点聚焦处理器处于运行状态时对其进行电源管理,主要的技术是Cpufreq: 根据cpu的负载,实时的改变cpu的频率或这电压,同时管理处理器的性能水平和电源功耗等...面对火热移动处理器市场的前提下,众多处理器都亟待加入到空闲状态下进行功耗管理,这时候linux系统就需要一套通用的架构来管理这些cpu,这就是本文的标题: Linux Cpuidle Framework...在上面说过,目前多处理器都支持多种idle状态,而且每个状态下的功耗不同。linux使用cpuidle_state结构用来表示各个idle状态。...对该cpu下的idle状态,需要一个统一的管理者,这时候cpuidle驱动就来管理该cpu下的各种状态。linux使用cpuidle_driver结构来表示cpuidle的驱动。...,此处的获取驱动程序也是存在两种方式,一种是从cpuidle_curr_driver中获取,另一种是从每个cpu的cpuidle_drivers链表中获取,此内容注册驱动的时候已经涉及到。

    22.2K20

    Linux内核驱动编写

    # 前言 开发过单片机的小伙伴可以看一下我之前的一篇文章从单片机开发到linux内核驱动,以浅显易懂的方式带你敲开Linux驱动开发的大门。...memory.c /** * * 驱动初始化 */ /* Necessary includes for device drivers */ #include <linux...memory_read函数 * 参数1:file结构 * 参数2:一个缓冲区 * 参数3:要传输的字节数 * 参数4:f_pos,表示从哪里开始读取该设备文件 * * 本例中,memory_read函数通过...如果驱动模块中有实现自动生成当前设备文件节点的代码,那么会使用和热拔插相关的代码脚本,自动/dev下面生成对应的设备文件。 如果没有,只能自己手动来生成这个设备文件。...在内核维护的设备和驱动列表中寻找你驱动模块中注册的设备和驱动

    7.2K21

    Linux笔记】LED驱动

    前言 上一篇我们分享了字符设备驱动框架:嵌入式Linux驱动基础,当时分享的是hello驱动程序。...STM32点灯的时候,一般输出低电平点灯,输出高电平灭灯。嵌入Linux操作系统的情况下,我们自然也要想到有个写1/0的思想。类比我们上一篇的hello程序: ?...这里我们做的实验室与硬件无关的LED实验:我们的驱动程序收到应用程序发送过来的0时打印led on、收到1时打印led off。...这里我们再加入与硬件有关的相关操作以构造与硬件有关的LED驱动程序。 我们进行STM32的裸机编程的时候,对一些外设进行配置其实就是操作一些地址的过程,这些外设地址芯片手册中可以看到: ?...谢谢 参考/学习资料: 百问网《嵌入式Linux应用开发完全手册第2版》 正点原子《I.MX6U嵌入式Linux驱动开发指南V1.2》 野火《i.MX Linux开发实战指南》

    8.6K32

    字符串JVM的哪里

    关于字符串JVM的哪里 字符串对象JVM中可能有两个存放的位置:字符串常量池或堆内存。...提供了一个API, java.lang.String.intern(),这个API可以手动将一个字符串对象的值转移到字符串常量池中 JDK1.7之后虽然字符串常量池也转换到了堆中,但是其实字符串常量池是堆中独立开辟的空间...我们创建一个普通字符串和一个字符串对象结构类似于下图 代码验证 这里其实我们可以看出一些intern()的特性了. intern源码分析 我们来看intern方法的实现,intern方法的底层是一个native方法,Hotspot...JVM里字符串常量池它的逻辑注释里写得很清楚....总结 Java应用恰当得使用String.intern()方法有助于节省内存空间,但是使用的时候,也需要注意,因为StringTable的大小是固定的,如果常量池中的字符串过多,会影响程序运行效率。

    4.3K30
    领券