linux driver
文章平均质量分 73
springcrazy
这个作者很懒,什么都没留下…
展开
-
OPENWRT自动编译加载KO
OpenWrt能实现自动加载ko操作转载 2022-05-17 10:27:03 · 1270 阅读 · 0 评论 -
/proc/iomem 的信息如何获得
我们以高通IPQ4019芯片为例进行一下示例说明step1 在/proc/iomem中看一下iomem_resource的情况[root@Abloomy:~]# cat /proc/iomem060f8800-060f88ff : qscratch_base078af000-078af1ff : msm_serial_hsl //step1 78af000 是SOC上串口的物理地址。见下面的device信息078b5000-078b55ff : spi_qsd....8800..转载 2022-03-03 17:45:37 · 506 阅读 · 0 评论 -
Linux 保留内存memreserve & reserved-memory
1. 概述在linux启动过程中会打印出如下信息,这些信息为我们呈现出系统下的保留内存空间情况。Reserved memory: created DMA memory pool at 0x4c000000, size 8 MiBOF: reserved mem: initialized node vram@4c000000, compatible id shared-dma-pool本文只介绍基本的保留内存,不涉及CMA部分内容保留内存的初始化流程如下图所示:本文所说的保留内存转载 2022-03-15 14:06:29 · 8242 阅读 · 0 评论 -
Device Driver Design Patterns ——State Container & container_of()
=============================DeviceDriverDesignPatterns=============================Thisdocumentdescribesafewcommondesignpatternsfoundindevicedrivers.Itislikelythatsubsystemmaintainerswillaskdriverdeveloperstoconformto...转载 2021-04-15 11:20:01 · 126 阅读 · 0 评论 -
Platform Device Drivers
Platform Device DriversWe all know about Plug and Play devices. They are handled by the kernel as soon as they are plugged in. These may be USB or PCI Express, or any other auto-discovered devices. But, other device types also exist, which are not hot-pl转载 2021-04-13 23:29:56 · 559 阅读 · 0 评论 -
driver makefile kernel 版本号
在编写与Linux Kernel相关的代码时,移植是个大问题。一般来说,Linux的主版本号不一致,那就可以基本想着重写代码了。而次版本号的不一致,也会为代码的移植带来不小的麻烦。例如最近项目中用到的Netlink和Netfilter框架,在主版本号为3,次版本号不一致的情况下,编程接口会存在一些变动。如果想让同一份代码可以在不同的版本上编译运行,一般来说就需要在定义编译选项,然后根据编译选项,编译代码。在Makefile中加入如下版本判断。如果kernel比3.6要新,那就定义了宏..转载 2021-04-13 21:34:42 · 397 阅读 · 0 评论 -
linux driver kthread example
1. 创建kthread/***kthread_run-createandwakeathread.*@threadfn:thefunctiontorununtilsignal_pending(current).*@data:dataptrfor@threadfn.*@namefmt:printf-stylenameforthethread.**Description:Convenientwrapperfor...原创 2021-04-08 23:18:50 · 329 阅读 · 0 评论 -
linux driver completion
Documentation/scheduler/completion.txt================================================Completions-"waitforcompletion"barrierAPIs================================================Introduction:-------------Ifyouhaveoneormorethreadsthat...转载 2021-04-08 22:13:12 · 130 阅读 · 0 评论 -
Workqueues
WorkqueuesWorkqueues are used to schedule actions to run in process context. The base unit with which they work is called work. There are two types of work:structwork_struct- it schedules a task to run at a later time structdelayed_work- it schedu...转载 2021-04-02 14:57:57 · 111 阅读 · 0 评论 -
linux struct resource
I/O ports and I/O memory are two conceptual ways of supporting communication between device drivers and devices.So that the various drivers do not interfere with each other, it is essential to reserve ports and I/O memory ranges prior to use by a driver.转载 2021-03-30 10:59:56 · 341 阅读 · 0 评论 -
list_for_each_entry
offsetof宏定义:#define offsetof(TYPE, MEMBER) ((size_t)&((TYPE *)0)->MEMBER)该宏先将0转换成TYPE型指针,即形成一个指向地址0的TYPE指针,然后对TYPE中的MEMBER成员进行取址,而整个TYPE结构体的起始地址是0,那么这里取得的MEMBER的地址实际上等同于在TYPE中的相对偏移量。container_of定义:/*** container_of - cast a member.转载 2021-03-29 22:12:30 · 1033 阅读 · 0 评论 -
如何修改linux下的内存大小、起始地址
在实际的工作中,由于产品型号的不同,经常需要调整linux所管理的内存的大小,而内核在启动阶段,会两次去解析从uboot传递过来的关于内存的信息,具体如下:一、解析从uboot传递过来的tag(在parse_tags中处理)在uboot的do_bootm_linux()函数中,会创建一系列需要传递给内核的tag,所有的tag以链表形式链接到指定的物理内存中。setup_start_tag用来建立起始的tag,而起始的物理地址由bd->bi_boot_params指定:..转载 2020-10-19 17:17:16 · 2010 阅读 · 0 评论 -
udev 详解
如果你使用Linux比较长时间了,那你就知道,在对待设备文件这块,Linux改变了几次策略。在Linux早期,设备文件仅仅是是一些带有适当的属性集的普通文件,它由mknod命令创建,文件存放在/dev目录下。后来,采用了devfs,一个基于内核的动态设备文件系统,他首次出现在2.3.46 内核中。Mandrake,Gentoo等Linux分发版本采用了这种方式。devfs创建的设备文件是动态的。但是devfs有一些严重的限制,从 2.6.13版本后移走了。目前取代他的便是文本要提到的udev--一个用户空间转载 2020-09-11 16:57:38 · 3498 阅读 · 0 评论 -
linux driver debug 开关
打开dev_dbg开关,使其日志输出到控制台内核驱动中(大多数是子系统中)有大量使用dev_dbg打印日志信息,但是这些信息默认是不会输出到控制台的。调试过程中,我们如何打开DEBUG,获取这些dev_dbg日志呢?打开dev_dbg需要满足两个条件:开启DEBUG 调整printk日志级别下面介绍为什么需要这两个条件以及如何修改。开启DEBUG首先看下dev_dbg的定义:#if defined(CONFIG_DYNAMIC_DEBUG)#define dev_dbg(de转载 2020-09-10 14:02:20 · 848 阅读 · 0 评论 -
linux驱动IS_ERR_VALUE、IS_ERR
Pointers and Error ValuesMany internal kernel functions return a pointer value to the caller. Many of thosefunctions can also fail. In most cases, failure is indicated by returning a NULL pointervalue. This technique works, but it is unable to communica转载 2020-09-09 15:58:28 · 584 阅读 · 0 评论 -
____cacheline_aligned和____cacheline_aligned_in_smp
这两个都属于GCC扩展函数。____cacheline_alignedinstructs the compiler to instantiate a struct or variable at an address corresponding to the beginning of an L1 cache line, for the specific architecture, i.e., so that it is L1 cache-line aligned.____cacheline_al...转载 2020-09-08 13:34:53 · 731 阅读 · 0 评论 -
Linux在应用层读写寄存器的方法
可以通过操作/dev/mem设备文件,以及mmap函数,将寄存器的地址映射到用户空间,直接在应用层对寄存器进行操作,示例如下:#include<stdio.h> #include<stdlib.h> #include<time.h> #include<unistd.h> #include<fcntl.h> #include<unistd.h> #include<sys/mma...转载 2020-09-07 14:20:51 · 447 阅读 · 0 评论 -
sysfs详解
"sysfs is a ram-based filesystem initially based on ramfs. It provides a meansto export kernel data structures, their attributes, and the linkages between them touserspace.” --- documentation/filesystems/sysfs.txt可 以先把documentation/filesystems/sysfs.txt转载 2020-09-02 13:21:26 · 2753 阅读 · 0 评论 -
PCI总线及LSPCI命令详解分析
lspci命令详解参考https://blog.csdn.net/huangxuesi/article/details/69959679一、PCI简介 PCI是一种外设总线规范。我们先来看一下什么是总线:总线是一种传输信号的路径或信道。典型情况是,总线是连接于一个或多个导体的电气连线,总 线上连接的所有设备可在同一时间收到所有的传输内容。总线由电气接口和编程接口组成。本文讨论Linux下的设备驱动,所以,重点关注编程接口。 PCI是Peripheral Component In...转载 2020-09-01 20:45:39 · 6677 阅读 · 0 评论 -
linux驱动学习笔记(三.字符设备驱动)
一、背景 字符设备驱动是三种基本驱动类型(others:块设备,网络设备)之一,其基本特点是一个字节一个字节的以流式的形式进行设备节点的访问,如串口(/dev/ttys0)、字符终端(/dev/console)等等。 在之后的章节介绍字符设备中相互关联的重要的数据结构和一些重要的API接口。同时,总结出一个通用的基本字符设备驱动模板。二、设备号与分配三、重要数据结构1.file_operationsfile_operations 结构体定义如下。可以看到的是,...原创 2020-07-14 23:42:35 · 638 阅读 · 0 评论 -
linux驱动学习笔记(二. 模块)
一、什么是模块 在单进程或多线程应用程序中,我们通常会使用while loop 的方式从头到尾的去执行,在这个loop中,根据输入的外部事件状态进行不同响应,从而引入不同的if 分支跳转执行相应的业务逻辑。 而在一些基础SDK或framework中,为了抽象出公共逻辑和分离具体业务,大多会采用事件驱动的方式作为整个工程的核心框架,比如知名的MFC或者libuv都采用了这种思想。core 层会去处理复杂的核心事务逻辑以及底层的系统交互,而抛出一些接口或事件(event)供使用者调用和...原创 2020-07-07 23:15:40 · 355 阅读 · 0 评论 -
linux驱动学习笔记(一 题记)
因为工作的原因,不做linux驱动开发两年有余;同样的,因为工作的原因重新拾起。人生真的是在于折腾,来来回回,徒添学习成本,有时确实不得已为之。每一段经历随缘起,随缘沉寂。好在对技术还存在着激情,还有一股热情去学习与折腾。 为了逼迫自己去记录与总结,也为了以后再折腾回首的时候它仍然在,所以决定在重拾这门“手艺“的时候,多多地探索和深入,有一个清晰的脉络。 从今天开始,以手头的ldd3为教材,一点一滴记录,全当学习笔记。 在学习的过程中,希望自己能够做到:对...原创 2020-07-07 21:53:40 · 123 阅读 · 0 评论 -
动态DMA映射指南
上接:DMA映射Dynamic DMA mapping Guide一、前言这是一篇指导驱动工程师如何使用DMA API的文档,为了方便理解,文档中给出了伪代码的例程。另外一篇文档dma-api.txt给出了相关API的简明描述,有兴趣也可以看看那一篇,这两份文档在DMA API的描述方面是一致的。二、从CPU角度看到的地址和从DMA控制器看到的地址有什么不同?在DM...转载 2020-03-17 09:32:20 · 1105 阅读 · 0 评论 -
DMA映射
1.DMA通道DMA(Direct Memory Access)通道建立在设备和RAM之间,DMAC(DMA Controler)与设备I/O控制器相互作用共同实现数据传送。在PC中,DMA控制器位于主板上负责管理I/O总线的南桥上。典型的PC架构的数据通道示意图如下:DMAC(DMA Controller)一旦被CPU激活,就可以自行传送数据。在实现DMA传输时,由DMA...转载 2020-03-16 19:38:18 · 1021 阅读 · 0 评论