设备和驱动都会挂在mdio_bus下,匹配时会调用对应的match函数 -- /*--------------------------------...i); break; } } return ret; } EXPORT_SYMBOL(phy_drivers_register); 根据上面的分析...下面就以 fec 网口驱动为例,展示一下网卡 fec 和 phy 的协作过程。...在 phy link 状态变化的情况下,正确配置 mac 的状态。...(例如:根据 phy 自协商的速率 10/100/1000M 把 mac 配置成对应速率) phy 芯片状态在 phy 设备注册的时候已经体现,这里详细讲下如何在 phy link 状态变化的情况下,正确配置
2)电压驱动型的PHY,2线共模电感可以放在PHY侧或线缆侧。 1)和2)的结论表明无论哪种PHY,2线共模电感都可以放在线缆侧。 3)电流驱动型的PHY,3线共模电感要放在PHY侧。...4)电压驱动型的PHY,3线共模电感要放在PHY侧。 5)电流或电压驱动型的PHY,若为2线共模电感+自耦变压器形式,自耦变压器放在RJ45侧。...6)与电流驱动型PHY连接的网络变压器的中心抽头接VCC,VCC为PHY的供电电压。 7)与电压驱动型PHY连接的网络变压器的中心抽头接对地电容。...侧),因此适用于电压驱动型PHY(此结论未找到实际项目佐证)。...PHY,电流驱动型的PHY,2线共模电感要放在线缆侧,因此下图是正确的。
/*platform总线,驱动,设备模型。 这是一种机制。这样会使得驱动编写方便,便于维护*/ /*platform总线是一种虚拟的总线。...platform_uevent, //热插拔函数 .pm = &platform_dev_pm_ops, }; /*******************************platform驱动...******************************************************/ /*平台驱动注册*/ int platform_driver_register(struct...而bus的match函数是通过匹配设备和驱动的name的。如果相互匹配,然后就调用drv的probe函数。...其实和piatform驱动注册时的流程是一样的。 其实,platform总线, 设备, 驱动只是一种机制。 这种机制可以方便编程。 如果要编写基于platform总线设备驱动模型的驱动。
Linux内核版本: 3.5 1.1 Linux下RTC时间的读写分析 1.1.1 系统时间与RTC实时时钟时间 Linux系统下包含两个时间:系统时间和RTC时间。.../include/linux/rtc.h 定义了与RTC有关的数据结构 Linux内核源码自带的RTC驱动代码存放位置: \linux-3.5\drivers\rtc\目录下全是RTC驱动示例代码...RTC框架注销函数 void rtc_device_unregister(struct rtc_device *rtc) 经过RTC注册函数形参分析,RTC子系统的注册需要通过平台设备框架完成,在平台设备的驱动端的...root@wbyq boot]# ./123.sh 记录了9288+1 的读入 记录了9288+1 的写出 4755752字节(4.8 MB)已复制,33.2798 秒,143 kB/秒 默认没有RTC驱动的情况下...RTC驱动端代码 #include linux/module.h> /*驱动模块相关*/ #include linux/init.h> #include linux/fs.h
/*和read的分析过程一样, 我们首先分析tty_write*/ /*最重要的就是do_tty_write函数。...然后调用注册驱动时的ops。
/*串口read函数分析 * 当应用程序调用read系统调用时,会调用tty_fops中的tty_read * 接下来分析tty_read函数 * * 其中最重要的就是ld->ops->read(tty...spin_unlock_irqrestore(&tty->read_lock, flags); *b += n; *nr -= n; } return retval; } /*接下来分析
linux为新的接口设计一套驱动模型,如果驱动工程师想增加某一个驱动,只需要将芯片相关的代码编写,然后注册到rtc核心层中即可。...RTC驱动框架 RTC涉及的代码如下: driver/rtc/class.c: 此文件向linux内核驱动模型注册了一个类RTC, 同时为底层的RTC驱动提供了注册/注销RTC接口。...rtc-dev.c是对各式各样的rtc驱动的一个抽象,所以下一步先分析rtc-dev.c。...接下来分析read函数的执行过程。...接下来分析poll函数。
手把手教你分析 Linux 启动流程 从上文可以得出,start_kernel 函数最后调用的是 rest_init 函数,其实 rest_init 函数不光产生了最重要的 kernel_init (...linux4.14/init/main.c 驱动的优先级:Linux 把系统中需要挂载的各种东西,都分为14个等级,分别为 1--1s--2--2s--3--3s--4--4s--5--5s--6-...-6s--7--7s,数字越小优先级越高,定义在: linux4.14/include/linux/init.h 一般我们自己写的驱动模块,文件最后会声明一个 module_init 和 module_exit...(静态编译) 3、动态加载驱动模块:等 Linux 系统起来以后,手动执行 insmod 和 rmmod 即可挂载和卸载驱动,顺序自己决定。测试成功后,再搞到内核中静态编译。...有两种方式: 1、找到编译后的 Linux 内核源码,根目录下面有个 System.map 文件,这里记载了 Linux 内核所做的所有的事情,是按顺序记载的(也有可能在其他输出目录)。
一、前言 块设备驱动块是Linux下3大设备驱动框架之一,块设备主要是针对存储类型的设备设计的驱动,配合文件系统完成数据存储。...所以大致总结下:块设备驱动的目的是给Linux文件系统提供底层接口。 二、编写块设备驱动的思路 既然学到了驱动开发,了解到块设备开发。...在Linux下完成块设备驱动编写,主要是要完成来至文件系统的存储请求,文件系统让你把数据存到那个扇区,你驱动就去存,文件系统让你从那个扇区读取输出来,驱动就去读取。...没有依赖于硬件,所以:可以在任何Linux下编译安装测试,完成块设备驱动的了解学习。...#include linux/module.h> #include linux/blkdev.h> #include linux/hdreg.h> #include linux/version.h
展锐UDX710:LAN7800 PHY驱动调试 1. 前期准备 1.1 调试环境 1.2 预置条件 1.3 硬件连接 2....驱动适配 2.1 开启内核驱动支持 2.2 驱动加载验证 2.3 配置网络通路 3. 小结 1....前期准备 1.1 调试环境 内核:Linux 4.14.98 Modem:展锐UDX710 驱动:LAN78XX PHY驱动 USB PHY:LAN7800 1.2 预置条件 将展锐UDX710...Type A(USB3.0)配置为主模式,确保可以识别从设备LAN7800 PHY: 1.3 硬件连接 将LAN7800 USB口连接到UDX710的Type A(USB3.0)口,然后将RJ45...驱动适配 2.1 开启内核驱动支持 在内核中按照如下打开编译选项开启内核LAN78XX驱动支持,在kernel目录下执行make menuconfg,然后依次选中Devices_Drivers:
因为在Linux当中,对于I2C、SPI、USB这些常见类型的物理总线来说,Linux内核会自动创建与之相应的驱动总线,因此I2C设备、SPI设备、 USB设备自然是注册挂载在相应的总线上。...为了使这部分设备的驱动开发也能够遵循设备驱动模型,Linux内核引入了一种虚拟的总线——平台总线(platform bus)。...今天的重点就是和大家分享一下我是如何分析在平台总线下led的设备文件和驱动文件是怎么写的。 先来看设备文件。...接下来看一下驱动文件是如何写的: #include linux/init.h> #include linux/module.h> #include linux/platform_device.h...这样,我们就把驱动都分析完了,最后编写Makefile来编译程序,生产.ko文件,安装模块,就可以在/dev目录下看到注册的led设备文件,往设备文件里进行读写就可以操控硬件了。
/** * uart分析 * * 其实串口分析就两个重要的文件: S3c2440.c Samsung.c * * **/ /*1...serial_getsource, .set_clksrc = s3c2440_serial_setsource, .reset_port = s3c2440_serial_resetport, }; /*platform 驱动定义.../匹配后设备调用 .remove = __devexit_p(s3c24xx_serial_remove), .driver = { .name = "s3c2440-uart", //驱动的名字....owner = THIS_MODULE, }, }; /*分析uart_register_driver函数*/ /* 这个函数的主要作用是初始化tty_driver结构体。...uart_tasklet_action, (unsigned long)state); } retval = tty_register_driver(normal); } /* 当设备与驱动匹配后
例子:USB鼠标滑动一下立刻产生数据,但是它没有能力通知PC机来读数据,只能被动地等得PC机来读。...一个传输方向下 传输方向都是基于USB主机的立场说的, 比如:鼠标的数据是从鼠标传到PC机, 对应的端点称为"中断输入端点" 其中端点0是设备的默认控制端点, 既能输出也能输入,用于USB设备的识别过程 同样linux...} 3.继续搜索kick_khubd,发现被hub_irq()函数中调用 显然,就是当USB设备插入后,D+或D-就会被拉高,然后USB主机控制器就会产生一个hub_irq中断. 4.接下来我们直接分析...其中usb_bus_type是一个全局变量, 它和我们之前学的platform平台总线相似,属于USB总线, 是Linux中bus的一种....id_table来匹配该USB设备 USB总线驱动程序大概流程就此结束,未完待续——分析完后下节开始写USB驱动
视频观看 百问网驱动大全 第五章GIC驱动程序分析 资料下载 视频观看 1....GIC中断处理流程源码分析 参考资料: linux kernel的中断子系统之(七):GIC代码分析 Linux 4.9.88内核源码 Linux-4.9.88\drivers\irqchip...\irq-gic.c Linux-4.9.88/arch/arm/boot/dts/imx6ull.dtsi Linux 5.4内核源码 Linux-5.4\drivers\irqchip\irq-gic.c...按下KEY时: 程序从GIC中读取寄存器知道发生了33号中断,通过GIC irq_domain可以知道virq为16 调用irq_desc[16]中的handleB函数 handleB...GIC中断处理流程源码分析 看视频。
, //2 phy设备注册成功 PHY_PENDING, //3 phy芯片挂起 PHY_UP, //4 开启网卡,ifconfig eth0 up PHY_AN, //5 网卡自动协商 PHY_RUNNING...up)会执行到这个状态,即phy恢复 }; 二、emac接口驱动下的phy设备注册 nuc970_ether_probe //探测函数驱动 nuc970_mii_setup mdiobus_register...,同时完成了emac接口下的phy设备驱动注册,接下来将分析如何使用该phy设备驱动。...总结:上面在执行 ifconfig eth0 up 后,已将phydev->state = PHY_UP 四、phy状态机phy_state_machine执行状态分析 phy_state_machine...= phydev->irq) err = phy_config_interrupt(phydev, PHY_INTERRUPT_ENABLED); break; emac接口驱动配置phy int genphy_config_aneg
资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...视频观看 百问网驱动大全 结合APP分析LCD驱动程序 本节视频对应源码在GIT仓库中,位置如下(这2个文件是完全一样的): doc_and_source_for_drivers\STM32MP157...get_fb_info(fbidx); if (info->fbops->fb_open) { res = info->fbops->fb_open(info,1); // 硬件相关的驱动...file_fb_info(file); do_fb_ioctl(info, cmd, arg); var = info->var; // 硬件相关的驱动设置的...file_fb_info(file); do_fb_ioctl(info, cmd, arg); fix = info->fix; // 硬件相关的驱动设置的
资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...视频观看 百问网驱动大全 通用驱动i2c-dev分析 参考资料: Linux驱动程序: drivers/i2c/i2c-dev.c I2C-Tools-4.2: https://mirrors.edge.kernel.org...回顾字符设备驱动程序 怎么编写字符设备驱动程序?...有入口自然就有出口 在出口函数unregister_chrdev 辅助函数(帮助系统自动创建设备节点) class_create device_create 2. i2c-dev.c注册过程分析...2.1 register_chrdev的内部实现 2.2 i2c-dev驱动的注册过程 3. file_operations函数分析 i2c-dev.c的核心: static const struct
学了这么多驱动,不难推出DMA的编写套路: 1)注册DMA中断,分配缓冲区 2)注册字符设备,并提供文件操作集合fops -> 2.1)file_operations里设置DMA硬件相关操作,...来启动DMA 由于我们是用字符设备的测试方法测试的,而本例子只是用两个地址之间的拷贝来演示DMA的作用,所以采用字符设备方式编写 1.驱动编写之前,先来讲如何分配释放缓冲区、DMA相关寄存器介绍、使用...DMA3中断服务函数 //NULL:中断产生类型, 不需要,所以填NULL //1:表示中断时,传入中断函数的参数,本节不需要所以填1,切记不能填0,否则注册失败 2.接下来,我们便来写一个DMA的字符设备驱动...: #include linux/module.h> #include linux/kernel.h> #include linux/fs.h> #include linux/init.h> #...include linux/delay.h> #include linux/irq.h> #include #include <asm/arch/regs-gpio.h
linux中的rtc驱动位于drivers/rtc下,里面包含了许多开发平台的RTC驱动,我们这里是以S3C24xx为主,所以它的RTC驱动为rtc-s3c.c 1.进入....这里注册了一个“s3c2410-rtc”名称的平台设备驱动 而“s3c2410-rtc”的平台设备,在....rtc_dev_add_device(rtc); //2.在/dev下创建rtc相关文件,将cdev添加到系统中 rtc_sysfs_add_device(rtc...); //在/sysfs下创建rtc相关文件 rtc_proc_add_device(rtc); //在/proc下创建rtc相关文件...5.1接下来,便开始设置RTC时间 在linux里有两个时钟: 硬件时钟(2440里寄存器的时钟)、系统时钟(内核中的时钟) 所以有两个不同的命令: date命令、hwclock命令 5.2 date命令使用
在之前的文章Linux MTD子系统(一)中有提到过mtd块设备,mtd块设备是在MTD设备之上模拟的块设备。...本文基于linux-5.10.181内核代码分析。...mtd设备节点 当我们查看/dev/mtd*时,通常情况下,我们可以看下类似如下的设备: root@OpenWrt:~# ls /dev/mtd* -alh crw------- 1 root...下面一步步剖析上图的过程: 1> register_mtd_blktrans 首先mtdblock驱动的入口函数调用了register_mtd_blktrans(&mtdblock_tr) register_mtd_blktrans...blksize); //指示块设备为非旋转介质,即不是机械硬盘,不需要IO调度 blk_queue_flag_set(QUEUE_FLAG_NONROT, new->rq); //允许块设备驱动程序根据需要添加随机数种子
领取专属 10元无门槛券
手把手带您无忧上云