Linux内核
文章平均质量分 54
zmrlinux
密码学 小仙女 欢迎私聊一起学习
展开
-
内核sort.c 分析
最近,有人面试被问到sort了,总结文档一小篇。内核数据结构与算法 --sort.csort.c 的定义位置: 内核/inclde/linux/sort.hsort 源码的位置: 内核/lib/sort.c我们来看看sort.h 和 sort.c 的内容,sort 是以库的是形式存在,实现上使用内核倒入符号:sort.h 只进行了定义。#ifndef _LINUX_SORT_...原创 2017-03-08 11:34:39 · 1107 阅读 · 0 评论 -
简单字符驱动设备
scull 字符设备驱动程序的设备描述字符设备驱动程序是分配一段内存,然后提供对这个设备的管理方式,我们通过它提供的操作来操纵字符驱动设备,本质上是一个我们分配的模拟内存来模拟驱动设备。结构如下:几个重要方法,我们最初只提供几个简单的接口函数。read : 拷贝数据到应用程序空间。write: 拷贝数据到内核空间,在这里就是我们的字符驱动设备。op...原创 2017-04-30 13:01:24 · 529 阅读 · 0 评论 -
/PROC 调试
内核调试的几种方法内核自带的调试开关CONFIG_DEBUG_KERNEL: 打开基本内核调试功能。CONFIG_DEBUG_SLAB : 内核进行自动检测内存空间泄露,方法极其暴力。CONFIG_DEBUG_SPINLOCK: 内核将捕获对未初始化的自选锁的操作。CONFIG_DEBUG_INFO : 构造包含GDB 调...原创 2017-04-30 13:06:05 · 977 阅读 · 0 评论 -
竞态与并发
Concurrency and competition并发与竞态竞态竞态条件(race condition),从多进程间通信的角度来讲,是指两个或多个进程对共享的数据进行读或写的操作时,最终的结果取决于这些进程的执行顺序。并发在操作系统中,并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处...原创 2017-04-30 13:08:16 · 416 阅读 · 0 评论 -
高级IO操作
关于IO的高级话题阻塞型IO --休眠让一个进程进入休眠状态是很容易的,但是我们必须考虑如何不让他“一睡不醒”。其中有几个重要的规则我们必须遵守。1.永远不要在原子的上下文中进入睡眠。尤其驱动程序不能在拥有自旋锁,seqlock或者RCU锁时休眠。如果我们已经禁止中断也不能使休眠。所以休眠的信号量必须很小。2.当我们被唤醒时,我们不能对睡眠时间作任何的假设...原创 2017-04-30 13:11:44 · 669 阅读 · 0 评论 -
时间与延时
内核时间,延时与缓存时间内核通过定时器中断来跟踪时间流,记录每次时钟周期的滴答数,现代大多数默认时1000HZ ,每次开机后内核会初始化时间变量,然后每过一个时钟周期,变量加一,我们应当充分的信任内核不要随便去改动,除非有特殊的理由。jiffies 变量用来存储时钟中断次数,是一个64位的无符号长整形。它的访问一直是原子的。内核定义:```extern u64 __...原创 2017-04-30 13:14:44 · 475 阅读 · 0 评论 -
linux 驱动程序 内存管理
内存分配这里不再讨论具体架构的内存管理问题,内存的具体结构可以参考我对内存关系分析的博客。我们主要来讨论下,一致的内存分配接口问题。kmalloc“include/linux/slab.h”```static __always_inline void *kmalloc(size_t size, gfp_t flags){if (__builtin_constan...原创 2017-05-10 08:56:20 · 441 阅读 · 0 评论 -
linux 驱动程序 端口通信
IO 通信每种外设都能通过读写寄存器进行控制。大部分外设都有几个寄存器。不管在内存地址还是IO地址空间都是连续的。 ISA设备 IO端口方案 PCI设备 将寄存器映射到内存区段 IO寄存器和传统内存对比 尽管硬件寄存器和内存之间有很强的相似性, 程序员在存取 I/O 寄存器的时候还是要格外小心,避免被CPU(或者编译器)优化所迷惑, 因为它可能修改你期待的 I/O ...原创 2017-05-10 08:58:13 · 471 阅读 · 0 评论 -
Linux驱动部分的内容
之前看LDD3 对内核和驱动做过一些实验和描述,因为种种原因,CSDN的图片没了,需要参考的话,请移步github:https://github.com/zmr961006/Linux_Scull内容目录如下:Linux 设备驱动程序模块抽取分析前言 为了降低后续同学学习内核的难度,我把《LDD3》中的代码和内容做了整理。我做了那些事: 1.代码升级,将2...原创 2019-11-08 16:46:28 · 107 阅读 · 0 评论 -
linux 驱动程序 PCI控制
7.6.9 PCI程序 PCI驱动程序 一.理论 PCI总线的特点: (1)速度上快,时钟频率提高到33M,而且还为进一步把时钟频率提高到66MHZ、总线带宽提高到64位留下了余地。(2)对于地址的分配和设置,系统软件课自动设置,每块外设通过某种途径告诉系统该外设有几个存储区间和I/O地址区间,每个区间的大小以及本地地址。系统软件知道了总共有多少外设以及各种...原创 2017-05-10 09:13:07 · 668 阅读 · 0 评论 -
Linux 驱动程序 USB控制
## USB 驱动程序### USB的一般化定义(概念来源于互联网资料)从1994年11月11日发表了USB V0.7版本以后,USB版本经历了多年的发展,已经发展为3.1版本,成为二十一世纪电脑中的标准扩展接口。当前(2016年)主板中主要是采用USB2.0和USB3.0接口,各USB版本间能很好的兼容。USB用一个4针(USB3.0标准为9针)插头作为标准插头,采用菊...原创 2017-05-10 09:14:50 · 1009 阅读 · 0 评论 -
如何悄悄登入老板的系统 然后悄悄的离开
如何悄悄登入老板的系统 然后悄悄的离开标签: wwholastlastbhexedit2016-03-09 14:40 5人阅读 评论(0) 收藏 举报 分类: 工具(5) 版权声明:Free Open Share 自由转载,注明出处!首先我指的登入是指linux系统获得shell,首先科普下linux系统管理员经常使转载 2016-03-09 18:46:06 · 430 阅读 · 0 评论 -
Linux内核之中断初探
前言上周去校外金工实习了,中间也看过一些书,但是没有写博客总结,今天回来先写篇博客压压惊。中断初探任何的内核都是用来管理硬件的,但是他们是如何管理硬件的呢?最早的时候,是使用轮询机制,但是这种机制很浪费资源的,会降低计算机的整体性能。所以诞生了一种更好的机制,就是让硬件在需要的时候再向内核发出信号。这就是中断机制。中断中断是硬件发出的,它给处理器发送信号,表示自己需要做某些事情,本质就是原创 2015-11-29 22:45:03 · 437 阅读 · 0 评论 -
内核数据结构-----队列kfifo.h (4.0.8)较新的内核版本
比较新的内核队列源码,和2.6.X 的差别真的很大原创 2015-09-21 21:32:08 · 3753 阅读 · 0 评论 -
内存管理器(十二)kernel内存管理----kmalloc/kfree
内存管理器(十二)kernel内存管理----kmalloc/kfree前言上一篇说了页的获取与释放,既然是内核内存管理,内核自然也有自己的一套内存分配与释放函数。go on!kmalloc( )--分配函数这个函数是内核中用来分配内存的函数,它和malloc很像,当时这里多了一个flags标记。用它可以获得以字节为单位的一块内核内存。当然如果希望得到以页为单位的内存还是用__get_fr原创 2015-11-06 18:15:01 · 2880 阅读 · 0 评论 -
虚拟存储子系统调整
虚拟存储子系统调整 虚拟空间存储方式:在linux 中是通过页面为单位的虚拟存储方式进行的。采用虚拟存储的方式,不需要连续的物理内存。现在大部分的处理器都具备用于虚拟存储的处理器嵌入式TLB,旁路转换缓冲区,或称页表缓冲区。和处理不存在的页面访问的结构。其具有以下几种特点:1.程序使用的页面是在应用程序最初访问时由内核分配的。2.如果分配的页面是程序文本,原创 2015-09-29 16:41:04 · 538 阅读 · 0 评论 -
内存管理器(十一)kernel内存管理---页的获取与释放
前言上一篇说了内存管理的数据结构,现在来说说内存管理的一些接口函数,页的分配与释放。alloc_pages && __free_pages[c]includeincludeincludeincludeincludeMODULE_LICENSE("GPL");MODULE_AUTHOR("zmrlinux");MODULE_DESCRIPTION("something abou原创 2015-11-05 12:29:28 · 543 阅读 · 0 评论 -
Linux内核初探5
Linux内核初探5系统调用: What:用户进程与内核交互的经典方法。 进程管理:创建了新的进程,查询信息,调试。 发送信号,定时器及相关处理机制。 对各种文件进行操作。 创建,删除和重命名目录。 保护机制:读取和变更UID/GID,命名空间的处理。 定原创 2015-03-27 18:03:06 · 451 阅读 · 0 评论 -
Linux内核初探4
一.CPU特权级别:现代CPU都提供了几种特权级别,每个特权级别都有各种限制。英特尔处理器区分4种特权级别,但Linux只使用两种用户状态:核心态和用户态。从用户态到核心态的切换通过系统调用的特定转换手段完成。虚拟和物理地址空间:将实际可用的物理内存映射到虚拟地址空间的区域,采取的方法:用页表来为物理地址分配虚拟地址。物理内存页经常称作页帧。页专指虚拟地址空间中的页。页表:用来原创 2015-03-27 17:59:49 · 392 阅读 · 0 评论 -
Linux内核初探2
Linux内核初探(2)进程管理:Linux系统中的进程一般具备以下4中条件:1. 有一段程序供其执行。2. 有进程专用的系统堆栈空间3. 在内核中有“进程控制模块”.有了这个数据结构,进程才能成为内核调度的一个基本单位来接受内核的调度。同时记录着进程所占的各项资源。4. 有独立的存储空间,意味着拥有专有的用户空间,进一步,还意味着除了上述系统空间堆原创 2015-03-21 21:05:17 · 380 阅读 · 0 评论 -
Linux内核初探1
Linux内核初探(1)首先解释内核的概念:内核(Kernel)是操作系统的内部核心,它向外部提供了对计算机设备的核心管理作用。它主要由两部分构成:内核所在的地址空间叫做内核空间。外部管理程序与用户进程所占的地址空间称为外部空间。内核主要的结构现阶段有两种:第一种: 单一内核:是以前操作系统的主流,Linux现在仍然为单一内核结构。操作系统中所有的相关功能都封装在内核中。他原创 2015-03-21 21:04:42 · 484 阅读 · 0 评论 -
linux内核基础进程管理(是什么,简明)
内核栈:就是内核进程的栈空间。隐含类型:指数据的物理表示是未知的或不相关的。内存屏障:内存屏障,也称内存栅栏,内存栅障,屏障指令等, 是一类同步屏障指令,使得CPU或编译器在对内存随机访问的操作中的一个同步点,使得此点之前的所有读写操作都执行后才可以开始执行此点之后的操作。大多数现代计算机为了提高性能而采取乱序执行,这使得内存屏障成为必须。 语义上,内存屏障之前原创 2015-06-05 11:10:10 · 487 阅读 · 0 评论 -
linux内核基础(系统调用,简明)
内核基础(系统调用)在说系统调用之前,先来说说内核是怎么和我们交互的,或者说是怎么和我们产生交集的。首先,内核是用来控制硬件的只有内核才能直接控制硬件,所以说内核很重要,如果内核被控制那么电脑的一切都被控制了,所以我们需要把内核保护起来,所以SHELL 就诞生了,我们绝大多数情况下是在和SHELL 交互,应用程序也运行与SHELL之上,当执行一些进程时,进程会切换进程上下文,这时进程从用户原创 2015-06-11 17:03:17 · 739 阅读 · 0 评论 -
内核同步(死锁等,基础)
内核同步(基础)在访问共享数据的时候必须使用要留意保护共享资源,防止共享资源并发访问。如果发生并发多个线程就可能会交替的修改或者覆盖内存中的数据,而且这种错误不易调试,因为我们并不能确定到底什么时候会发生并发,但是真的有可能发生这种令人恶心的问题。临界区:就是访问和操作共享数据的代码段。多个执行线程并发访问同一个资源通常是不安全的,必须使用原子操作或者锁来保证不要并发。造成并发的原原创 2015-06-12 11:03:09 · 482 阅读 · 0 评论 -
删除LINUX更新后多余的内核
删除LINUX更新后多余的内核本人使用的时fredoa 21 之前为了搞网卡驱动不知不觉升级了几次系统,每次启动后都有好几个内核让我选,真的很头疼阿,尤其像博主这种有点强迫的人,看着就心烦,所以就想删除多余的内核,建议保留两个内核,一个装最新的,一个是底一点版本的稳定的,双保险以备不时之需,开始想的很复杂,毕竟是内核阿,本人也想从事操作系统,内核这方面的学习,工作。但是后来想了一想,其实内核听原创 2015-07-07 12:14:48 · 5340 阅读 · 0 评论 -
第一个hello word 驱动加载失败--------
今天尝试自己加载第一个驱动模块,根据惯例hello word 然后失败了,现在说明我的操作过程,请个位看看。首先我的内核版本:模块代码与MAKEFILE #include#includeMODULE_LICENSE("Dual BSD/GPL");static int hello_init(void){ printk("hello,world\n")原创 2015-07-16 20:14:15 · 1233 阅读 · 4 评论 -
list.h 解析
内核数据结构list.h 解析首先这个数据结构不同于我们我们设计的链表结构。其实链表这种结构的各种操作就是改变链表的指针域而已,所以可以发现内核的链表结构在设计的时候其实只有指针域。我的内核版本: 4.0.8-200.fc21.x86_6 此篇博客所有的源码都来自这个版本的内核。节点的定义在./include/types.h 中 struct list_head {原创 2015-09-09 20:45:22 · 563 阅读 · 0 评论 -
内核之旅起航---简单内核模块和内核编程规则
内核模块与内核编程一些常识首先把我之前的hello word 模块加载失败问题解决了。首先:更新内核,yum update kernel 安装内核开发树。 内核模块hello word 代码:#include //内核相关函数的头文件,内核编程不能调用C库#includeMODULE_LICENSE("Dual BSD/GPL"); //用原创 2015-09-10 18:34:27 · 561 阅读 · 2 评论 -
内核之旅 --- 内核模块学习1---内核模块参数传递
内核模块---module_param_array原创 2015-09-12 10:32:34 · 1401 阅读 · 0 评论 -
字符设备驱动程序
设备文件的一些#include #define MINORBITS 20#define MINORMASK ((1U << MINORBITS) - 1)#define MAJOR(dev) ((unsigned int) ((dev) >> MINORBITS))#define MINOR(dev) ((unsigned int) ((dev) & MINORMASK))#de原创 2015-09-13 14:09:43 · 403 阅读 · 0 评论 -
内存管理器(九)内核内存管理–进程相关数据结构
内存管理器(九)内核内存管理–进程相关数据结构前言前面的几篇博文都是在学习用户态内存管理,malloc与free 也研究了Glibc 的内存管理函数的实现,本来想点到位置,但是觉得还是太浅了,不够深入,遂决定,继续挖掘下去(读破万卷始见金嘛)。所以再次修改学习路线,希望最后能做出来一切实可用的东西。毕竟本科学习阶段主要还是在于掌握原理上的东西,真的很难做出什么有实际价值的东西,原创 2015-11-04 14:59:41 · 485 阅读 · 0 评论 -
Linux内核初探3
1.内核的任务 内核:充当底层的驱动程序,应用程序只与内核有联系,内核是应用程序的所知道的层次结构中最底层的,也是资源管理程序,也是一种库,提供了一组面向系统的命令。 2.实现策略 微内核(中央内核) 宏内核(构建系统内核的传统方法)3.内核的组成部分 用户空间:应用程序,C库,系统调用。 内核空间:核心内核与设备驱动程序,硬件4.进程,进程切换与调度原创 2015-03-25 22:17:40 · 424 阅读 · 0 评论