linux设备驱动开发
慎独喜爱大保健
千里之行 始于足下
展开
-
linux下GT911触摸屏驱动优化记录
linux下GT911触摸屏驱动优化记录背景由于最近要做linux内核启动速度优化,所以就对着驱动一点一点优化,加上QT应用程序的初始化,总共的启动时间要做到4S以内。目前先调试GT911驱动程序。平台芯片:全志A33内核:linux-3.4优化驱动:GT911优化步骤原始驱动加载信息[ 47.327870] ***CTP***GTP driver init[ 47...原创 2020-01-20 14:43:18 · 3167 阅读 · 3 评论 -
基于A33下linux内核的GDB+KGDB内核调试环境搭建
基于A33的GDB+KGDB内核调试环境搭建平台芯片:全志A33系统:Tina3.5内核:linux3.4通信方式:串口修改内核配置文件在内核配置文件.config中,打开如下选项:配置项开关备注CONFIG_KGDBy加入KGDB支持CONFIG_KGDB_SERIAL_CONSOLEy使用KGDB通过串口与主机通信CONFIG_DE...原创 2020-01-16 09:16:59 · 1144 阅读 · 2 评论 -
linux设备驱动开发之设备驱动软件架构思想
linux驱动的软件架构原创 2019-06-08 23:57:26 · 1419 阅读 · 0 评论 -
Linux驱动开发之网络设备 & 读书笔记
网络设备的概念网络设备是完成用户数据包在网络媒介上发送和接收的设备,它将上层协议传递下来的数据包以特定的媒介访问控制方式进行发送,并将收到的数据包传递到上层协议。linux系统对网络设备驱动定义了4个层次,这4个层次分别为:网络协议接口层、网路设备接口层、提供实际功能的设备驱动功能层和网路设备媒介层。linux网络设备驱动结构...原创 2019-06-18 23:18:34 · 227 阅读 · 0 评论 -
linux驱动开发之块驱动
块驱动的IO操作特点块设备对于io请求有缓冲区。为什么会有缓冲区呢,因为块设备的最终都是要读写磁盘的扇区的,而读写操作,都是要移动磁臂这个物理操作,所以连续读写要比分散读写快的多。所以需要有缓冲区,然后在实际读写磁盘的时候可以优化自己的操作顺序,提高工作效率。linux的块设备子系统示意图如下:块设备驱动结构块设备结构体struct block_device_operation...原创 2019-06-14 23:58:28 · 3696 阅读 · 1 评论 -
linux驱动开发之spi-omap-100k.c源码分析
代码分析对于linux的驱动代码来说,我们要从后往前分析:/* * OMAP7xx SPI 100k controller driver * Author: Fabrice Crohas <fcrohas@gmail.com> * from original omap1_mcspi driver * * Copyright (C) 2005, 2006 Nokia Cor...原创 2019-06-12 23:16:25 · 307 阅读 · 0 评论 -
linux设备驱动开发之内存和IO
软重启// 定义一个函数指针typedef void (*IpFunction)();// 定义一个函数fun,其地址已经被指定IpFunction fun = (IpFunction)0xf000fff0;// 调用该函数,就是相当于把pc指针指到该处执行fun();在c语言编程中,我们通常使用上述方法跳转到指定的内存地址处执行代码。内存空间与IO空间内存空间是必须的...原创 2019-05-28 00:06:39 · 474 阅读 · 0 评论 -
linux设备驱动开发之设备驱动的中断和时钟
中断中断的来源一般可以分为两种,一种是外部中断,另一种是内部中断。对于arm处理器来说,内部的cpu产生的中断(溢出、除法错误等),外部中断就是cpu外部产生的中断。中断也可以分为向量中断和非向量中断。采用向量中断的CPU通常为不同的中断分配不同的中断号,当检测到某中断号的中断到来后,就自动跳转到与该中断号对应的地址执行。不同中断号的中断有不同的入口地址。非向量中断的多个中断共享一个入口地址...原创 2019-05-26 23:03:18 · 368 阅读 · 0 评论 -
linux设备驱动开发之设备驱动的异步通知与异步IO
异步通知概念当设备就绪的时候,主动通知应用程序。设备驱动支持异步通知代码index 452df8f..b0a1038 100644@@ -40,6 +40,7 @@ struct globalfifo_dev struct mutex mutex; wait_queue_head_t r_wait; wait_queue_head_t w_wait;+ ...原创 2019-05-26 09:59:20 · 150 阅读 · 0 评论 -
linux设备驱动开发之设备驱动的并发控制
并发和竞态什么是并发呢?并发(Concurrency)指的是多个执行单元同时、并行被执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问则很容易导致竞态(Race Conditions)并行与并发对于单核CPU来说,不存在并行的现象,是属于“宏观并行,微观串行”。那么对于单核CPU来说,这种并发为什么可以造成竞态呢?归根结底是,我们编写的代码块判断不...原创 2019-05-16 23:50:44 · 201 阅读 · 0 评论 -
Linux设备驱动开发之文件系统与设备开发
文件系统目录随着linux内核的发展,其文件系统也在不断更新。下面我们看下我电脑目前使用的linux文件系统中根目录下的文件排布:从上面我们可以看到当前的内核版本为4.15的该版本下的文件系统根目录下有很多文件。那么这些文件有哪些作用呢?我们来分析一下某些文件。bin文件夹这个文件夹包含基本命令,像ls、mkdir、cp等基本命令,都具有可执行属性。sbin文件夹这个文件夹包含了系统...原创 2019-05-07 23:34:51 · 272 阅读 · 0 评论 -
linux设备驱动开发之设备驱动的阻塞与非阻塞IO
阻塞操作与非阻塞操作阻塞操作是指在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作的条件后再进行操作。被挂起的进程进入睡眠状态,被从调度器的运行队列移走,直到等待的条件被满足。非阻塞操作的进程在不能进行设备操作时,并不挂起,它要么放弃,要么不停地查询,直至可以进行操作为止。等待队列队列头结构体// include/linux/wait.hstruct __wait_...原创 2019-05-18 22:08:31 · 302 阅读 · 0 评论 -
linux设备驱动开发之字符设备驱动结构
字符设备关键结构体struct cdev结构体// include/linux/cdev.hstruct cdev { struct kobject kobj; struct module *owner; // 驱动设备的操作接口结构体指针,例如读、写、控制等操作 const struct file_operations *ops; // 链表,用来记录多个cdev结构体对象的内存...原创 2019-05-13 23:24:33 · 197 阅读 · 0 评论 -
linux设备驱动开发之udev用户空间设备管理
什么是udev?这章我们来讨论一下udev这个玩意。它是什么呢?我们可以看下它的使用文档:NAME // udev-动态设备的管理功能 udev - Dynamic device managementDESCRIPTION // 下面是对它的描述:udev就是一个系统软件,用户态的。这个软件的功能是 // 捕捉设备事件、管理设备模式权限、还可以在/dev文件夹下创...原创 2019-05-08 23:12:32 · 937 阅读 · 0 评论 -
Linux设备驱动开发之内核模块基本概念和结构
内核模块由来试想一下为什么我们需要内核模块?在编译程序的时候直接将这些代码编译进入映像文件不就可以了吗。其实,这样说也没问题,但是有时候,这样全部放入一个内核映象中,会导致内核映象变得很大,还有不够灵活。因为从硬件层面来说有些模块是可以自由拆装的,所以在软件设计上如果也可以实现内核模块自由拆装的话,那么就很厉害了。随着时间的证明,linux内核模块就这样到来了:模块本身不被编译进入内核映象中,一...原创 2019-05-06 00:34:48 · 1709 阅读 · 1 评论 -
Linux设备驱动开发之硬件基础
中央处理器的体系结构中央处理器的体系结构可以分为两种:冯诺依曼结构、哈佛结构。采用冯诺依曼结构的中央处理器有intel公司的中央处理器、arm家族的arm7、mips公司的mips等处理器。采用哈佛结构的有avr、arm9、arm10、arm11、cortexA系列等。冯诺依曼结构冯诺依曼结构也称普林斯顿结构,是一种将存储指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存...原创 2019-04-28 22:20:18 · 1149 阅读 · 0 评论 -
Linux设备驱动开发之编写代码前准备
在git中添加pre-commit一般情况下我们编写linux内核的代码,我们要符合源码的编写规范。所以当我们使用git仓库来开发代码时,可以使用pre-commit这个脚本来检查我们每次提交的代码是否符合规范。linux内核的代码格式检查脚本的路径在linux内核源码目录下:scripts/checkpatch.pl那么我们现在可以在pre-commit中添加上面脚本的执行路径:#!/...原创 2019-05-03 09:46:06 · 343 阅读 · 0 评论 -
Linux设备驱动开发之linux内核的编译和加载
linux内核的编译对于设备驱动开发过程中,进行内核的编译是无法避免的。常用的编译步骤:1.打开linux内核ide配置make menuconfig这个步骤是为了打开内核的图形化配置,主要是配置一些驱动模块和其他辅助模块。选择是否加入这些模块进入到内核映象中。下图为打开的配置界面:这个配置界面里我们进行勾选模块的加入与否。等到我们配置完成后,选择保存退出。然后进行编译内核和编译模...原创 2019-05-02 18:17:26 · 545 阅读 · 0 评论