• <div id="0yoao"><tr id="0yoao"></tr></div>
    <dl id="0yoao"></dl>
  • <sup id="0yoao"></sup>
    <div id="0yoao"><tr id="0yoao"></tr></div>
  • <div id="0yoao"><tr id="0yoao"></tr></div>
  • Linux内核的自旋锁

    作者:沙漠之狐 发布于:2019-5-17 19:11 分类:内核同步机制

    自旋锁用于处理器之间的互斥,适合保护很短的临界区,并且不允许在临界区睡眠。申请自旋锁的时候,如果自旋锁被其他处理器占有,本处理器自旋等待(也称为忙等待)。

    进程、软中断和硬中断都可?#20801;?#29992;自旋锁。

    自旋锁的实现经历了3个阶段:

    (1)     最早的自旋锁是无序竞争的,不保证先申请的进程先获得锁。

    (2)     2个阶段是入场券自旋锁,进程按照申请锁的顺序排队,先申请的进程先获得锁。

    (3)     3个阶段是MCS自旋锁。入场券自旋锁存在性能问题?#26680;?#26377;申请锁的处理器在同一个变?#21487;?#33258;旋等待,缓存同步?#30446;?#38144;大,不适合处理器很多的系?#22330;?span>MCS自旋锁的策?#20801;?#20026;每个处理器创建一个变量副本,每个处理器在自己的本地变?#21487;?#33258;旋等待,解决了性能问题。

    阅读全文>>

    标签: Linux 自旋锁

    评论(9) 浏览(3565)

    tty驱动分析

    作者:callme_friend 发布于:2018-4-20 18:02 分类:TTY子系统

    分析背景:xilinx_uartps.c (drivers\tty\serial)----linux-4.9内核

    以具体驱动为例,描述了驱动的注册、打开和读写过程;梳理了相关数据结构间的关系。最后给出了一个模拟tty驱动实例。

    阅读全文>>

    标签: Linux tty 模拟串口

    评论(25) 浏览(9820)

    Linux kernel内存管理的基本概念

    作者:wowo 发布于:2017-11-9 22:37 分类:内存管理

    内存(memory)在Linux系?#25345;惺且?#31181;牵涉面极广的资源,?#29616;?#24212;用程序、下至kernel和driver,无不为之魂牵梦绕。加上它天然的稀缺性,导致内存管理(Memory Management,简称MM)是linux kernel中非常重要又非常复杂的一个子系?#22330;?

    重要性就不多说了,Kernel自有分寸。关于复?#26377;裕?#37492;于Linux kernel优秀的抽象能力),应该不会被普通人(Linux系统的使用者、应用工程师、驱动工程师、轻量级的内核工程师)感知到才对。事?#31561;?#23454;如此,Kernel屏蔽掉了大多数的实现细节,尽量以简单、易用的方式向其它模块提供memory服务。

    不过呢,这个世界上没有完美的存在,kernel的内存管理也是如此,由于两方面的原因:一、众口难调,内存管理有关的需求实在太复杂了;二、CPU、Device和Memory之间纠结的三角恋(参考下面图片),导致它也(不得不)提供了很多啰里啰唆的、不易理解的功能(困扰了很多从入门级?#38454;?#28145;级的linux软件工程师)。

    memory_topology

    图片1 CPU, Device and Memory

    基于上面的原因,本站内存管理子系统发布了很多分析文章,以帮助大家理解内存管理有关的概念。不过到目前为止,还缺少一篇索引类的文章,从整体出发,理解Kernel内存管理所需要面对的软?#24067;?#23616;面、所要解决的问题,以及各个内存管理子模块的功能和意义。这就是本文的目的。

    阅读全文>>

    标签: Linux Kernel 内核 内存管理 mm 概念

    评论(6) 浏览(13671)

    Linux kernel scatterlist API介绍

    作者:wowo 发布于:2017-10-13 22:20 分类:内存管理

    我们在那些需要和用户空间交互大量数据的子系统(例如MMC[1]、Video、Audio等)中,经常看到scatterlist的影子。对我们这些“非英语母语”的人来说,初见这个词汇,?#28304;布?#23601;蒙圈了。scatter可翻译成“散开、分散?#20445;琹ist是“列表”的意思,因而scatterlist可翻译为“散列表”。“散列表”又是什么?太抽象了!

    之所以抽象,?#19988;?#20026;这个?#36866;?#30053;了主语----物理内存(Physical memory),加上后,就好理解了多了,既:物理内存的散列表。再通俗一些,就是把一些分散的物理内存,以列表的形式组织起来。那么,也许你会问,有什么用处呢?

    当然有用,具体可参考本文后续的介绍。

    阅读全文>>

    标签: Linux Kernel 内核 scatterlist sg_table

    评论(6) 浏览(10073)

    Linux reset framework

    作者:wowo 发布于:2017-9-1 10:46 分类:电源管理子系统

    大家都知道,复杂IC内部有很多具有独立功能的?#24067;?#27169;块,例如CPU cores、GPU cores、USB控制器、MMC控制器、等等,出于功耗、稳定性等方面?#30446;悸牵?#26377;些IC在内部为这些?#24067;?#27169;块设计了复位信号(reset signals),软件可通过寄存器(一般1个bit控制1个?#24067;?#25511;制这些?#24067;?#27169;块的复位状态。

    Linux kernel为了方便设备驱动的编写,抽象出一个简单的软件框架----reset framework,为reset的provider提供统一的reset资源管理手段,并为reset的consumer(各个?#24067;?#27169;块)提供便捷、统一的复位控制API。

    reset framework的思路、实现和使用都非常简单、易懂(参考kernel有关的API--include/linux/reset-controller.h、include/linux/reset.h可知),不过麻雀虽小,五脏俱全,通过它可以加深对Linux kernel的设备模型、驱动框架、分层设计、provider/consumer等设计思想的理解,因此本文将对其进行一个简单的罗列和总结。

    阅读全文>>

    标签: Linux Kernel 内核 framework reset

    评论(0) 浏览(6014)

    X-023-KERNEL-Linux pinctrl driver的移植

    作者:wowo 发布于:2017-7-14 21:58 分类:X Project

    本文是“linux内核中的GPIO系?#25345;?):pinctrl驱动的理解和总结”的一个实例,结合”X Project”?#30446;?#21457;过程,介绍pinctrl driver的移植步骤,进而加深对pinctrl framework的理解。

    注1:本文后续的描述,kernel基于本?#23613;?/span>X Project”所使用的kernel版本[4],?#24067;?/span>基于 ”X Project”所使用的“Bubbugum-96”平台。

    阅读全文>>

    标签: Linux Kernel driver porting pinctrl

    评论(0) 浏览(3341)

    linux内核中的GPIO系?#25345;?):pinctrl驱动的理解和总结

    作者:wowo 发布于:2017-6-27 22:30 分类:GPIO子系统

    本站之前的三篇文章[1][2][3]介绍了pin controller(对应的pin controller subsystem)、gpio controller(对应的GPIO subsystem)有关的基本概念,包括pin multiplexing、pin configuration等等。本文将基于这些文章,单纯地从pin controller driver的?#23884;齲?#23631;蔽掉pinctrl core的实现细节),理解pinctrl subsystem的设计思想,并掌握pinctrl驱动的移植和实现方法。

    阅读全文>>

    标签: Linux driver GPIO subsystem pinctrl

    评论(6) 浏览(20893)

    Linux DMA Engine framework(2)_功能介绍及解接口分析

    作者:wowo 发布于:2017-5-2 22:47 分类:Linux内核分析

    从我们的直观感受来说,DMA并不?#19988;?#20010;复杂的东西,要做的事情也很单纯直白。因此Linux kernel对它的抽象和实现,也应该简洁、易懂才是。不过现?#31561;?#19981;甚?#27490;郟?#20010;人感觉),Linux kernel dmaengine framework的实现,真有点晦涩的感觉。为什么会这样呢?

    如果一个软件模块比较复杂、晦涩,要么是设计者的功力不够,要么是需求使然。当然,我们不敢对Linux kernel的那些大神们有丝毫怀疑和不敬,只能?#26377;?#27714;上下功夫了:难道Linux kernel中的driver对DMA的使用上,有一些超出了我们日常的?#29616;段В?

    要回答这些问题并不难,将dmaengine framework为consumers提供的功能和API梳理一遍就可以了,这就是本文的目的。当然,也可以借助这个过程,加深对DMA的理解,以便在编写那些需要DMA传输的driver的时候,可以更?#31283;?#26377;余。

    阅读全文>>

    标签: Linux Kernel 内核 API dma engine

    评论(11) 浏览(15534)

    Linux DMA Engine framework(1)_概述

    作者:wowo 发布于:2017-3-30 22:01 分类:Linux内核分析

    前面文章介绍“Linux MMC framework”的时候,涉及到了MMC数据传输,进而不可避免地遭遇了DMA(Direct Memory Access)。因而,择日不如撞日,就开几篇文章介绍Linux的DMA Engine framework吧。

    本文是DMA Engine framework分析文章的第一篇,主要介绍DMA controller的概念、术语(从?#24067;?#30340;?#23884;齲?#22823;部分翻译自kernel的document[1])。之后,会分别从Provider(DMA controller驱动)和Consumer(其它驱动怎么使用DMA传输数据)两个?#23884;齲?#20171;绍Linux DMA engine有关的技术细节。

    阅读全文>>

    标签: Linux Kernel 内核 framework dma engine

    评论(10) 浏览(10847)

    Linux MMC framework(2)_host controller driver

    作者:wowo 发布于:2017-3-8 21:33 分类:通信类协议

    本文是Linux MMC framework的第二篇,将从驱动工程师的?#23884;齲?#20171;绍MMC host controller driver有关的知识,学习并掌握如何在MMC framework?#30446;?#26550;下,编写MMC控制器的驱动程序。同?#20445;?#36890;过本篇文章,我们会进一步的理解MMC、SD、SDIO等有关的基础知识。

    阅读全文>>

    标签: Linux Kernel 内核 driver mmc host

    评论(10) 浏览(8538)

    Copyright @ 2013-2015 蜗窝科技 All rights reserved. Powered by emlog
    连码三全中是什么
  • <div id="0yoao"><tr id="0yoao"></tr></div>
    <dl id="0yoao"></dl>
  • <sup id="0yoao"></sup>
    <div id="0yoao"><tr id="0yoao"></tr></div>
  • <div id="0yoao"><tr id="0yoao"></tr></div>
  • <div id="0yoao"><tr id="0yoao"></tr></div>
    <dl id="0yoao"></dl>
  • <sup id="0yoao"></sup>
    <div id="0yoao"><tr id="0yoao"></tr></div>
  • <div id="0yoao"><tr id="0yoao"></tr></div>
  • 平特一肖中精准 老快3线上娱乐 秒速时时彩单双技巧 精准规律公式 网赌时时彩惊天秘密 3d大赢家心水论坛 5分快3稳赢 梭哈的棋牌游戏 七乐彩七乐彩走势图 香港六合彩内部赛马会 内蒙古十一选五一定牛 3D全部开奖结果 快乐彩开奖 重庆快乐十分开奖爱彩乐 希腊彩开奖结果