Linux内核_学习笔记
文章平均质量分 86
yiyeguzhou100
专注,探索,分享
展开
-
x86 HT 与 pause 指令
Spinlock在不同的操作系统中的实现方式是不同的,不过大体原理是类似的,那就是自旋。以X86 CPU为例,一般来说某次获取轻量级锁的尝试失败后,LINUX会采用PAUSE命令等待10-数百个时钟周期再去重试,而在UNIX系统中,一个CPU时间片的长度为10毫秒,在这10毫秒中已经完全可以完成多个PAUSE等待了。主频为3.0Ghz的CPU,一个时钟周期大约是0.3纳秒,内存访问大约需要120纳秒,固态硬盘访问大约是50~150微秒,机械硬盘访问大约是1~10毫秒,网络访问最慢,大约需要几十个毫秒。原创 2024-05-02 23:13:11 · 343 阅读 · 2 评论 -
从内核文件系统看文件读写过程
http://www.cnblogs.com/huxiao-tee/p/4657851.html#_label2阅读目录系统调用虚拟文件系统I/O 缓冲区Page CacheAddress Space文件读写基本流程回到顶部系统调用操作系统的主要功能是为管理硬件资源和为应用程序开发人员提供良好的环境,但是计算机系统的各种硬件资源是转载 2017-06-04 18:26:36 · 431 阅读 · 0 评论 -
SYSFS以及设备文件或kobject目录创建的关系
sysfs_create_group()定义的文件 kernel/fs/sysfs/group.c: [html] view plain copystatic int internal_create_group(struct kobject *kobj, int update, const struct a转载 2017-05-08 16:31:39 · 559 阅读 · 0 评论 -
ioctl的命令cmd构造详解
http://blog.csdn.net/heli200482128/article/details/53196796http://blog.csdn.net/leechar_linux/article/details/39545235在嵌入式中经常碰到魔数,比如:#define PLATDRV_MAGIC 0X60#define LED_OFF _IO(PLATDRV_MA转载 2017-05-22 10:53:06 · 1255 阅读 · 0 评论 -
关于设备号的思考
这是最后的运行流程,用户open设备节点,通过主设备号找到驱动程序,根据次设备号找到对应的设备,使用驱动函数中的read(),write()等函数操作设备。为了搭建这样的运行时环境,需要做如下工作:1 驱动程序加载(申请主设备号,在/proc/devices下创建设备)2 根据具体设备创建设备节点 (查询合适的主设备号和可用的次设备号 在/dev下面创建设备节点)先转载 2017-05-23 15:44:26 · 315 阅读 · 0 评论 -
/sysfs探索_store和show的接口
http://blog.sina.com.cn/s/blog_78d30f6b0102uy3t.html简单分析:1 本样例主要测试kobject结构,kobject对应sysfs文件系统中的一个目录,该目录对应一个具体的事物。2 首先通过example_kobj = kobject_create_and_add("kobject_example", kernel_kobj);转载 2017-04-28 18:34:28 · 4879 阅读 · 1 评论 -
Linux 设备驱动开发 — platform 设备驱动
http://blog.csdn.net/zqixiao_09/article/details/50865480一、platform总线、设备与驱动 在Linux 2.6 的设备驱动模型中,关心总线、设备和驱动3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成转载 2017-04-29 18:24:08 · 391 阅读 · 0 评论 -
UNIX环境高级编程—存储映射IO(mmap函数)
http://blog.csdn.net/ctthuangcheng/article/details/9278107共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据: 一次从输入文件到共享内存区,另一次从共享内存区到输出文件。实转载 2017-06-04 19:13:15 · 527 阅读 · 0 评论 -
Linux设备模型(4)_sysfs
1. 前言sysfs是一个基于RAM的文件系统,它和Kobject一起,可以将Kernel的数据结构导出到用户空间,以文件目录结构的形式,提供对这些数据结构(以及数据结构的属性)的访问支持。sysfs具备文件系统的所有属性,而本文主要侧重其设备模型的特性,因此不会涉及过多的文件系统实现细节,而只介绍sysfs在Linux设备模型中的作用和使用方法。具体包括:sysfs和Ko转载 2017-05-08 17:00:22 · 290 阅读 · 0 评论 -
设备模型之kobject,kset及其关系
http://blog.chinaunix.net/uid-24227137-id-3266449.htmlLinux2.6以后的设备驱动,都是在设备模型的基础上构建的,因此,要编写linux下的设备驱动程序,不论是usb设备,pci设备等,都需要了解设备模型。设备模型的基础结构体主要是kobject,kset这两个结构体:struct kobject {转载 2017-05-24 17:16:01 · 374 阅读 · 0 评论 -
Linux设备模型之device_add
0.前言Linux设备模型是学习linux驱动的很重要的内容。了解这些知识,对于学习linux设备驱动有很大的帮助。 linux设备类型的内容还是比较多的,这里就重点说明device_add函数的流程。1.总体框架linux设备模型:设备device,驱动driver,总线bus。设备代表物理设备,驱动代表了设备操作方法,bus则是用来管理和匹配它们。device和driv转载 2017-05-23 11:13:17 · 6785 阅读 · 0 评论 -
设备模型的uevent机制
http://www.cnblogs.com/black-mamba/p/5055683.html内核模块的热插拔事件的通知基于uevent机制。当kobject的状态发生改变(如,add, remove等)时,会通知用户空间,用户空间接收到事件通知后可以做相应的处理。uevent把事件上报给用户空间的两种途径: 1.通过kmod模块,直接调用用户空间的可执行程序或脚转载 2017-05-24 10:28:40 · 965 阅读 · 0 评论 -
设备与驱动的关系以及设备号、设备文件
Linux设备分类Linux下的设备通常分为三类,字符设备,块设备和网络设备。字符设备一个字符设备是一种字节流设备,对设备的存取只能按顺序按字节的存取而不能随机访问,字符设备没有请求缓冲区,所有的访问请求都是按顺序执行的。Linux下的大多设备都是字符设备。应用程序是通过字符设备节点来访问字符设备的。设备节点一般都由mknod命令都创建在/dev目录下,下面的例子显示了串口设备转载 2016-12-08 22:49:41 · 1070 阅读 · 0 评论 -
Linux内核部件分析-设备驱动模型之device
http://www.linuxidc.com/Linux/2011-10/44627p6.htmlinux的设备驱动模型,是建立在sysfs和kobject之上的,由总线、设备、驱动、类所组成的关系结构。从本节开始,我们将对linux这一设备驱动模型进行深入分析。 头文件是include/linux/device.h,实现在drivers/base目录中。本节要分析的,是其中转载 2017-05-28 22:26:36 · 557 阅读 · 0 评论 -
dev_set_drvdata, dev_get_drvdata machanism
example:static intvrha_fpga_dtb_probe(struct vrha_device *vdev)//tianxianting, vrha_device* already created by function "vrha_device_create", so if matched//pass vrha_device* to this probe原创 2017-05-09 14:56:50 · 1054 阅读 · 0 评论 -
linux下热插拔事件的产生是怎样通知到用户空间,kobject_uevent_env之uevent_helper
本人CU博客中的文章,本来是希望CU给推荐到首页的,结果周五不知道CU博客出了啥问题,居然没什么更新。所以我干脆把再把它放到这里,因为话题涉及设备驱动模块自动加载,本版已经有同学问过这方面的问题。热插拔(hotplug,打这个词的时候我常常想到热干面)不一定非要指类似U盘那样的插入拔出,此处的热插拔广义上讲,是指一个设备加入系统,内核如何通知用户空间。举个简单的例子,如果你的电脑中有块PC转载 2017-05-23 11:18:35 · 743 阅读 · 0 评论 -
使用 /sys 文件系统访问 Linux 内核
https://www.ibm.com/developerworks/cn/linux/l-cn-sysfs/sysfs 虚拟文件系统提供了一种比 proc 更为理想的访问内核数据的途径sysfs 是 Linux 内核中设计较新的一种虚拟的基于内存的文件系统,它的作用与 proc 有些类似,但除了与 proc 相同的具有查看和设定内核参数功能之外,还有为转载 2017-04-29 17:09:29 · 926 阅读 · 0 评论 -
Linux 理解devfs、sysfs、udev
http://blog.csdn.net/linuxheik/article/details/8459061linux下有专门的文件系统用来对设备进行管理,devfs和sysfs就是其中两种。一、devfs devfs是在2.4内核就出现了,它是用来解决linux中设备管理混乱的问题,你查看一下/dev下的设备文件就知道其中有许多是空的(也就是没有对应的硬件的),但是转载 2017-05-26 10:42:22 · 941 阅读 · 0 评论 -
dtb to dts by dtc
1,DTC(Device tree compiler)是一个小工具,负责将DTS转换成DTB(Device tree blob)。DTB是DTS的二进制形式,供机器使用。使用中,我们首先根据硬件修改DTS文件,然后在编译的时候通过DTC工具将DTS文件转换成DTB文件,然后将DTB文件烧写到机器上(如emmc,磁盘等存储介质)。系统启动时,fastboot(或者类似的启动程序,如Uboot)在原创 2017-05-08 10:53:00 · 2044 阅读 · 0 评论 -
linux设备模型bus,device,driver
在看基于platform总线的设备驱动时,总理不清三者之间的关系,后来通过看国嵌的视频教程, 到bus,device,driver,才对linux的设备模型有了一个更深入的了解。于是,便在开发板上,测试了一下,在此,把学过的东西,做下总结。 linux2.6提供了新的设备模型:总线、驱动、设备。基本关系简要的概括如下:驱动核心可以注册多种类型的总线。每种总线下面可以挂载许多设备。(通转载 2015-07-11 22:17:33 · 766 阅读 · 0 评论 -
个人对kobject的一点研究
在LINUX中最让人不解的大概就是/sys下面的内容了下面首先让我们来创建一个简单的platform设备,并从这个设备的视角进行深入,在此篇文章的深入过程中,我们只看kobeject的模型我所使用的内核版本号为2.6.26,操作系统的内核版本号为2.6.27-7,暂未发现2.6.27-7与2.6.26的重大不同首先写一个简单的模块#include #include转载 2017-04-29 13:11:11 · 600 阅读 · 0 评论 -
/proc/modules, /proc/devices, /dev
http://blog.csdn.NET/ghostyu/article/details/8085163http://www.cnblogs.com/wanghetao/archive/2012/06/02/2532183.htmlhttp://blog.chinaunix.Net/uid-10386087-id-2958866.html/proc/modules :模块加载列转载 2016-12-09 22:29:48 · 1141 阅读 · 0 评论 -
Linux 设备驱动开发 — platform设备驱动应用实例解析
http://blog.csdn.net/zqixiao_09/article/details/50888795前面我们已经学习了platform设备的理论知识Linux 设备驱动开发 —— platform 设备驱动 ,下面将通过一个实例来深入我们的学习。 一、platform 驱动的工作过程 platform模型驱动编程,需要实现p转载 2017-04-27 22:07:26 · 442 阅读 · 0 评论 -
system:udev原理分析
http://blog.csdn.net/linuxheik/article/details/8459098一.udev简介在Linux系统中,/dev目录用来保存设备文件的.每个文件指向一个系统设备.用户的程序可以通过使用这些设备文件, 对真实的硬件的设备进行操作.如: hda是第1个IDE硬盘,sda是第1个SCSI硬盘. 在2.4内核时代, 在/dev下保存了所有ke转载 2017-05-25 17:55:39 · 1576 阅读 · 0 评论 -
Linux设备模型(2)_Kobject
1. 前言Kobject是Linux设备模型的基础,也是设备模型中最难理解的一部分(可参考Documentation/kobject.txt的表述)。因此有必要先把它分析清楚。2. 基本概念由“Linux设备模型(1)_基本概念”可知,Linux设备模型的核心是使用Bus、Class、Device、Driver四个核心数据结构,将大量的、不同功能的硬件设备(以及驱动该硬件设备的转载 2017-05-08 17:17:37 · 362 阅读 · 0 评论 -
sysfs API总结
sysfs是用于表现设备驱动模型的文件系统,它基于ramfs。要学习Linux的设备驱动模型,就要先做好底层工作,总结sysfs提供给外界的API就是其中之一。sysfs文件系统中提供了四类文件的创建与管理,分别是目录、普通文件、软链接文件、二进制文件。目录层次往往代表着设备驱动模型的结构,软链接文件则代表着不同部分间的关系。比如某个设备的目录只出现在/sys/devices下,其它地方涉及到它时转载 2017-05-08 16:35:30 · 381 阅读 · 0 评论 -
linux内核mem_cgroup浅析
http://blog.csdn.net/ctthuangcheng/article/details/8916075memory cgroupmem_cgroup是cgroup体系中提供的用于memory隔离的功能。admin可以创建若干个mem_cgroup,形成一个树型结构。可以将进程加入到这些mem_cgroup中。(类似这样的管理功能都是由cgroup框架自带的。)转载 2018-01-03 17:27:55 · 3185 阅读 · 0 评论 -
Linux进程组调度机制分析
http://oenhan.com/task-group-sched又碰到一个神奇的进程调度问题,在系统重启过程中,发现系统挂住了,过了30s后才重新复位,真正系统复位的原因是硬件看门狗重启的系统,而非原来正常的reboot流程。硬件狗记录的复位时间,将不喂狗的时间向前推30s分析串口记录日志,当时的日志就打印了一句话:“sched: RT throttling activated转载 2017-12-19 17:43:42 · 776 阅读 · 0 评论 -
lxc与host的coredump配置
core dump configuration for host and lxc containera, put this file in host's filesystem: /usr/bin/ /usr/bin/corecompress.sh: #!/bin/bash set -o noclobber LX原创 2017-12-06 10:45:16 · 620 阅读 · 0 评论 -
Linux kernel是如何执行组调度的
Linux系统主调度函数,当执行到该函数时,从当前cpu的rq队列中选择一个task投入运行:static void __sched__schedule(void) {struct task_struct *prev, *next;...rq = cpu_rq(cpu);...put_prev_task(rq, prev);...ne原创 2017-12-21 14:57:15 · 1266 阅读 · 0 评论 -
lxc 配置参数详解
Create and start “lxc-example” by lxctool(version:2.0.9), it generatesseveral subsystems, we mainly focus on the configuration of below threesubsystem:/sys/fs/cgroup/cpu/lxc/lxc-example/…/sys/fs/原创 2017-12-01 14:09:42 · 1818 阅读 · 0 评论 -
Don't Let Linux Control Groups Run Uncontrolled - 深度好文
https://engineering.linkedin.com/blog/2016/08/don_t-let-linux-control-groups-uncontrolledCoauthors: Cuong Tran and Jerry WengSummaryThe Linux kernel feature of cgroups (Control G转载 2017-12-03 21:17:25 · 641 阅读 · 0 评论 -
什么时候需要cpu_relax()锁
在典型的超线程处理器中,每个超线程不是一个独立的core,所以两个或者多个超线程之间仍然在竞争一些资源,如果其中一个人调用了yield,那么它会在争抢中放慢节奏,而旁边的那个兄弟会抢地更多。2, 如果是超线程CPU的机器,可以让渡CPU给其他的线程;当然,cpu_relax()的具体实现与体系架构相关,不同的体系架构实现不一样,可能只完成了上面3个功能中的1个,2个而不是全部。总之,不管具体的体系架构怎么实现,忙等里面都适合加cpu_relax(),毕竟内核多数的代码要求是跨平台的。转载 2023-07-21 17:42:57 · 1075 阅读 · 0 评论 -
x86 LOCK 指令前缀
在中的章节中给出LOCK指令的详细解释LOCK是一个指令前缀,也就是说LOCK会使紧跟在其后面的指令变成原子指令(atomic instruction)。LOCK指令前缀只能加在以下这些指令前面。转载 2023-06-16 23:54:13 · 1887 阅读 · 0 评论 -
Architectural and OS support for Virtual Memory
Architectural and OS support for Virtual Memory转载 2022-10-29 22:03:13 · 601 阅读 · 0 评论 -
How sched_setaffinity/migration works inside of Linux Kernel
https://www.systutorials.com/sched_setaffinity-works-inside-of-linux-kernel/https://www.systutorials.com/migration-thread-works-inside-linux-kernel/转载 2020-12-25 11:10:40 · 135 阅读 · 0 评论 -
内核完成变量completion的原理
一结构体变量定义: 25 struct completion { 26 unsigned int done; //决定进程是否睡眠等待 27 wait_queue_head_t wait; //进程在此睡眠等待 28 }; 二相关函数: 睡眠等待:91 extern void wait_for_completion(struct completion *);92 extern void wait_for_completion_...转载 2020-08-07 23:59:11 · 1534 阅读 · 0 评论 -
从今天开始研究Linux内核,day by day坚持下去 -- “什么时候开始都不算晚,晚的是你总是不敢开始”
http://wenku.baidu.com/view/8a07a509f78a6529647d53fa.html?re=view原创 2015-08-14 22:58:40 · 496 阅读 · 0 评论 -
current宏的作用
http://blog.chinaunix.net/uid-20648784-id-1592770.html 在2.6的内核上允许内核栈的大小在4K和8K之间选择,于是,根据内核的配置,在thread_info.h中,加入了下面的一段代码#ifdef CONFIG_4KSTACKS#define THREAD_SIZE (4096)#else#defi转载 2015-08-25 14:04:31 · 511 阅读 · 0 评论 -
搜集的一些task_struct结构示意图
原创 2015-08-26 16:00:15 · 614 阅读 · 0 评论