linux内核开发
文章平均质量分 89
tupelo-shen
一只单纯的程序喵
展开
-
2020-03-30-Linux内核23-工作队列
layout title subtitle date author header-img catalog tags post Linux内核23-工作队列 Linux内核是如何实现和处理工作队列的 2020-03-30 Tupelo Shen img/post-bg-unix-linux.jpg tr...原创 2020-04-15 16:18:51 · 160 阅读 · 0 评论 -
2020-04-05-Linux内核27-优化和内存屏障
layout title subtitle date author header-img catalog tags post Linux内核27-优化和内存屏障 内核中优化和内存屏障的工作原理和使用场景 2020-04-05 Tupelo Shen img/post-bg-unix-linux.jpg ...原创 2020-04-15 16:18:50 · 220 阅读 · 0 评论 -
2020-02-06-Linux设备驱动开发0-环境搭建
layout title subtitle date author header-img catalog tags post Linux设备驱动开发0-环境搭建 学习Linux驱动开发,当然得有一个自己的练兵台了! 2020-02-06 Tupelo Shen img/post-bg-re-vs-ng2....原创 2020-04-15 16:18:59 · 598 阅读 · 0 评论 -
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 · 546 阅读 · 0 评论 -
2020-02-06-Linux设备驱动开发2-内核编译和加载
layout title subtitle date author header-img catalog tags post Linux设备驱动开发2-内核编译和加载 如何编译内核,并让其启动起来 2020-02-06 Tupelo Shen img/post-bg-re-vs-ng2.jpg tru...原创 2020-04-15 16:19:07 · 297 阅读 · 0 评论 -
Linux内核10-list_head和hlist_head的理解
原文地址:Linux内核10-list_head和hlist_head的理解1 概述在Linux内核中,对于数据的管理,提供了2种类型的双向链表:一种是使用list_head结构体构成的环形双向链表;另一种是使用hlist_head和hlist_node2个结构体构成的具有表头的链型双向链表。list_head的结构体如下所示:struct list_head { struct l...原创 2020-04-07 00:16:14 · 1872 阅读 · 0 评论 -
linux内核1-GNU汇编入门_X86-64&ARM
原文地址:linux内核1-GNU汇编入门_X86-64&ARM1 引言为了阅读Linux内核源代码,是需要一些汇编语言知识的。因为与架构相关的代码基本上都是用汇编语言编写的,所以掌握一些基本的汇编语言语法,能够更好地理解Linux内核源代码,甚至可以对各种架构的差异有一个更深入的理解。大部分人可能认为汇编语言晦涩难懂,阅读手册又冗长乏味。但是,经过本人的经验,可能常用的指令也就是3...原创 2020-04-07 00:11:00 · 830 阅读 · 0 评论 -
Linux内核0-使用QEMU和GDB调试Linux内核
原文地址:Linux内核0-使用QEMU和GDB调试Linux内核(文章大部分转载于:https://consen.github.io/2018/01/17/debug-linux-kernel-with-qemu-and-gdb/)排查Linux内核Bug,研究内核机制,除了查看资料阅读源码,还可通过调试器,动态分析内核执行流程。QEMU模拟器原生支持GDB调试器,这样可以很方便地使用GD...原创 2020-04-07 00:08:58 · 978 阅读 · 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 · 12835 阅读 · 4 评论 -
编译u-boot-mini2440
编译适用于mini2440板子的uboot引导程序原创 2019-10-29 14:04:47 · 532 阅读 · 0 评论 -
Linux设备模型-5-kobj_attribute练习
在上一篇文章中,我们分析了怎样创建自定义对象,对象类型及自定义对象的属性等。下面就是其实现的全部代码:#include <linux/device.h> /* 包含内核对象模型的数据结构的定义及辅助函数 */#include <linux/module.h> #include <lin原创 2018-11-13 20:41:35 · 994 阅读 · 0 评论 -
Ubuntu-16.04编译Qemu
Ubuntu 16.04 编译 QEMU正常情况下,多数Linux版本已经提供了可供安装的QEMU(KVM)二进制安装包。但是,有时候因为需要,还需要自己编译QEMU。在编译之前,有一些依赖软件包需要安装。默认情况下, 编译器和编译工具(gcc,make…)已经有了。依赖条件:必要安装包:git->用于版本管理(在这里可以不要)glib2.0-dev,自动包含 zlib1g-...原创 2018-09-29 15:28:13 · 4739 阅读 · 1 评论 -
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 评论 -
7.6工作队列
7.6 工作队列 7.6.1 共享队列7.6 工作队列从表面上看,工作队列类似于tasklet;它们允许内核代码请求在将来的某个时间调用一个函数。但是,两者还是存在着显著的差异,如下所示:tasklet运行在软件中断上下文中,所以其代码必须是原子操作。相反,工作队列运行在内核进程上下文中;结果就是它们具有更大的灵活性。特别是,工作队列可以休眠。tasklet始终运行在...原创 2018-08-21 16:25:26 · 302 阅读 · 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.5Tasklets机制
7.5 Tasklet7.5 Tasklet关于时间,内核另外一个有力工具就是tasklet机制。它主要用于中断管理。Tasklet在某些方面与内核定时器类似。它们总是在中断时运行,总是运行在调度它们的CPU上,且能够接受unsigned long类型的参数。又不像内核定时器,不能要求在特定时间执行该功能。通过调度tasklet,你可以让内核选择在稍后的时间执行它。这种行为...原创 2018-08-15 21:16:14 · 243 阅读 · 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.4内核定时器
7.4内核定时器 7.4.1 定时器API7.4.2 内核定时器的实现7.4.3 总结-定时器的用法7.4 内核定时器内核的调度肯定需要定时器。 比如, 硬件无法提供中断响应时, 就可以使用内核定时器周期性的轮询设备的状态。 再比如, 关闭软盘电机或某一个冗长的 close 操作。 在这样的情况下, 延迟返回直到调用 close, 会造成资源的浪费。 最后, 内核本身也有...原创 2018-08-15 11:34:09 · 755 阅读 · 0 评论 -
linux内核架构-中断处理机制
本文对中断系统进行了全面的分析与探讨,主要包括中断控制器、中断分类、中断亲和力、中断线程化与 SMP 中的中断迁徙等。首先对中断工作原理进行了简要分析,接着详细探讨了中断亲和力的实现原理,最后对中断线程化与非线程化中断之间的实现机理进行了对比分析。1 什么是中断?Linux 内核需要对连接到计算机上的所有硬件设备进行管理,毫无疑问这是它的份内事。如果要管理这些设备,首先得和它们互相原创 2015-08-26 13:18:58 · 2508 阅读 · 0 评论 -
嵌入式linux学习-ARM MMU工作原理分析
一 MMU的产生许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还用用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序分割成许多称为覆盖块(转载 2016-02-15 11:39:24 · 483 阅读 · 0 评论 -
关于字符驱动设备的一些概念理解
file结构体、inode结构体和dentry结构体内核使用三种数据结构表示打开的文件:(1)每个进程在进程表中都有一个记录项,记录项包含一张打开的文件描述符表,可将视为矢量,每个描述符占用一项,与每个文件描述符相关联的是:a)文件描述符标志(close_on_exec)b))指向一个文件表项的指针(2)内核为所有打开文件维持一张文件表,每个文件表项包含:a)文件状态标志(原创 2016-07-18 16:36:10 · 858 阅读 · 0 评论 -
busybox中Makefile分析(未完)
一 说明可以在busybox目录下,执行“make help”获取帮助信息;可以通过README获取更多信息;二 文件内容理解VERSION = 1PATCHLEVEL = 20SUBLEVEL = 2EXTRAVERSION =NAME = Unnamed#上面关于版本信息,很容易理解,就不再重复。#不要打印"Entering directory ..."原创 2016-02-23 22:46:10 · 2935 阅读 · 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设备模型-1-主要概念
随着计算机的周边外设越来越丰富,设备管理已经成为现代操作系统的一项重要任务,这对于Linux来说也是同样的情况。每次Linux内核新版本的发布,都会伴随着一批设备驱动进入内核。在Linux内核里,驱动程序的代码量占有了相当大的比重。下图是我在网络上搜索到的一幅Linux内核代码量的统计图,对应的内核版本是2.6.29。我们可以很明显的看到,在Linux内核中驱动程序的比例已经非常高了。Li原创 2016-08-31 09:19:46 · 1773 阅读 · 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 · 2469 阅读 · 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 · 1521 阅读 · 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 · 4576 阅读 · 3 评论 -
深入linux内核架构-第二章-进程管理和调度
2.1什么是进程优先级以及抢占式多任务处理?这个用过任何操作系统的程序员都能够理解的。在这里就不多说了。那么linux进程管理和调度采用的什么模型呢?我们称这种方案为抢占式多任务处理(preemptive multitasking),各个进程都分配到一定的时间段执行。时间段到期后,内核会从进程收回控制权,让一个不同的进程执行,而不考虑前一进程所执行的上一个任务。被抢占进程的运行时环原创 2015-02-01 14:19:34 · 646 阅读 · 0 评论 -
深入linux内核架构-第一章-简介和概述
一直以来,对linux充满了满满的憧憬。从今天开始,在未来的一段日子里,每天研究一个linux内核的小主题。坚持!!!!linux的介绍在这里就不阐述了,几乎每本书籍中都有或多或少的介绍和各种设备进行寻址。尽管如此,仍然可以从其它一些有趣的视角进行原创 2015-01-19 13:36:48 · 765 阅读 · 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 评论 -
编译LTIB遇到的问题解决办法
编译imx6对应源码包原创 2017-04-28 00:16:41 · 953 阅读 · 0 评论 -
6.4异步通知
6.4 异步通知 6.4.1 从驱动程序的角度考虑6.4.2 测试scullpipe的异步通知机制6.4 异步通知尽管使用 select 方法, 结合阻塞和非阻塞操作, 对于设备的查询来说, 大部分时候足够了, 但是有些情况, 以我们目前所知的技术还不能有效处理。假设一个进行长计算循环的进程, 需要尽可能快地处理接收到的数据。 对于某种数据采集的外设, 一旦有数据就绪, 进程必...原创 2018-08-07 14:43:04 · 377 阅读 · 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 评论