Linux 驱动开发
ch3rry
每天早上醒来,看见你和阳光都在,这就是我想要的未来。
展开
-
uevent原理分析
简介: 本文主要介绍uevent机制是什么,并通过代码分析使用uevent机制生成设备节点的过程。而本文将分为两部分,第一部分我们介绍一些预备知识和uevent的原理,而第二部分——通过代码介绍使用uevent机制创建设备节点。Linux内核:linux-2.6.22.6所用开发板:JZ2440 V3(S3C2440A)声明: 本文主要是看完韦东山老师视频并结合...转载 2019-11-01 11:45:00 · 464 阅读 · 0 评论 -
声卡驱动
s3c2410-uda1341.c#include <linux/module.h>#include <linux/device.h>#include <linux/init.h>#include <linux/types.h>#include <linux/fs.h>#include <linux/m...原创 2019-08-23 12:35:05 · 401 阅读 · 0 评论 -
DMA
DMA.c#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/irq.h>#includ...原创 2019-08-22 23:02:02 · 138 阅读 · 0 评论 -
Linux设备驱动开发---input子系统
基于linux-2.6.22.6内核,ARM9 S3C2440开发板源码分析:drivers/input/input.c: input_init > err = register_chrdev(INPUT_MAJOR, "input", &input_fops); static const struct file_operations input_fop...原创 2019-07-27 21:50:03 · 121 阅读 · 0 评论 -
如何写bootloader
分析图:最简单的bootloader的编写步骤:1. 初始化硬件:关看门狗、设置时钟、设置SDRAM、初始化NAND FLASH2. 如果bootloader比较大,要把它重定位到SDRAM3. 把内核从NAND FLASH读到SDRAM4. 设置"要传给内核的参数"5. 跳转执行内核改进:1. 提高CPU频率, 200MHZ ==> 400MHZ2. 启动ICAC...原创 2019-07-27 21:45:13 · 384 阅读 · 0 评论 -
怎么看原理图
微机原理 :侧重于计算机结构数字电子技术基础 :侧重于门电路1.GPIO和门电路 :general peripheral input/ouput1.1 输入、输出引脚、上拉电阻、三极管1.2 与门、或门、非门1.3 中断2.协议类2.1 UART2.2 I2C2.3 SPI2.4 NAND : K9F2G08U0M2.5 LCDa. 看原理图:24...原创 2019-07-27 21:41:51 · 244 阅读 · 0 评论 -
摄像头驱动程序
摄像头驱动程序必需的11个ioctl: // 表示它是一个摄像头设备 .vidioc_querycap = vidioc_querycap, /* 用于列举、获得、测试、设置摄像头的数据的格式 */ .vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap, .vidioc_g_fmt_vid_cap...原创 2019-09-08 22:04:19 · 606 阅读 · 0 评论 -
ubuntu下安装摄像头应用程序xawtv
准备工作:安装xawtv应用程序方法一、源码xawtv-3.95.tar.gzxawtv官网下载: http://www.kraxel.org/releases/xawtv/ 下载后上传到Ubuntu上解压安装。./configure && make && make install 这个方法太麻烦,不提倡。方法二、su...转载 2019-09-08 21:58:55 · 974 阅读 · 0 评论 -
块设备驱动程序
框架:app: open,read,write "1.txt"--------------------------------------------- 文件的读写文件系统: vfat, ext2, ext3, yaffs2, jffs2 (把文件的读写转换为扇区的读写)-----------------ll_rw_block----------------- 扇...原创 2019-08-26 12:16:39 · 187 阅读 · 0 评论 -
input子系统
drivers/input/input.c: input_init > err = register_chrdev(INPUT_MAJOR, "input", &input_fops); static const struct file_operations input_fops = { .owner = THIS_MODULE, .open = i...原创 2019-08-26 12:15:42 · 152 阅读 · 0 评论 -
驱动程序的调试
驱动程序的调试一. 打印: prink, 自制proc文件UBOOT传入console=ttySAC0 console=tty11. 内核处理UBOOT传入的参数console_setup add_preferred_console // 我想用名为"ttySAC0"的控制台,先记录下来2. 硬件驱动的入口函数里: drivers/serial/s3c2410.c...原创 2019-08-26 12:14:54 · 432 阅读 · 0 评论 -
Linux Ethernet PHY 驱动
今年在FPGA上和IC那边一起验证了MAC/PHY, 基于linux 3.6.4, 这边小结一下代码.phy的初始化顺序第一步phy_initmdio_bus_initbus_register(&mdio_bus_type);//autoprobephy_driver_register(&genphy_driver);第二步, 具体的phy驱动的初...转载 2019-10-18 15:17:18 · 1369 阅读 · 0 评论 -
Linux pci/pcie驱动
/driver/pci/probe.c/arch/powerpc/kernel/pci_64.c在pci驱动中pci调用pci_scan_device扫描每个设备的每个功能,当发现该功能存在时(通过读设备的vendor及product ID确定),就为该设备功能建立一个完整的pci_dev(通过pci_setup_device 完成),并将该设备功能加入到全局链表及总线链表中,当加载设备驱...转载 2019-10-18 14:46:53 · 2889 阅读 · 0 评论 -
Linux SPI总线和设备驱动架构之一:系统概述
SPI是"Serial Peripheral Interface" 的缩写,是一种四线制的同步串行通信接口,用来连接微控制器、传感器、存储设备,SPI设备分为主设备和从设备两种,用于通信和控制的四根线分别是:CS 片选信号SCK 时钟信号MISO 主设备的数据输入、从设备的数据输出脚MOSI 主设备的数据输出、从设备的数据输入脚因为在大多数情况下,CPU或SOC一侧通常都是...转载 2019-07-08 12:43:29 · 152 阅读 · 0 评论 -
Linux SPI总线和设备驱动架构之二:SPI通用接口层
通过上一篇文章的介绍,我们知道,SPI通用接口层用于把具体SPI设备的协议驱动和SPI控制器驱动联接在一起,通用接口层除了为协议驱动和控制器驱动提供一系列的标准接口API,同时还为这些接口API定义了相应的数据结构,这些数据结构一部分是SPI设备、SPI协议驱动和SPI控制器的数据抽象,一部分是为了协助数据传输而定义的数据结构。另外,通用接口层还负责SPI系统与Linux设备模型相关的初始化工作。...转载 2019-07-08 17:33:26 · 273 阅读 · 0 评论 -
Linux SPI总线和设备驱动架构之三:SPI控制器驱动
通过第一篇文章,我们已经知道,整个SPI驱动架构可以分为协议驱动、通用接口层和控制器驱动三大部分。其中,控制器驱动负责最底层的数据收发工作,为了完成数据的收发工作,控制器驱动需要完成以下这些功能:1. 申请必要的硬件资源,例如中断,DMA通道,DMA内存缓冲区等等;2. 配置SPI控制器的工作模式和参数,使之可以和相应的设备进行正确的数据交换工作;3. 向通用接口层提...转载 2019-07-08 17:38:46 · 235 阅读 · 0 评论 -
Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
我们知道,SPI数据传输可以有两种方式:同步方式和异步方式。所谓同步方式是指数据传输的发起者必须等待本次传输的结束,期间不能做其它事情,用代码来解释就是,调用传输的函数后,直到数据传输完成,函数才会返回。而异步方式则正好相反,数据传输的发起者无需等待传输的结束,数据传输期间还可以做其它事情,用代码来解释就是,调用传输的函数后,函数会立刻返回而不用等待数据传输完成,我们只需设置一个回调函数,传输完成...转载 2019-07-08 17:54:16 · 265 阅读 · 1 评论 -
SPI驱动框架
1、枚举过程drivers/spi/spi.c: spi_register_board_info /* 对于每一个spi_master,调用spi_match_master_to_boardinfo */ list_for_each_entry(master, &spi_master_list, list) spi_ma...原创 2019-07-09 11:36:03 · 467 阅读 · 0 评论 -
linux内核SPI总线驱动分析
下面有两个大的模块:一个是SPI总线驱动的分析 (研究了具体实现的过程)另一个是SPI总线驱动的编写(不用研究具体的实现过程)SPI总线驱动分析1SPI概述 SPI是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口,是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用...原创 2019-07-09 11:42:20 · 353 阅读 · 0 评论 -
linux内核SPI总线驱动编写
SPI驱动编写简而言之,SPI驱动的编写分为:1.spi_device就构建并注册在板文件中添加spi_board_info,并在板文件的init函数中调用spi_register_board_info(s3c_spi_devs,ARRAY_SIZE(s3c_spi_devs));spi_register_board_info(s3c_spi_devs,ARRAY_SIZ...原创 2019-07-09 12:38:55 · 302 阅读 · 0 评论 -
Linux 网络设备驱动开发(一) —— linux内核网络分层结构
PrefaceLinux内核对网络驱动程序使用统一的接口,并且对于网络设备采用面向对象的思想设计。Linux内核采用分层结构处理网络数据包。分层结构与网络协议的结构匹配,既能简化数据包处理流程,又便于扩展和维护。一、内核网络结构在Linux内核中,对网络部分按照网络协议层、网络设备层、设备驱动功能层和网络媒介层的分层体系设计。网络驱动功能层主要通过网络驱...转载 2019-07-22 22:23:23 · 183 阅读 · 0 评论 -
Linux 网络设备驱动开发(二) —— Linux 网络栈剖析
一、协议简介虽然对于网络的正式介绍一般都参考了 OSI(Open Systems Interconnection)模型,但是本文对 Linux 中基本网络栈的介绍分为四层的 Internet 模型(如图 1 所示)。图 1. 网络栈的 Internet 模型这个栈的最底部是链路层。链路层是指提供对物理层访问的设备驱动程序,这可以是各种介质,例如串口链路或以太网设备。链...转载 2019-07-22 22:24:23 · 157 阅读 · 0 评论 -
Linux 网络设备驱动开发(三) —— 网络设备驱动基本原理和框架
一、协议栈层次对比二、Linux网络子系统Linux网络子系统的顶部是系统调用接口层。它为用户空间提供的应用程序提供了一种访问内核网络子系统的方法(socket)。位于其下面是一个协议无关层,它提供一种通用的方法来使用传输层协议。然后是具体协议的实现,在Linux中包括内核的协议TCP,UDP,当然还有IP。然后是设备无关层,它提供了协议与设备驱动通信的通用接口,最下面是设备的...转载 2019-07-22 22:29:26 · 373 阅读 · 0 评论 -
自旋锁spin_lock和raw_spin_lock
1. 临界区(Critical Section)我们知道,临界区是指某个代码区间,在该区间中需要访问某些共享的数据对象,又或者是总线,硬件寄存器等,通常这段代码区间的范围要控制在尽可能小的范围内。临界区内需要对这些数据对象和硬件对象的访问进行保护,保证在退出临界区前不会被临界区外的代码对这些对象进行修改。出现以下几种情形时,我们需要使用临界区进行保护:(1) 在可以抢占(preempt...原创 2019-07-08 12:26:07 · 2073 阅读 · 0 评论