内核驱动
文章平均质量分 95
Linux内核与驱动相关知识
YoungerChina
目前从事存储与计算相关的架构设计和研发管理工作
展开
-
初识eBPF
eBPF 是一项革命性的技术,它能在操作系统内核中运行沙箱程序。被用于安全并有效地扩展内核的能力而无需修改内核代码或者加载内核模块。原创 2024-02-19 09:37:19 · 1736 阅读 · 0 评论 -
鸿蒙内核框架
用户最常见到并与之交互的操作系统界面,其实只是操作系统最外面的一层。操作系统最重要的任务,包括管理硬件设备,分配系统资源等,我们称之为操作系统内在最重要的核心功能。原创 2024-02-05 16:31:09 · 7043 阅读 · 5 评论 -
Printk与sched_clock_init的一点分析
分析Linu内核启动的过程中,发现一段“不平常”的日志,感觉产生这段日志的代码肯定是“不可思议”的。因此就大致分析了一下原创 2016-06-09 00:39:46 · 803 阅读 · 0 评论 -
系统启动 之 Linux系统启动概述(1)
随着智能终端功能的越来越庞大,与之,硬件配置越来越高,开机时间却越来越长。人们在享受强大功能的同时,对冗长的智能终端的开机时间却越来越缺乏耐心。原创 2016-06-09 00:16:03 · 1534 阅读 · 0 评论 -
Linux Bootup Time
Linux Bootup Time英文原文地址:http://elinux.org/Boot_Time1. 简介启动时间这一话题包括很多子话题,比如启动时间的衡量、启动时间的分析、人为因素分析、初始化技术和还原技术等等。在消费类领域,无论电子设备设计是多么的精心,多么的吸引人,这个产品品所需的启动时间始终是直接影响最终用户体验的第一感知。移动设备达到一个互动的、可用的状态是至关转载 2016-06-09 00:28:31 · 1668 阅读 · 0 评论 -
系统启动 之 Linux系统启动概述(2)
Linu系统启动是一个”冗长乏味”的过程,那么我们现就需要去经历一下这个冗长乏味的生活。我们按照如下流程来分析: 1. 史前时代:BIOS计算机在上电那一刻几乎是毫无用处的,此时,RAM中包含的全部是随机数据。在开始启动时,一个特殊的硬件电路在CPU的一个引脚上产生一个RESET逻辑值,在RESET产生之后,就把处理器的一些寄存器设置成固定的值,并执行在物理地址0xFF原创 2016-06-09 00:36:09 · 2048 阅读 · 0 评论 -
BogoMIPS与calibrate_delay
在分析Arm+linux启动信息的时候。发现有一个信息竟然耗费了2s的时间,这简直是不能忍受的。这个耗时大鳄是什么东西哪,请看分析信息:[ 0.000000] console [ttyMT0] enabled[ 2.057770] Calibrating delay loop... 1694.10 BogoMIPS (lpj=4235264)[ 2.102188]原创 2016-06-09 00:43:58 · 2813 阅读 · 0 评论 -
FrameBuffer系列 之 介绍
1. 来由FrameBuffer是出现在2.2.xx内核当中的一种驱动程序接口。Linux工作在保护模式下,所以用户态进程是无法象 DOS 那样使用显卡 BIOS里提供的中断调用来实现直接写屏,因此Linux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏。 2. 工作机理Framebuffer机制模仿显卡的原创 2013-11-07 20:38:39 · 2531 阅读 · 0 评论 -
设备驱动之一 - 最简单的可运行的scull模块
linux设备驱动程序 第三版学习头文件scull.h/********************************************** * Author: lewiyon@hotmail.com * File name: scull.h * Description: define scull * Date: 2012-07-4 ****************原创 2012-07-08 19:11:10 · 1158 阅读 · 0 评论 -
设备驱动之一 - linux读写信号量semaphore .
转载地址:http://soft.yesky.com/os/lin/10/2303010_3.shtml读写信号量(rw_semaphore) 读写信号量对访问者进行了细分,或者为读者,或者为写者,读者在保持读写信号量期间只能对该读写信号量保护的共享资源进行读访问,如果一个任务除了需要读,可能还需要写,那么它必须被归类为写者,它在对共享资源访问之前必须先获得写者身份,写者在发现自己不转载 2012-07-15 13:44:24 · 1278 阅读 · 0 评论 -
FrameBuffer系列 之 相关结构与结构体
在linux中,fb设备驱动的源码主要在Fb.h (linux2.6.28\include\linux)和Fbmem.c(linux2.6.28\drivers\video)两个文件中,它们是fb设备驱动的中间层,为上层提供系统调用,为底层驱动提供接口。在fb.h文件中有fb驱动需要使用的很多结构,我们先对这些结构体进行说明:1. 帧缓冲区描述符fb_info原创 2013-11-07 20:42:20 · 2959 阅读 · 0 评论 -
设备驱动之一 - 多源文件驱动模块的Makefile写法
对于含有多个源文件的驱动模块,其Makefile如何写哪,在网上搜索了很多,但是很少有成功的。通过不懈的搜索和“篡改”,先将争取的模版发布出来 当前目录./的文件如下: ./----- |-----scull.h |-----scullmod.c |-----file.h |--原创 2012-07-10 21:24:09 · 1242 阅读 · 0 评论 -
设备驱动之一 - 手工休眠
进程休眠步骤可通过手工设置:1. 创建和初始化一个等待队列。常由宏定义完成: DEFINE_WAIT(my_wait); 其中的name 是等待队列入口项的名字. 当然也可以用2步来做: wait_queue_t my_wait; init_wait(&my_wait); 常用的做法是放一个 DEFINE_WAIT 在循环的顶部,来实现休眠。2. 添加等待队原创 2012-07-26 22:24:51 · 983 阅读 · 0 评论 -
FrameBuffer系列 之 显示图片
摘自:http://blog.csdn.net/luxiaoxun/article/details/7622988#include #include #include #include #include #include #include #include #include //14byte文件头typedef struct转载 2013-11-07 20:45:42 · 6277 阅读 · 0 评论 -
FrameBuffer系列 之 简单编程
一、Linux的帧缓冲设备 帧缓冲(framebuffer)是 Linux为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer设备驱动来完成的。帧缓冲驱动的应用广泛,在 linux 的桌面系统中,Xwin转载 2013-11-06 18:54:53 · 5746 阅读 · 0 评论 -
设备驱动之一 - 基于第三章的组织结构改变的scull驱动
LDD3到第三章的组织结构改变的scull驱动scull.h文件---驱动头文件/********************************************** * Author: lewiyon@hotmail.com * File name: scull.h * Description: define scull * Date: 2012-07-4 *原创 2012-07-11 19:45:17 · 1227 阅读 · 0 评论 -
设备驱动之一 - proc文件系统接口
学习linux设备驱动,第四章; 关于proc文件系统接口编程参见 procfs读取信息实例:http://blog.csdn.net/iamonlyme/article/details/7062237 procfs读写信息实例:http://blog.csdn.net/iamonlyme/article/details/7065243本次修改的代码是原创 2012-07-14 00:18:04 · 1794 阅读 · 0 评论 -
Linux之父:不担心微软接管Linux
原文地址:https://www.zdnet.com/article/linus-torvalds-isnt-worried-about-microsoft-taking-over-linux/And you shouldn't be either. Every company wants to rule Linux -- none of them can or ever will.你...翻译 2019-10-13 13:59:38 · 753 阅读 · 0 评论 -
linux操作系统中对大小端的判断
static union { char c[4]; unsigned long l; } endian_test = { { 'l', '?', '?', 'b' } };#define ENDIANNESS ((char)endian_test.l)(如果ENDIANNESS=’l’表示系统为little endian,为’b’表示big endian原创 2013-08-04 19:38:12 · 1357 阅读 · 0 评论 -
[进程管理]Load和CPU利用率是如何算出来的
本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/system/how_to_calc_load_cpu.html相信很多人都对Linux中top命令里“load average”这一栏困惑过,到底什么是Load,Load代表了什么含义,Load高会有什么后果?“%C转载 2013-08-01 21:35:36 · 1383 阅读 · 0 评论 -
[进程管理]Linux进程状态解析之R、S、D
Linux是一个分时操作系统,能够在一个cpu上运行多个程序,每个被运行的程序实例对应一个或多个进程,这里介绍一下Linux进程状态。 Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态。 Linux进程状态:R (TASK_RUNNING),可执行状态。原创 2013-08-09 21:42:11 · 1678 阅读 · 0 评论 -
[进程管理] Linux中Load average的理解
Load average的定义系统平均负载被定义为在特定时间间隔内运行队列中的平均进程树。如果一个进程满足以下条件则其就会位于运行队列中:- 它没有在等待I/O操作的结果- 它没有主动进入等待状态(也就是没有调用'wait')- 没有被停止(例如:等待终止)load average如何计算为了使内核可以高效计算load average,采用了fixed-poin原创 2013-08-01 21:32:54 · 1085 阅读 · 0 评论 -
[进程管理]linux 下 进程和线程的区别(baidu 面试)
进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。转载 2013-08-02 23:05:49 · 2104 阅读 · 0 评论 -
[进程管理] 理解 Linux 的处理器负载均值
原文链接: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averageshttp://www.gracecode.com/posts/2973.html你可能对于 Linux 的负载均值(load averages)已有了充分的了解。负载均值在 uptime 或者 top 命令中可以看到,它们可能会翻译 2013-08-01 21:34:07 · 1081 阅读 · 0 评论 -
了解函数queue_delayed_work()
/********************************************** * Author: lewiyon@hotmail.com * File name: delay_wq.c * Description: learn the function queue_delayed_work() * Date: 2011-12-24 **************原创 2011-12-24 00:42:29 · 13736 阅读 · 0 评论 -
linux内核Makefile整体分析
转自:目录一、概述 1、本文的意义 2、Linux内核Makefile文件组成二、Linux内核Makefile的“make解析”过程 1 顶层Makefile阶段 1、从总目标uImage说起 2、vmlinux的生成 3、vmlinux-lds、vmlinux-init、vmlinux-main的转载 2014-04-24 15:30:54 · 1934 阅读 · 0 评论 -
进程调度原理
Linux Linux进程调度的目标 1.高效性:高效意味着在相同的时间下要完成更多的任务。调度程序会被频繁的执行,所以调度程序要尽可能的高效; 2.加强交互性能:在系统相当的负载下,也要保证系统的响应时间; 3.保证公平和避免饥渴; 4.SMP调度:调度程序必须支持多处理系统; 5.软实时调度:系统必须有效的调用实时进程转载 2016-04-09 23:16:53 · 950 阅读 · 0 评论 -
__read_mostly变量含义
1. 定义 __read_mostly原语将定义的变量为存放在.data.read_mostly段中,原型在include/asm/cache.h 中定义:#define __read_mostly __attribute__((__section__(".data.read_mostly"))) 2.原创 2013-10-31 21:51:41 · 3362 阅读 · 0 评论 -
linux内核 简化版kset-example.c解析
/********************************************** * Author: lewiyon@hotmail.com * File name: kset_sample.c * Description: kset example * Date: 2011-12-10 **************************************原创 2011-12-11 01:04:57 · 1839 阅读 · 1 评论 -
Linux的kobject机制
sysfs文件系统下的每个目录对应于一个kobj,kset是kobj的封装,内嵌了一个kobj,其代表kset自身,ktype代表属性操作集,但由于通用性,因此把ktype单独剥离出来,kobj,kset,ktype成为了各个驱动模型最底层的关联元素,并由此形成了sys下的各种拓扑结构。原创 2013-10-23 22:55:52 · 1460 阅读 · 0 评论 -
【专栏】Linux环境下用户空间与内核空间数据的交换方式
在linux环境开发过程中,经常会需要在用户空间和内核空间之间进行数据交换。介绍了 Linux 系统下用户空间与内核空间数据交换的几种方式 第一节:使用procfs实现内核交互简明教程 第二节:基于register_sysctl_table实现内核数据交互(Sysctl方式) 第三节:通过bootloader向内核传输启动参数原创 2012-11-24 22:28:08 · 888 阅读 · 0 评论 -
内存管理之伙伴算法
把所有的空闲页框分组为11个链表,每个链表分别包含数目1、2、4、8、16、32、64、128、256、512和1024个连续的页框。由此可见,伙伴算法支持的最大请求是对应4MB大小的连续物理RAM块。另外,还可以很容易的推测到——每个块的第一个页框的物理地址是该块大小的整数倍。举例来说:要分配256个连续页框(1MB),会先到256个页框的链表中查找空闲块,若有原创 2016-05-17 01:14:26 · 1318 阅读 · 0 评论 -
内存管理之slab分配器
基本思想 与传统的内存管理模式相比, slab 缓存分配器提供了很多优点。首先,内核通常依赖于对小对象的分配,它们会在系统生命周期内进行无数次分配。slab 缓存分配器通过对类似大小的对象进行缓存而提供这种功能,从而避免了常见的碎片问题。slab 分配器还支持通用对象的初始化,从而避免了为同一目而对一个对象重复进行初始化。最后,slab 分配器还可以支持硬件缓存对齐和着色,这允许原创 2016-05-18 07:39:53 · 619 阅读 · 0 评论 -
linux 内核链表练习
linux 内核链表使用案例:链表源码:test_list.c/********************************************** * Author: lewiyon@hotmail.com * File name: test_list.c * Description: test the macroes in the core.h * Date: 2原创 2012-01-02 23:39:37 · 1275 阅读 · 0 评论 -
[进程管理] linux核心调度器
linux核心调度器主要基于两个函数实现:周期性调度器函数和主调度器函数。这些函数会根据现有进程的优先级分配CPU时间,所以也称“优先调度” 一、周期性调度器 周期性调度器是在函数scheduler_tick(void),如果当前系统正在活动中,那么内核会按照CPU频率HZ自动调用该函数。如果运行队列中没有进程,则等待;如果电力不足,也会关闭该调度器以减少电能原创 2011-12-27 23:37:03 · 2624 阅读 · 0 评论 -
[进程管理]Linux进程状态解析之T、Z、X
Linux进程状态:T (TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态。 向进程发送一个SIGSTOP信号,它就会因响应该信号而进入TASK_STOPPED状态(除非该进程本身处于TASK_UNINTERRUPTIBLE状态而不响应信号)。(SIGSTOP与SIGKILL信号一样,是非常强制的。不允许用户进程通过signal系列的系统调用重新原创 2013-08-09 21:45:59 · 1299 阅读 · 0 评论 -
Linux系统OOM killer机制详解
介绍:Linux下面有个特性叫OOM killer(Out Of Memory killer),会在系统内存耗尽的情况下出现,选择性的干掉一些进程以求释放一些内存。广大从事Linux方面的IT农民工兄弟或多或少都有遇到过吧。现象:主机SSH突然无法连接,主机重启要过很久,重启后主机正常,登录查看日志信息,会有大量的 " Out of Memory: Killed proce原创 2013-08-01 21:27:49 · 4153 阅读 · 0 评论 -
内核中自带的内存调试方法CONFIG_DEBUG_SLAB
CONFIG_DEBUG_SLAB, 这是非常重要的选项,选中它则打开内核内存分配函数中的多个类型的检查; 打开该检查后,就可以检测许多内存溢出及忘记初始化的错误,在将已分配内存返回给调用者之前,内核会把其中的每个字节设置为0Xa5,而在释放后将其设置为0X6b。 如果内核开发者在自己的程序输出中或者oops信息中看到上述字符“毒剂”字符,则可以轻松判断出原创 2012-07-07 14:06:02 · 5064 阅读 · 0 评论 -
slab分配器 - 实例用法
slab分配器 - 实例用法 其原理此处不再赘述,请参看:http://www.ibm.com/developerworks/cn/linux/l-linux-slab-allocator/1. 定义一个 kmem_cache 对象,然后对其进行初始化static struct kmem_cache *sample_cachep;static void init_sample原创 2012-07-29 16:42:36 · 1667 阅读 · 0 评论 -
Linux环境下用户空间与内核空间数据的交换方式
在linux环境开发过程中,经常会需要在用户空间和内核空间之间进行数据交换。介绍了 Linux 系统下用户空间与内核空间数据交换的几种方式 第一节:使用procfs实现内核交互简明教程(1) 第二节:使用procfs实现内核交互简明教程(2) 第三节:基于register_sysctl_table实现内核数据交互(Sysctl方式) 第四节:通过bootload原创 2013-09-05 23:09:10 · 1507 阅读 · 0 评论