linux底层驱动程序开发
tupelo-shen
一只单纯的程序喵
展开
-
2020-03-18-Linux内核17-硬件如何处理中断和异常
layout title subtitle date author header-img catalog tags post Linux内核17-硬件如何处理中断和异常 基于X86架构的中断和异常的硬件工作原理 2020-03-18 Tupelo Shen img/post-bg-unix-linux.j...原创 2020-04-15 16:19:02 · 547 阅读 · 0 评论 -
Linux设备驱动开发0-环境搭建
原文地址:Linux设备驱动开发0-环境搭建1 环境介绍主机环境:Win10 64 + VirtualBox 6.0 + ubuntu16.04(32位)-4.10.0-28-genericu-boot 版本:u-boot-2015-04Linux kernel版本:linux-4.4.203busybox版本:busybox-1.31.1.tar.bz2交叉编译工具链...原创 2020-04-07 00:03:15 · 765 阅读 · 0 评论 -
uboot启动流程详细分析
0 目录1 简介1.1 uboot是什么?1.2 存储器2 uboot链接文件2.1 u-boot.lds文件分析2.2 System.map文件2.3 链接文件语法3 uboot启动流程第1阶段3.1 start.S文件分析3.2 lowlevel_init.S文件分析4 uboot启动流程第2阶段4.1 初始化4.2 加载内核A 参考资料...原创 2019-10-29 14:06:38 · 12878 阅读 · 4 评论 -
编译u-boot-mini2440
编译适用于mini2440板子的uboot引导程序原创 2019-10-29 14:04:47 · 533 阅读 · 0 评论 -
7.4内核定时器
7.4内核定时器 7.4.1 定时器API7.4.2 内核定时器的实现7.4.3 总结-定时器的用法7.4 内核定时器内核的调度肯定需要定时器。 比如, 硬件无法提供中断响应时, 就可以使用内核定时器周期性的轮询设备的状态。 再比如, 关闭软盘电机或某一个冗长的 close 操作。 在这样的情况下, 延迟返回直到调用 close, 会造成资源的浪费。 最后, 内核本身也有...原创 2018-08-15 11:34:09 · 756 阅读 · 0 评论 -
6.5定位设备
6.5 定位设备 6.5.1 从驱动程序的角度考虑6.5 定位设备最后, 我们讨论一下 llseek 方法, 对于某些设备来说, 该方法非常重要, 其实现非常简单。6.5.1 llseek实现llseek 方法实现了 lseek 和 llseek 系统调用。 llseek 方法在设备的操作中缺失, 内核中的默认实现是通过修改 filp->f_pos 来定位当前的读写位置...原创 2018-08-08 11:34:29 · 343 阅读 · 0 评论 -
7.5Tasklets机制
7.5 Tasklet7.5 Tasklet关于时间,内核另外一个有力工具就是tasklet机制。它主要用于中断管理。Tasklet在某些方面与内核定时器类似。它们总是在中断时运行,总是运行在调度它们的CPU上,且能够接受unsigned long类型的参数。又不像内核定时器,不能要求在特定时间执行该功能。通过调度tasklet,你可以让内核选择在稍后的时间执行它。这种行为...原创 2018-08-15 21:16:14 · 244 阅读 · 0 评论 -
4.3查询调试
4.3 查询调试 4.3.1 /proc 4.3.1.1 /proc实现文件4.3 查询调试驱动程序开发者可以使用一些查询技术来调试程序,比如说:/proc创建文件;使用驱动程序的ioctl方法;sysfs导出属性;使用sysfs需要有驱动程序模型的背景知识,所以这将在第14章讨论。4.3.1 /proc /proc文件系统是一个特殊的,由软...原创 2018-08-21 10:10:08 · 192 阅读 · 0 评论 -
7.6工作队列
7.6 工作队列 7.6.1 共享队列7.6 工作队列从表面上看,工作队列类似于tasklet;它们允许内核代码请求在将来的某个时间调用一个函数。但是,两者还是存在着显著的差异,如下所示:tasklet运行在软件中断上下文中,所以其代码必须是原子操作。相反,工作队列运行在内核进程上下文中;结果就是它们具有更大的灵活性。特别是,工作队列可以休眠。tasklet始终运行在...原创 2018-08-21 16:25:26 · 302 阅读 · 0 评论 -
7.7测试代码
下面是相关的测试代码。在Linux kernel 3.3.7上编译,在mini2440板子上运行正常。/* * jiq.c -- 模块: just-in-queue */#include <linux/module.h>#include <linux/moduleparam.h>#include <linux/init.h>#include ...原创 2018-08-21 16:29:41 · 220 阅读 · 0 评论 -
Ubuntu-16.04编译Qemu
Ubuntu 16.04 编译 QEMU正常情况下,多数Linux版本已经提供了可供安装的QEMU(KVM)二进制安装包。但是,有时候因为需要,还需要自己编译QEMU。在编译之前,有一些依赖软件包需要安装。默认情况下, 编译器和编译工具(gcc,make…)已经有了。依赖条件:必要安装包:git-&gt;用于版本管理(在这里可以不要)glib2.0-dev,自动包含 zlib1g-...原创 2018-09-29 15:28:13 · 4740 阅读 · 1 评论 -
Linux设备模型-5-kobj_attribute练习
在上一篇文章中,我们分析了怎样创建自定义对象,对象类型及自定义对象的属性等。下面就是其实现的全部代码:#include &amp;amp;lt;linux/device.h&amp;amp;gt; /* 包含内核对象模型的数据结构的定义及辅助函数 */#include &amp;amp;lt;linux/module.h&amp;amp;gt; #include &amp;amp;lt;lin原创 2018-11-13 20:41:35 · 994 阅读 · 0 评论 -
6.4异步通知
6.4 异步通知 6.4.1 从驱动程序的角度考虑6.4.2 测试scullpipe的异步通知机制6.4 异步通知尽管使用 select 方法, 结合阻塞和非阻塞操作, 对于设备的查询来说, 大部分时候足够了, 但是有些情况, 以我们目前所知的技术还不能有效处理。假设一个进行长计算循环的进程, 需要尽可能快地处理接收到的数据。 对于某种数据采集的外设, 一旦有数据就绪, 进程必...原创 2018-08-07 14:43:04 · 377 阅读 · 0 评论 -
6.3 poll和select
6.3 poll和select 6.3.1 与read和write的交互6.3.2 底层数据结构poll和select使用非阻塞IO的应用程序可以调用 poll, select, 和 epoll系统函数。 poll, select, 和 epoll本质上具有相同的功能:都是允许一个进程是否能通过非阻塞的方式读写一个或者多个文件。当给定的文件描述符集中没有文件可以读取,就会阻塞...翻译 2018-07-26 14:41:39 · 194 阅读 · 0 评论 -
编译LTIB遇到的问题解决办法
编译imx6对应源码包原创 2017-04-28 00:16:41 · 953 阅读 · 0 评论 -
linux-3.2.0内核-kconfig.txt翻译
2.3 文档内容这个文件包含了使用"make *config"的一些帮助。使用"make help"列出所有可能的配置目标板。xconfig ('qconf') 和 menuconfig ('mconf')程序里也包含内置的帮助文档。Be sure to checkit for navigation, search, and other general help text.2.翻译 2015-02-01 21:43:11 · 799 阅读 · 0 评论 -
linux-3.2.0内核-README翻译
Linux3.2.0 内核文件夹目录树.├── arch//该目录下主要├── block├── build├── COPYING├── CREDITS├── crypto├── Documentation├── drivers├── firmware├── fs├── HEAD├── hooks├── include├── info翻译 2015-01-23 20:11:44 · 975 阅读 · 0 评论 -
深入分析Tasklet机制
0、为什么引入tasklet机制?linux内核为什么还要引入tasklet机制呢?主要原因是软中断的pending标志位也就32位,一般情况是不随意增加软中断处理的。而且内核也没有提供通用的增加软中断的接口。其次内,软中断处理函数要求可重入,需要考虑到竞争条件比较多,要求比较高的编程技巧。所以内核提供了tasklet这样的一种通用的机制。其实每次写总结的文章,总是想把细节的东西说明白,所转载 2016-08-19 10:56:49 · 2614 阅读 · 0 评论 -
linux设备模型-9-device resource management
本文的链接地址:http://www.wowotech.net/device_model/device_resource_management.html1. 前言蜗蜗建议,每一个Linux驱动工程师,都能瞄一眼本文。之所以用“瞄”,因此它很简单,几乎不需要花费心思就能理解。之所有这建议,是因为它非常实用,可以解答一些困惑,可以使我们的代码变得简单、简洁。先看一个例子:转载 2016-08-31 14:52:30 · 382 阅读 · 0 评论 -
Linux设备模型-2-_Kobject
转载地址:http://www.wowotech.net/device_model/kobject.html,感谢蜗窝科技!1. 前言Kobject是Linux设备模型的基础,也是设备模型中最难理解的一部分(可参考Documentation/kobject.txt的表述)。因此有必要先把它分析清楚。2. 基本概念由“Linux设备模型(1)_基本概念”可知,Linux设备模转载 2016-08-31 20:27:46 · 526 阅读 · 0 评论 -
linux驱动头文件位置的说明
在不同版本的内核源码上,头文件所在的位置是不同的,比如说在#include#include同样是regs-gpio.h,是在比较低的版本(比如2.6.25)上位于arch/arm/include/asm中,而mach/regs-gpio.h则是位于arch/arm/mach-s3c2410/include/mach中,2.6.30版本的内核是这种结构,所以,要根据所采用的不转载 2016-09-01 09:05:04 · 2470 阅读 · 0 评论 -
Linux设备模型-3-_Kobject 实例
本文将从Linux内核的角度来看一看这个设备模型是如何构建的。本实例基本上没有什么实际意义,只是为了理解kobject这个内核对象。我的测试环境是openwrt15.05 trunk版,硬件平台是mtk7620a。文件名称:my_kobj.c#include /* include the structure of the device and class */#include原创 2016-09-02 12:10:24 · 1522 阅读 · 0 评论 -
Linux设备模型-4-kobj_attribute
在上文Linux设备模型-3-_Kobject 实例中,我们介绍到如何使用default attribute。Default attribute使用很方便,但不够灵活。比如上篇文章在Kobject一节中提到的那个例子,name和val这两个attribute使用同一个show/store函数来访问,如果attribute非常多,show/store函数里的分支就会很凌乱。为了解决这个问题,我们...原创 2016-09-02 16:12:15 · 4579 阅读 · 3 评论 -
深入linux内核架构-第二章-进程管理和调度
2.1什么是进程优先级以及抢占式多任务处理?这个用过任何操作系统的程序员都能够理解的。在这里就不多说了。那么linux进程管理和调度采用的什么模型呢?我们称这种方案为抢占式多任务处理(preemptive multitasking),各个进程都分配到一定的时间段执行。时间段到期后,内核会从进程收回控制权,让一个不同的进程执行,而不考虑前一进程所执行的上一个任务。被抢占进程的运行时环原创 2015-02-01 14:19:34 · 648 阅读 · 0 评论 -
详解Linux2.6内核中基于platform机制的驱动模型
【摘要】本文以Linux 2.6.25 内核为例,分析了基于platform总线的驱动模型。首先介绍了Platform总线的基本概念,接着介绍了platform device和platform driver的定义和加载过程,分析了其与基类device 和driver的派生关系及在此过程中面向对象的设计思想。最后以ARM S3C2440中I2C控制器为例介绍了基于platform总线的驱动开发流程。转载 2016-08-26 16:03:47 · 1124 阅读 · 0 评论 -
Linux-3.2.0内核—kbuild.txt翻译
2.2 kbuild.txt 文件内容2.2.1 输出文件(1)Modules.order这个文件记录了模块在 Makefiles 中的顺序。工具 modprobe 使用这些顺序来解决匹配多个模块之间的别名问题。(2)modules.builtin该文件列出了要编译到内核中的所有模块。工具 modprobe 使用该文件确保在载入模块的时候不会失败。2.2.2 环境变量翻译 2015-02-01 21:38:07 · 863 阅读 · 0 评论