linux 驱动
文章平均质量分 63
wait*for*the*wind
这个作者很懒,什么都没留下…
展开
-
proc 查看中断信息
/proc/interrupts中显示的 依次是逻辑中断号、中断在各CPU上发生的次数,中断所属中断父中断、硬件中断号、中断触发方式(电平或边沿)、中断名称。原创 2022-03-01 09:39:33 · 533 阅读 · 0 评论 -
内核 自动生成头文件说明
我们在使用ok1028 编译内核时,生成的各种文件在OK1028-linux-fs/build/linux/kernel/arm64/LS/output/ 目录自动生成的头文件在OK1028-linux-fs/build/linux/kernel/arm64/LS/output/*/include/generated/ 目录asm-offsets.h autoconf.h bounds.h compile.h timeconst.h uapi utsrelease.h vdso-...原创 2021-04-08 14:05:53 · 809 阅读 · 0 评论 -
Linux系统调用之SYSCALL_DEFINE
相信熟悉系统调用的都知道,系统调用在内核中的入口都是sys_xxx,我也不例外,记得有一次,我抱着学习一下socket内核实现的心态想在内核中寻找sys_socket系统调用,却发现只能找到宏定义,怎么也找不到函数实现。后来经过查阅才知道,原来Linux的系统调用都改为SYSCALL_DEFINE定义的了。相信大家都很疑惑,原来的sys_xxx不是挺好的吗?为什么要定义成SYSCALL_DEFINE呢?我也很疑惑,所以我看了一下SYSCALL_DEFINE的定义,如下:#define SYSCAL..转载 2021-01-22 13:57:45 · 1403 阅读 · 1 评论 -
postcore_initcall(), arch_initcall(), subsys_initcall(), device_initcall() 调用顺序
在内核源代码中,platform 设备的初始化(注册)用arch_initcall()调用,它的initcall 的level为3;而驱动的注册用module_init()调用,即device_initcall(),它的initcall 的level为6。#define module_init(x)__initcall(x);#define __initcall(fn) device_initcall(fn)kernel 初始化时(kernel_init@init/main.c),按照内核...转载 2020-07-07 09:04:49 · 1278 阅读 · 0 评论 -
浅谈ARM下U-boot给Kernel传参数
我们可能都知道:U-boot会给Linux Kernel传递很多参数,如:串口波特率,RAM Size,videofb、MAC Address等,而且Linux kernel也会读取和处理这些参数。两者之间通过struct tag来传递参数。U-boot把要传递给kernel的东西保存在struct tag数据结构中,启动kernel时,把这个结构体的物理地址传给kernel;Linux kernel通过这个地址,用parse_tags分析出传递过来的参数。大家也知道在ARM架构上,u-boot转载 2020-07-07 09:01:01 · 675 阅读 · 0 评论 -
linux内核的生成过程, vmlinux调试分析
来源http://blog.chinaunix.net/uid-2630593-id-2530229.html1. 依据arch/arm/kernel/vmlinux.lds 生成linux内核源码根目录下的vmlinux,这个vmlinux属于未压缩,带调试信息、符号表的最初的内核,大小约23MB;arm-linux-gnu-ld -EL -p --no-undefined -X -o vmlinux -T arch/arm/kernel/vmlinux.lds arch/arm/...转载 2020-07-06 17:41:30 · 682 阅读 · 0 评论 -
MDIO Clause 45 和Clause 22
MDIO Clause 45 和Clause 22Contents MDIO History Theory of Operation Clause 22 Clause 45 References MDIO History Management Data Input/Output, or MDIO, is a 2-wire serial bus that is used to manage PHYs or physical layer de]ContentsMDIO History Theor.转载 2020-06-28 16:42:48 · 2626 阅读 · 0 评论 -
飞凌ok335xd 移植 AX88772B 驱动
基于飞凌的335xd 开发板做网口扩展,使用飞凌官方提供的内核Linux kernel 3.2.0 自带的AX88772B 驱动,通过make menuconfig Device Drivers ---> Network device support --->USB Network Adapters 选中网卡重新编译内核后可以使用,后来换了一个批次的AX88772B 网卡...原创 2020-04-10 14:20:58 · 621 阅读 · 0 评论 -
linux驱动开发:用户空间操作LCD显示简单的图片
上一章我们简单介绍了LCD的一些基本原理。当然更深奥的还有,比如gamma,dither,HUE,satuation.OSD等等.我们知道我们是用framebuffer来实现显示的.显存:framebuffer.由DDRAM中划去一部分内存供显存使用.从而操作lcd相当于操作显存.lcd控制器(s5pv210里面有lcd控制器)会周期的获取framebuffer中的数据。经...转载 2019-04-29 09:00:19 · 1208 阅读 · 0 评论 -
Linux中THIS_MODULE宏定义详解
from:https://www.cnblogs.com/sky-heaven/p/4554614.html一直都在耿耿于怀,这个THIS_MODULE到底是个什么玩意,linux内核中无处不在的东西。今天上网搜了一下,算是基本明白了。网上牛人写的已经比较详细,另外目前暂时没有时间往更深层次分析,所以直接贴过来得了。。。转帖网址:http://blog.csdn.net/a95...转载 2019-04-01 15:28:52 · 136 阅读 · 0 评论 -
通过KBUILD_MODNAME让dev_err等函数打印模块的name
在drivers/base/core.c 中有dev_err 等的实现2808 #define define_dev_printk_level(func, kern_level) \2809 void func(const struct device *dev, const char *fmt, ...) \2810 {...翻译 2019-04-01 18:01:36 · 1130 阅读 · 0 评论 -
linux THIS_MODULE 的含义
以下均针对于内核2.6.18在module.h 中 THIS_MODULE的定义如下:extern struct module __this_module;#define THIS_MODULE (&__this_module)即是保存了__this_module这个对象的地址,那这个__this_module在哪里定义呢?这就要从module的编译说起啦,如果编译过模块就...转载 2019-04-01 18:08:03 · 271 阅读 · 0 评论 -
linux显示git commit id,同时解决insmod模块时版本不一致导致无法加载问题
linux内核默认会包含git的commit ID。 而linux的内核在insmod模块时,会对模块和内核本身的版本做严格的校验。在开发产品时,改动内核后,由于commit ID变更,会导致linux内核变更,之前已编译发布的模块与升级后的linux版本不一致,必须重新编译,非常麻烦。为了解决这个问题,很多开发者通过配置make menuconfig,去掉CONFIG_LOCALVER...转载 2019-04-08 09:39:03 · 385 阅读 · 0 评论 -
linux中class_create和class_register说明
1 class结构体介绍 内核中定义了struct class结构体,顾名思义,一个struct class结构体类型变量对应一个类,内核同时提供了class_create(…)函数,可以用它来创建一个类,这个类存放于sysfs下面,一旦创建好了这个类,再调用device_create(…)函数来在/dev目录下创建相应的设备节点。这样,加载模块的时候,用户空间中的udev会自动响应de...转载 2019-03-29 10:57:52 · 330 阅读 · 0 评论 -
设备树节点概述
设备树的概述2.1、参考资料内核源码目录Documentation\devicetree设备树说明文档内核源码drivers/of/源码分析2.2、基本概念设备树是描述软/硬件信息的,包含节点和属性的一个树形结构。节点用以归类描述了一个硬件信息或是软件信息(好比文件系统的目录)。节点内描述了一个或多个属性,属性是键值对,描述具体的软/硬信息。简单形式如下:/{node{proper...转载 2019-03-13 13:53:38 · 2235 阅读 · 0 评论 -
Linux设备树语法详解
概念Linux内核从3.x开始引入设备树的概念,用于实现驱动代码与设备信息相分离。在设备树出现以前,所有关于设备的具体信息都要写在驱动里,一旦外围设备变化,驱动代码就要重写。引入了设备树之后,驱动代码只负责处理驱动的逻辑,而关于设备的具体信息存放到设备树文件中,这样,如果只是硬件接口信息的变化而没有驱动逻辑的变化,驱动开发者只需要修改设备树文件信息,不需要改写驱动代码。比如在ARM Linux...转载 2019-03-13 13:52:29 · 196 阅读 · 0 评论 -
Linux下DMA驱动框架分析
linux下的DMA驱动框架drivers\dma\dmaengine.c文件内,在linux下编写DMA的设备驱动一般步骤如下。 申请DMA通道 struct dma_chan *dma_request_channel(dma_cap_mask_t mask, dma_filter_fn filter_fn, void *filter_param);...转载 2019-03-16 15:32:33 · 797 阅读 · 0 评论 -
mmc读写中scatterlist用法
在阅读内核代码下mmc模块时,经常会遇到mmc读写函数,一般的方式为创建一个请求队列,将命令和数据buf添加到请求队列里,有mmc块设备驱动将请求队列发下去,但是将数据buf并不是直接带下去,而是创建了scatterlist结构体,用sg_init_one函数将buf与其绑定,而由这个结构体进行数据的下发或读取,如下所示,是读取MMC ext——csd的一个函数 static int...转载 2019-03-16 13:56:14 · 775 阅读 · 2 评论 -
scatterlist && DMA
DMA是一种无须CPU的参与就可以让外设与系统内存之间进行双向数据传输的硬件机制。使用DMA可以是系统CPU从实际的IO数据传输过程中摆脱出来,从而大大提供系统的吞吐率。DMA方式的数据传输由DMA控制器(DMAC)控制,在传输期间,CPU可以并发地执行其他任务,当DMA结束后,DMAC通过中断通知CPU数据传输已经结束,然后由CPU执行相应的中断服务程序进行后续处理。在内存中用于与外设交...转载 2019-03-16 13:55:08 · 148 阅读 · 0 评论 -
内核request_mem_region 和 ioremap的理解
几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种:(1)I/O映射方式(I/O-mapped)典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O地址空间"或者"I/O端口空间",CPU通过专门的I/O指令(如X86的IN和OUT指...转载 2019-03-15 18:09:49 · 616 阅读 · 0 评论 -
linux源码Makefile的详细分析
目录一、概述 1、本文的意义 2、Linux内核Makefile文件组成二、Linux内核Makefile的“make解析”过程 1 顶层Makefile阶段 1、从总目标uImage说起 2、vmlinux的生成 3、vmlinux-lds、vmlinux-init、vmlinux-main的生成 2 scripts/Makefil...转载 2019-03-06 09:31:39 · 348 阅读 · 0 评论 -
am3358——GPMC
转自: http://bbs.eeworld.com.cn/thread-333652-1-1.html 1. 参考资料 《AM335x ARM® Cortex™-A8 Microprocessors Technical Reference Manual》 《BeagleBone_revA3_SCH.pdf》 《BeagleBone_revA3_SRM.pdf》 《Beagl...转载 2019-02-20 14:41:37 · 912 阅读 · 0 评论 -
AM335X开发——设备树下增加SRAM、FPGA的GPMC设备节点
转自:https://blog.csdn.net/u012010054/article/details/81094704最近在做嵌入式的开发,调试的是一块搭载了AM3359、AM4379以及Cyclone10三个CPU的板子。三者的通讯主要是通过GPMC总线来实现,数据存储在一块大小为256KB的SRAM中,数据交互则通过Cyclone10这块FPGA上的双口RAM来实现。其中,AM3359这...转载 2019-02-20 14:38:46 · 580 阅读 · 0 评论 -
Linux 4.1最新内核usb与hid驱动分析记录
Linux hid驱动分析记录 1、hid_add_device实现,在hid/hid-core.c中,匹配特殊驱动相关部分分析该函数是在传输驱动probe中调用,例如usbhid中,也就是说usb总线匹配到usbhid传输驱动,然后它的probe函数被调用,就会调用hid core的hid_add_device 2691 if (hid_ignore_speci...转载 2019-02-25 13:48:43 · 896 阅读 · 0 评论 -
linux中的阻塞机制及等待队列
阻塞与非阻塞是设备访问的两种方式。驱动程序需要提供阻塞(等待队列,中断)和非阻塞方式(轮询,异步通知)访问设备。在写阻塞与非阻塞的驱动程序时,经常用到等待队列。一、阻塞与非阻塞阻塞调用是没有获得资源则挂起进程,被挂起的进程进入休眠状态,调用的函数只有在得到结果之后才返回,进程继续。非阻塞是不能进行设备操作时不挂起,或返回,或反复查询,直到可以进行操作为止,被调用的函数不会阻塞当前...转载 2019-04-29 09:06:04 · 389 阅读 · 0 评论 -
内核regmap机制
内核regmap机制2018年01月15日 14:11:49 板砖先生 阅读数:726版权声明:本文为博主原创文章,转载请附上链接。 https://blog.csdn.net/heabby2010/article/details/79063949内核版本:3.10.92内核3.1引入了一套新的API机制:regmap,主要为I2C,SPI,IRQ等操作提供统一接口,提高代码可重用...转载 2019-04-29 09:07:36 · 808 阅读 · 0 评论 -
Ubuntu下的指令汇总
网址http://wiki.ubuntu.org.cn/UbuntuSkills是ubuntu官网提供的材料,这个才是高大上的学习资料大全,遇到问题首先找这个。在终端下进入文件夹下 :例如进入workspace,wqt@wqt-OptiPlex-380:~$ cd workspace;在文件夹下新建一个文件夹:例如在workspace下建立Hello文件夹输入“mkdi转载 2015-05-04 15:34:23 · 319 阅读 · 0 评论 -
SD卡初始化以及命令详解
SD卡是嵌入式设备中很常用的一种存储设备,体积小,容量大,通讯简单,电路简单所以受到很多设备厂商的欢迎,主要用来记录设备运行过程中的各种信息,以及程序的各种配置信息,很是方便,有这样几点是需要知道的SD 卡是基于 flash 的存储卡。SD 卡和 MMC 卡的区别在于初始化过程不同。SD卡并不是我们通常意义上的手机扩展卡,那种卡叫做TF卡,但是通讯以及驱动模式是类似的.SD 卡的通信协...转载 2019-08-24 09:47:37 · 2110 阅读 · 0 评论 -
Linux驱动的等待队列、轮询及内核线程
1、简介根据不同需求,linux内核有不同I/O操作模型:非阻塞: 进程在不能进行设备操作时,并不挂起,它或者放弃,或者不停地查询,直到可以进行操作为止阻塞: 指在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作条件后再进行各项操作等待队列:用来阻塞或唤醒一个进程,实现阻塞I/O访问轮询操作:阻塞I/O访问的应用程序通常使用select()和poll()系统调用查询机制来...转载 2019-08-06 14:10:03 · 813 阅读 · 0 评论 -
dts中memreserve和reserved-memory的区别
Devicetree 提供了两种方式预留内存: reserved-memory和memreservememreserve示例/memreserve/ 0x40000000 0x01000000reserved-memory示例 reserved-memory { #address-cells = <1>;...转载 2019-07-18 14:19:04 · 2014 阅读 · 0 评论 -
linux内核驱动 之 module_init解析 (上)欢迎转载,相互学习,但请注明出处,非常感谢! http://blog.csdn.net/richard_liujh/article/deta
欢迎转载,相互学习,但请注明出处,非常感谢!http://blog.csdn.net/richard_liujh/article/details/45669207- 刘金辉写过linux驱动的程序猿都知道module_init() 这个函数。那么我们来了解一下module_init这个函数的具体功能和执行过程在kernel源码目录中找到include\linux\init.h文件...转载 2019-07-16 10:13:11 · 171 阅读 · 0 评论 -
Linux字符设备中的两个重要结构体(file、inode)
对于Linux系统中,一般字符设备和驱动之间的函数调用关系如下图所示上图描述了用户空间应用程序通过系统调用来调用程序的过程。一般而言在驱动程序的设计中,会关系 struct file 和 struct inode 这两个结构体。用户空间使用open()系统调用函数打开一个字符设备时(int fd = open("dev/demo", O_RDWR))大致有以下过程:在虚拟文件系...转载 2019-07-18 10:32:28 · 181 阅读 · 0 评论 -
linux id_table与of_match_table
I’m currently trying to understand how linux drivers work. As far as I know, A driver’s probe/init function is called when the kernel parses the corresponding .compatible string in the device tree. Ho...转载 2019-07-18 09:11:47 · 1297 阅读 · 0 评论 -
Linux中THIS_MODULE宏定义详解
from:https://www.cnblogs.com/sky-heaven/p/4554614.html一直都在耿耿于怀,这个THIS_MODULE到底是个什么玩意,linux内核中无处不在的东西。今天上网搜了一下,算是基本明白了。网上牛人写的已经比较详细,另外目前暂时没有时间往更深层次分析,所以直接贴过来得了。。。转帖网址:http://blog.csdn.net/a95...转载 2019-07-18 09:04:08 · 122 阅读 · 0 评论 -
内核中保留一个块内存
要想在内核中保留一个块内存,不被系统分配,而是只由自己使用,可以使用以下函数reserve_bootmem(addr,size,flag)这个函数的三个参数,addr是你要保留的地址,size就是要保留的大小,flag是标志位,要来确定是否检查你要保留的空间是否已经被保留了,它可以设置为两个值,BOOTMEM_DEFAULT和BOOTMEM_EXCLUSIVE,前者就是总是会返回0(也就是保留...转载 2019-06-17 17:11:22 · 162 阅读 · 0 评论 -
module_init解析
module_init这个函数的具体功能和执行过程在kernel源码目录中找到include\linux\init.h文件#definemodule_init(x)__initcall(x);有对module_init 的定义,我们发现module_init(x)是一个宏定义,那么_initcall(x)又是什么呢?[cpp]view plaincop...转载 2019-07-16 10:27:10 · 185 阅读 · 0 评论 -
linux 脚本编写
在进行linux测试时编写脚本是必不可少的,Shell脚本的名称可以随便定义,也不要什么后缀名,例如可以写abc,smartzip这类名称,运行时只要键入./smartzip就能运行脚本了。。每行命令开头处不用就空格也行。。 第1部分. Linux 脚本编写基础1.1 语法基本介绍1.1.1 开头程序必须以下面的行开始(必须方在文件的第一行):#!/bin/s转载 2015-04-22 16:18:08 · 361 阅读 · 0 评论 -
Git常用命令解说
1. Git概念 1.1. Git库中由三部分组成 Git 仓库就是那个.git 目录,其中存放的是我们所提交的文档索引内容,Git 可基于文档索引内容对其所管理的文档进行内容追踪,从而实现文档的版本控制。.git目录位于工作目录内。 1) 工作目录:用户本地的目录; 2) Index(索引):将工作目录下所有文件(包含子目录)生成快照,存放到一个临时的存储区域,Gi转载 2015-05-20 17:27:30 · 350 阅读 · 0 评论 -
U-BOOT环境变量实现 - BootLoader
http://deshunfan.blog.163.com/blog/static/3424410120096235180450/1.相关文件common/env_common.c供u-boot调用的通用函数接口,它们隐藏了env的不同实现方式,比如dataflash, epprom, flash等 common/env_dataflash.cenv 存储在dataflas转载 2015-06-01 16:24:35 · 495 阅读 · 0 评论 -
在VMWare上安装ubuntu及VMWare Tools
一、摘要该文主要介绍了如何在虚拟机上安装ubuntu,和安装VMWare Tools设置共享文件夹,最后对ubuntu做了简单的介绍。 二、实验平台1、VMware Workstation2、Ubuntu10.04 三、在VMWare上安装ubuntu参考百度文库:http://wenku.baidu.com/view/bdcb9eed102de2bd97058转载 2015-05-22 14:26:34 · 712 阅读 · 0 评论