linux kernel
Vance2016
我是一名在校大学生,从事于计算机专业的学习
展开
-
Linux内核驱动模块编写概览-ioctl,class_create,device_create
linux device driver basic knowledge转载 2017-01-10 18:08:24 · 298 阅读 · 0 评论 -
Xneomai 简介
Real Time 的定義一個real time的系統需要保證其工作在給定的時間限制內完成(稱為deadline)。 系統不需要以最快的速度(real fast)完成任務,但需要時常或每次皆在deadline之內完成。在這個前提下,real time系統的任務完成時間是可確定的(deterministic)。 而根據系統的限制不同,real time可分為:Soft Rea转载 2017-11-02 10:57:06 · 2791 阅读 · 0 评论 -
Linux 系统内核的调试
教您如何搭建Linux内核调试环境/*----------------------------------------------------------------------------------------------------------------------------*/一 安装linux虚拟机1 在vmware上安装新的linux虚拟机.创建一个新的虚拟机,转载 2018-01-25 19:24:27 · 983 阅读 · 0 评论 -
RTAI的用户空间编程
任务创建实时任务的创建主要完成对代表实时任务实体的任务结构变量的初始化操作,包括分配任务栈、初始化任务栈、初始化链表指针等。 1. 函数RT_TASK* rt_task_init(unsigned long name, int priority, int stack_size, int max_msg_size)RT_TASK*rt_task_init_schmod(unsigned lo...原创 2018-05-17 10:55:26 · 1284 阅读 · 2 评论 -
实时系统性能测试指标及方法
一、Rhealstone Rhealstone是系统实时性的测量基准之一,Rhealstone方法对ERTOS中六个关键操作的时间量进行测量,并将它们的加权和称为Rhealstone数。这六个时间量如下:2.抢占时间(preemption time),即系统将控制从低优先级的任务转移到高优先级任务所花费的时间。为了对任务进行抢占,系统必须首先识别引起高优先级任务就绪的事件,比较两个任务的优先...转载 2018-05-17 11:09:32 · 6055 阅读 · 0 评论 -
Xenomai编程笔记
Xenomai 是一种采用双内核机制的Linux 内核的强实时扩展。由于Linux 内核本身的实现方式和复杂度,使得Linux 本身不能使用于强实时应用。在双内核技术下,存在一个支持强实时的微内核,它与Linux 内核共同运行于硬件平台上,实时内核的优先级高于Linux 内核,它负责处理系统的实时任务,而Linux 则负责处理非实时任务,只有当实时内核不再有实时任务需要处理的时候,Linux 内...转载 2018-05-17 11:13:24 · 7732 阅读 · 1 评论 -
自旋锁与互斥锁的对比、手工实现自旋锁
本文之前,我只是对自旋锁有所了解,知道它是做什么的,但是没有去测试实现过,甚至以为自旋锁只有kernel用这个,今天才发现POSIX有提供自旋锁的接口。下面我会分析一下自旋锁,并代码实现自旋锁和互斥锁的性能对比,以及利用C++11实现自旋锁。一:自旋锁(spin lock) 自旋锁是一种用于保护多线程共享资源的锁,与一般互斥锁(mutex)不同之处在于当自旋锁尝试获取锁时以忙等待(busy ...转载 2018-06-12 15:58:33 · 497 阅读 · 0 评论 -
自旋锁(spinlock) 解释得经典,透彻
自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。 由于自旋锁使用者一般保持锁时间非常短,因此选择自旋而不是睡眠是非常必要的,自旋锁的效率远高于互斥锁。 信号量和读写信号量适合于保持时间较长的情况,它们会导致调用者睡眠,因此只能在进程上下文使用(_trylock的变种能够...转载 2018-06-12 16:04:45 · 2023 阅读 · 0 评论 -
用Qemu运行/调试arm linux
用Qemu运行/调试arm linux用Qemu运行/调试arm linux,这事情干过好几次了,久了就忘记了,每次都要重新去查资料,浪费不少时间。这次把整个过程弄成个脚本,放到github上,需要是拿下来运行一下即可,方便自己也方便有需要的朋友。这里解释一下脚本的内容(运行系统Ubuntu 16.04 LTS):1. 设置一些环境变量,可以根据自己需要修改。export ARCH=armexp...转载 2018-06-29 17:46:40 · 497 阅读 · 0 评论 -
ARM Linux 3.x的设备树(Device Tree)
请参考: https://blog.csdn.net/21cnbao/article/details/8457546转载 2018-08-24 17:05:46 · 207 阅读 · 0 评论 -
(*(void (*) ()) 0) ();
在第二章语法陷进看到一个有趣的例子:(*(void (*) ()) 0) ();第一眼看到完全懵了,后来经过讲解发现很好理解!(果然是封神的书!)(*(void (*) ()) 0) ();其实可以拆分成三个部分:1.void(*) (),其实这样看起来还不是很明显,在*之后加上一个变量p,void (*p) ();那很明显,这就是一个函数指针*p的声明,且返回值为void类型,...转载 2018-09-09 11:11:11 · 1992 阅读 · 0 评论 -
i.mx6ul linux驱动开发—基于Device tree机制的驱动编写
前言 Device Tree是一种用来描述硬件的数据结构,类似板级描述语言,起源于OpenFirmware(OF)。在目前广泛使用的Linux kernel 2.6.x版本中,对于不同平台、不同硬件,往往存在着大量的不同的、移植性差的板级描述代码,以达到对这些不同平台和不同硬件特殊适配的需求。但是过多的平台、过的的不同硬件导致了这样的代码越来越多,最终引发了Linux创始人Linus的不满,以及...转载 2018-10-11 10:15:17 · 1076 阅读 · 0 评论 -
Device Tree机制
1. 设备树(Device Tree)基本概念及作用在内核源码中,存在大量对板级细节信息描述的代码。这些代码充斥在/arch/arm/plat-xxx和/arch/arm/mach-xxx目录,对内核而言这些platform设备、resource、i2c_board_info、spi_board_info以及各种硬件的platform_data绝大多数纯属垃圾冗余代码。为了解决这一问题,AR...转载 2018-10-11 17:08:17 · 309 阅读 · 0 评论 -
Yocto构建文件系统
Yocto构建文件系统一、准备工作准备操作系统 建议使用Ubuntu14的虚拟机或PC由于后面的编译过程将占用大量资源,虚拟机建议16g内存(至少8g)、4线程### 安装软件~~~java$ sudo apt-get install build-essential git-core libncurses5-dev \flex bison texinfo zip u...转载 2018-10-10 13:57:19 · 3657 阅读 · 0 评论 -
Linux内核Crash分析
在工作中经常会遇到一些内核crash的情况,本文就是根据内核出现crash后的打印信息,对其进行了分析,使用的内核版本为:Linux2.6.32。 每一个进程的生命周期内,其生命周期的范围为几毫秒到几个月。一般都是和内核有交互,例如用户空间程序使用系统调用进入内核空间。这时使用的不再是用户空间的栈空间,使用对应的内核栈空间。对每一个进程来说,Linux内核都会把两个不同的数据结...转载 2018-11-22 08:58:38 · 6353 阅读 · 0 评论 -
内核工程师必备工具--crash
熟悉windows的朋友都知道系统如果出现蓝屏了,会使用windbg工具来分析coredump文件,那么linux呢?linux主流解决方案是kdump+crash, kdump用来在系统crash的时候生成core dump文件,而crash工具就是用来分析这个core dump文件的。系统环境 centos 7.2crash工具介绍什么是crash?crash是一个...转载 2018-11-22 17:01:30 · 481 阅读 · 0 评论 -
video4linux(v4l)使用摄像头的实例基础教程与体会
由于毕业设计的关系,本人要做一下在 linux 系统中视频的相关工作比如采集和传输。由于本人是菜鸟一个,所以是需要上网搜一搜看大家都是如何做的,当然开始都是理不出一个头绪,但是很多文章都提到了 video4linux(v4l) ,所以我觉得工作的展开可以先从这里开始,。看了网上的一些文章,其中比较重要的也是比较知名的吧,有戴小鼠写的《基于 Video4Linux 的 USB 摄像头图像采集实现》,...转载 2018-12-20 18:04:14 · 534 阅读 · 0 评论 -
linux 审计--audit
一.audit介绍audit是linux系统中用于记录用户底层调用情况的系统,如记录用户执行的open,exit等系统调用.并会将记录写到日志文件中.audit可以通过使用auditctl命令来添加或删除audit规则.设置针对某个用户进行记录,或针对某个进程的进行记录. audit主要包含2个命令:auditd audit服务进程auditctl au转载 2017-10-15 22:07:57 · 1514 阅读 · 0 评论 -
Linux内核的整体架构简介
1. 前言本文是“Linux内核分析”系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统。之后,会介绍Linux内核源文件的目录结构,并和各个软件子系统对应。注:本文和其它的“Linux内核分析”文章都基于如下约定: a) 内核版本为Linux 3.10.29(该版本是一个long term的版本,会被Linux社区持续维转载 2017-10-23 17:44:42 · 71691 阅读 · 1 评论 -
Linux内核驱动模块编写简介-ioctl,class_create,device_create
linux device driver basic knowledge原创 2017-01-10 18:15:26 · 812 阅读 · 0 评论 -
D-BUS基础编程
D-BUS属于FreeDesktop.org项目的一部分。bus守护进程,没有使用常用的二进制字节流,而是使用了二进制消息的概念,消息由消息头和相应的数据组成。 操作系统的概念: 包括内核、系统守护进程和进程。D-BUS的设计目的:方便同一个桌面会话中的多个应用程序之间的通信;有助于桌面应用程序和操作系统之间的通信原创 2017-08-23 15:30:26 · 1423 阅读 · 0 评论 -
Linux内核开发之内存与I/O访问(一)
“小王,今天咱们开始讲有关内存和I/O访问的内容,心里先要有点低,这部分内容还是有点烦,有点难的哦”说着话,我心里都没底,怕吓着小王,不瞒你说,当时看这部分,我可是没少费劲。“哦,那咋办,不能不学是不?没事,有小涛哥在,俺就不怕”小王信心十足的说。“哦!看不出来,还让你来安慰我了”看着小王这充满信心的样子,我也没啥顾虑了。好了,深吸一口气,开始今天的课程。 我们知道,在转载 2017-09-28 10:07:01 · 312 阅读 · 0 评论 -
Linux内核开发之内存与I/O访问(二)
对于一块实际的设备而言,通常会提供一组寄存器来用于控制设备,读写设备和获取设备状态,也就是我们常说的控制寄存器,数据寄存器和状态寄存器。这些寄存器可能位于I/O空间(这时叫做I/O端口),也可能位于内存空间(对应的内存空间被成为I/O内存)。在Linux中提供了一系列的I/O端口和I/O内存操作的接口如下: 1)I/O端口操作:在Linux设备驱动中,应使用Linux内核提供的函数来访问转载 2017-09-28 10:11:44 · 272 阅读 · 0 评论 -
Linux内核开发之内存与I/O访问(三)
一般情况下,用户空间是不可能也不应该直接访问设备的,但是设备驱动程序可实现mmap()函数,这个函数可使得用户空间能直接访问设备的物理地址。实际上,mmap()S实现了这样的一个映射过程,它将用户空间的一段内存与设备内存关联,当用户访问用户空间的这段地址范围时,实际上会转化为对设备的访问。 mmp()必须以PAGE_SIZE为单位进行映射,实际上,内存只能以页为单位进行映射,若要映射非P转载 2017-09-28 10:13:08 · 287 阅读 · 0 评论 -
CPU Affinity (CPU亲合力)
CPU亲合力就是指在Linux系统中能够将一个或多个进程绑定到一个或多个处理器上运行.一个进程的CPU亲合力掩码决定了该进程将在哪个或哪几个CPU上运行.在一个多处理器系统中,设置CPU亲合力的掩码可能会获得更好的性能.一个CPU的亲合力掩码用一个cpu_set_t结构体来表示一个CPU集合,下面的几个宏分别对这个掩码集进行操作: ·CPU_ZERO() 清空一个集合转载 2017-10-18 10:45:30 · 443 阅读 · 0 评论 -
cyclictest 测试以及原理简介
1.1 cyclictest 简介 cyclictest 是什么? 看名字应该就能大致猜出来它是一种 test 程序,Cyclictest的维基主页这么介绍它“Cyclictest is a high resolution test program, written by User:Tglx, maintained by User:Clark Williams ”,也就是它是转载 2017-10-18 10:07:22 · 2820 阅读 · 0 评论 -
cyclictest源码分析
sudo cyclictest -t1 -n -l 10000 这里的参数含义:-t 指定要在cyclictest 这个进程中要运行的线程个数,-n 代表我们使用clock_nanosleep函数进行休眠(稍后会详细介绍),-l代表每个线程中需要迭代的次数。这里指定cyclictest跑一个迭代10000次的线程。在process_options() Line:1175中:[cp转载 2017-10-18 15:04:33 · 888 阅读 · 0 评论 -
Linux内核抢占机制(preempt)
早期的Linux核心是不可抢占的。它的调度方法是:一个进程可以通过schedule()函数自愿地启动一次调度。非自愿的强制性调度只能发生在 每次从系统调用返回的前夕以及每次从中断或异常处理返回到用户空间的前夕。但是,如果在系统空间发生中断或异常是不会引起调度的。这种方式使内核实现得以 简化。但常存在下面两个问题:如果这样的中断发生在内核中,本次中断返回是不会引起调度的,而要到最初使CPU从用户转载 2017-10-19 17:57:39 · 8590 阅读 · 1 评论 -
自旋锁spinlock剖析
1, spinlock介绍 spinlock又称自旋锁,线程通过busy-wait-loop的方式来获取锁,任时刻只有一个线程能够获得锁,其他线程忙等待直到获得锁。spinlock在多处理器多线程环境的场景中有很广泛的使用,一般要求使用spinlock的临界区尽量简短,这样获取的锁可以尽快释放,以满足其他忙等的线程。Spinlock和mutex不同,spinlock不会导致线程的状态切换转载 2017-10-12 17:22:53 · 925 阅读 · 0 评论 -
Linux内核同步机制之一----spin lock
一、前言在linux kernel的实现中,经常会遇到这样的场景:共享数据被中断上下文和进程上下文访问,该如何保护呢?如果只有进程上下文的访问,那么可以考虑使用semaphore或者mutex的锁机制,但是现在中断上下文也参和进来,那些可以导致睡眠的lock就不能使用了,这时候,可以考虑使用spin lock。本文主要介绍了linux kernel中的spin lock的原理以及代码实现。转载 2017-10-12 17:30:00 · 834 阅读 · 0 评论 -
Linux内核同步机制之三------Seqlock
一、前言普通的spin lock对待reader和writer是一视同仁,RW spin lock给reader赋予了更高的优先级,那么有没有让writer优先的锁的机制呢?答案就是seqlock。本文主要描述linux kernel 4.0中的seqlock的机制,首先是seqlock的工作原理,如果想浅尝辄止,那么了解了概念性的东东就OK了,也就是第二章了,当然,我还是推荐普通的驱动工程师转载 2017-10-12 17:38:08 · 667 阅读 · 0 评论 -
Linux内核同步机制之二-----Read/Write spin lock
一、为何会有rw spin lock?在有了强大的spin lock之后,为何还会有rw spin lock呢?无他,仅仅是为了增加内核的并发,从而增加性能而已。spin lock严格的限制只有一个thread可以进入临界区,但是实际中,有些对共享资源的访问可以严格区分读和写的,这时候,其实多个读的thread进入临界区是OK的,使用spin lock则限制一个读thread进入,从而导致性能转载 2017-10-12 17:33:07 · 632 阅读 · 0 评论 -
大话Linux内核中锁机制之原子操作、自旋锁
很多人会问这样的问题,Linux内核中提供了各式各样的同步锁机制到底有何作用?追根到底其实是由于操作系统中存在多进程对共享资源的并发访问,从而引起了进程间的竞态。这其中包括了我们所熟知的SMP系统,多核间的相互竞争资源,单CPU之间的相互竞争,中断和进程间的相互抢占等诸多问题。通常情况下,如图1所示,对于一段程序,我们的理想是总是美好的,希望它能够这样执行:进程1先对临界区完成操作,然后进转载 2017-10-13 10:10:17 · 399 阅读 · 0 评论 -
大话Linux内核中锁机制之内存屏障、读写自旋锁及顺序锁
大话Linux内核中锁机制之内存屏障、读写自旋锁及顺序锁 在上一篇博文中笔者讨论了关于原子操作和自旋锁的相关内容,本篇博文将继续锁机制的讨论,包括内存屏障、读写自旋锁以及顺序锁的相关内容。下面首先讨论内存屏障的相关内容。三、内存屏障不知读者是是否记得在笔者讨论自旋锁的禁止或使能的时候,提到过一个内存屏障函数。OK,接下来,笔者将讨论内存屏障的具体细节内容。我们首先来看转载 2017-10-13 10:01:08 · 340 阅读 · 0 评论 -
imx6设备树pinctrl解析
请参考:https://blog.csdn.net/michaelcao1980/article/details/50730421转载 2018-12-10 15:59:23 · 385 阅读 · 0 评论