【【linux】驱动-10-pinctrl子系统】教程文章相关的互联网学习教程文章

013_Linux驱动之_poll机制【图】

1. 功能:poll的机制与select相似,与select在本质上没有多大差别。管理多个描写叙述符也是进行轮询,依据描写叙述符的状态进行处理,可是poll没有最大文件描写叙述符数量的限制。2. 技术资料:poll多路复用 这篇文章写得很好3. 技术资料:poll机制分析4. 首先我们看应用程序中poll的调用原型 //文件 数量 时间以毫秒为单位static unsigned in...

linux驱动之模块化驱动Makefile【代码】

本文摘自http://blog.csdn.net/lufeiop02/article/details/6446343 Linux驱动一般以模块module的形式来加载,首先需要把驱动编译成模块的形式。简单的例子,#include <linux/init.h> #include <linux/kernel.h> #include <linux/module.h>staticint __init test_init(void) {printk("init module/n");return0; } staticvoid __exit test_exit(void) {printk("exit modules/n"); }module_init(test_init); module_exit(test_exit); ...

Linux驱动开发随笔【代码】

2021-08-19关键字: 1、内核空间与用户空间数据交换方式分两种情况:1、需要交换的数据量较大时;2、需要交换的数据量较小时; 第一种情况使用以下的函数:unsigned long copy_to_user(void __user* to, constvoid* from, unsigned long n); unsigned long copy_from_user(void* to, constvoid __user* from, unsigned long n);  返回值表示成功拷贝的字节数。 第二种情况则使用以下所示的宏定义:#include <asm/uaccess.h>put_u...

Linux驱动之异常处理体系结构简析【代码】【图】

异常的概念在单片机中也接触过,它的意思是让CPU可以暂停当前的事情,跳到异常处理程序去执行。以前写单片机裸机程序属于前后台程序,前台指的就是mian函数里的while(1)大循环,后台指的就是产生异常后的处理程序。ARM9有以下几种异常模式:ARM架构的异常向量的地址可以是0x00000000,也可以是0xffff0000,Linux使用地址0xffff0000。在初始化时先将中断向量表放到0xffff0000处,在init/main.c的main函数里的trap_init();函数中处理具...

TPLINK无线网卡linux驱动安装

tp-link TL-WN725N rtl8188euhttps://blog.csdn.net/longyinyushi/article/details/49853973自己搜一下驱动下载2. 解压源码:$tar xvzf rtl8188eu_USB_linux.tar.gz3. 编译安装$cd 8188eu_USB_linux/driver/rtl8188eu/$make$sudo make install4. 加载模块:$insmod 8188eu.ko5.可能需要重启:$sudo reboot原文:https://www.cnblogs.com/zkwarrior/p/14309135.html

用树莓派3B学习Linux驱动开发---内核编译【代码】【图】

环境介绍 最近在学习ARM Linux驱动开发,由于手头的ARM开发板版本太老,和教程里用的驱动内核相差太多,于式打算用树莓派3B来进行学习。 要用树莓派开发内核,就必须先让树莓派跑上自己编译的内核,否则insmod会执行失败(这个大家都懂吧) 教程介绍了如何交叉编译树莓派3B内核并运行ko模块,本教程不再使用虚拟机,而是使用win10的WSL搭配vscode进行开发 硬件:WIN10电脑 、树莓派 WSL安装 参考:win10安装WSL 注意:我安装的是Ubu...

linux驱动中ioctl使用【代码】

linux驱动中ioctl使用 在驱动头文件中定义幻数 /* 定义幻数 */ #define OLED_IOC_MAGIC 'k' /* 定义命令 */ #define OLED_IOC_OPEN _IO(OLED_IOC_MAGIC, 1) #define OLED_IOC_CLOSE _IO(OLED_IOC_MAGIC, 2) #define OLED_IOC_SET_POINT _IOR(OLED_IOC_MAGIC, 3, int) #define OLED_IOC_SET_STRING _IOW(OLED_IOC_MAGIC, 4, int) #define OLED_IOC_REFRESH _IO(OLED_IOC_MAGIC, 5) #define OLED_IOC_CLEAR _IO(OLED_IOC_MAGIC, 6...

Linux驱动之设备树【代码】【图】

14、设备树 1、什么是设备树? ? 设备树是一种描述硬件资源的数据结构, 它通过bootloader将硬件资源传给内核,使得内核和硬件资源描述相对独立。 2、设备树的由来 要想了解为什么会有设备树,设备树是怎么来的,我们就要先来回顾一下在没有设备树之前我们是怎么来写一个驱动程序的。以字符设备驱动代码框架为例,我们一起来回顾下。任何的设备驱动的编写,Linux已经为我们打好了框架,我们只要像做完形填空一样填写进去就可以了。...

linux驱动开发中copy_from_user open read write等常用函数总结【代码】

工科生一枚,热衷于底层技术开发,有强烈的好奇心,感兴趣内容包括单片机,嵌入式Linux,Uboot等,欢迎学习交流! 爱好跑步,打篮球,睡觉。 欢迎加我QQ1500836631(备注CSDN),一起学习交流问题,分享各种学习资料,电子书籍,学习视频等。open函数定义: int open( const char * pathname, int flags); int open( const char * pathname,int flags, mode_t mode);参数说明: ??pathname :文件的名称,可以包含(绝对和相对)路...

33.Linux驱动调试-根据oops的栈信息,确定函数调用过程【代码】【图】

上章链接入口: https://blog.csdn.net/qq_16933601/article/details/104327937 在上章里,我们分析了oops的PC值在哪个函数出错的本章便通过栈信息来分析函数调用过程1.上章的oops栈信息如下图所示: ??9fe0: 代表最初的栈顶SP寄存器位置 ??9e80:代表函数出错的SP寄存器位置2.我们先来分析上图的栈信息,又是怎样的过程呢?2.1内核主要是通过STMDB和LDMIA汇编命令来入栈和出栈(STMDB和LDMIA汇编命令参考: http://www.cnblogs.com/lifexy...

34.Linux驱动调试-根据系统时钟定位出错位置【代码】【图】

??当内核或驱动出现僵死bug,导致系统无法正常运行,怎么找到是哪个函数的位置导致的???答,通过内核的系统时钟,因为它是由定时器中断产生的,每隔一定时间便会触发一次,所以当CPU一直在某个进程中时,我们便在中断函数中打印该进程的信息1.先来回忆下在之前的内核中断运行过程,当内核中断产生时,会做以下几步:??1)pc-4(计算返回地址值),然后将各个寄存器值存到sp栈里 ??2)获取中断号,获取sp地址,然后调用asm_do_IRQ()1.1其中asm_do_IR...

32.Linux驱动调试-根据oops定位错误代码行【代码】【图】

1.当驱动有误时,比如,访问的内存地址是非法的,便会打印一大串的oops出来1.1以LED驱动为例??将open()函数里的ioremap()屏蔽掉,直接使用物理地址的GPIOF,如下图所示:1.2然后编译装载26th_segmentfault并执行测试程序后,内核便打印了oops出来,如下图所示:2.接下来,我们便来分析oops:Unable to handle kernel paging request at virtual address 56000050      //无法处理内核页面请求的虚拟地址56000050pgd = c3850000[56000050...

手把手教Linux驱动7-内核互斥锁【代码】

互斥体概述信号量是在并行处理环境中对多个处理器访问某个公共资源进行保护的机制,mutex用于互斥操作。 信号量的count初始化为1,down()/up()也可以实现类似mutex的作用。mutex的语义相对于信号量要简单轻便一些,在锁争用激烈的测试场景下,mutex比信号量执行速度更快,可扩展性更好,另外mutex数据结构的定义比信号量小。mutex的优点mutex和信号量相比要高效的多:mutex最先实现自旋等待机制mutex在睡眠之前尝试获取锁mutex实现...

手把手教Linux驱动9-等待队列waitq【代码】

在上一篇《手把手教Linux驱动8-Linux IO模型》我们已经了解了阻塞、非阻塞、同步和异步等相关概念,本文主要讲解如何通过等待队列实现对进程的阻塞。应用场景: 当进程要获取某些资源(例如从网卡读取数据)的时候,但资源并没有准备好(例如网卡还没接收到数据),这时候内核必须切换到其他进程运行,直到资源准备好再唤醒进程。 waitqueue (等待队列) 就是内核用于管理等待资源的进程,当某个进程获取的资源没有准备好...

手把手教Linux驱动8-Linux IO模型【代码】【图】

对于一个应用程序即一个操作系统进程来说,它既有内核空间(与其他进程共享),也有用户空间(进程私有),它们都是处于虚拟地址空间中。用户进程是无法访问内核空间的,它只能访问用户空间,通过用户空间去内核空间复制数据,然后进行处理。 什么是IO? IO模型中,先讨论下什么是IO? 在计算机系统中I/O就是输入(Input)和输出(Output)的意思,针对不同的操作对象,可以划分为磁盘I/O模型,网络I/O模型,内存映射I/O, Direct I/O、...

子系统 - 相关标签