
Linux内核
文章平均质量分 81
Linux内核
小馋喵星人
这个作者很懒,什么都没留下…
展开
-
BAT脚本与ADB命令
根据同事的一个需求,写了一个bat脚本,作用为实施读取MTK手机CPU 频率,内容如下:@ECHO OFFcolor 2fECHO ※※※※※※※※※※※※※※※※※※※※ECHO ※ made by lihaiyan@wind-mobi.com ※ECHO ※ date: 2015/10/29 ※ECHO ※※※※※※※※※※※※※※※...原创 2015-10-30 09:45:00 · 1192 阅读 · 0 评论 -
linux中bootable和kernel中子目录的作用
bootable lk app 系统启动时会运行的一些应用程序(比如说时钟测试、写nand、pci测试、shell、点灯、打印字符串等操作) arch 核心源代码所支持的硬件体系结构体相关的核心代码 dev 一些安卓设备 (按键,us...原创 2015-07-24 16:41:00 · 480 阅读 · 0 评论 -
修改了devices目录下的te文件如何编译
使用命令如下:mmm external/sepolicy make bootimage下载boot.img就可以了 分析:使用 mmm external/sepolicy 编译成功后 会将编译文件打包在ramdisk压缩包下,bootimage是由out目录下的kernel 和 ramdisk 相加打包来的。make bootimage 就是将kernel...原创 2015-11-12 21:00:00 · 2534 阅读 · 0 评论 -
git自学常用命令
git自学笔记软件一部 李海沿 2015-07-23 17:001.配置git仓库git config --global user.name "lihaiyan"git config --global user.email "1063385677@qq.com"git config 参数 表示对机器上所有的git仓库都会使用这个配置。2.增加当前目录为git管理的仓库git ...原创 2015-07-24 09:42:00 · 421 阅读 · 0 评论 -
Linux进程的管理与调度(六)--- Linux下0号进程换前世(init_task进程)今生(idle进程)
Linux进程的管理与调度(六)--- Linux下0号进程换前世(init_task进程)今生(idle进程)一、Idle 的创建1.1 0号进程上下文信息 --- init_task描述符1.2 进程堆栈 init_thread_union1.3 进程内存空间二、0号进程的演化2.1 rest_init 创建 init 进程(PID =1)和 kthreadd 进程(PID=2)2.2 创建kernel_init2.3 创建kthreadd2.4 0号进程演变为idle三、idle的运行与调度3.1 i转载 2020-08-17 15:19:30 · 646 阅读 · 0 评论 -
Linux进程的管理与调度(五)--- Linux下的进程类别(内核线程、轻量级进程和用户进程)以及其创建方式
Linux进程的管理与调度(五)--- Linux下的进程类别(内核线程、轻量级进程和用户进程)以及其创建方式一、Linux进程类别1.1 进程与线程1.2 内核线程二、linux进程的创建流程2.1 进程的复制fork和加载execve2.2 写时复制技术三、不同操作系统线程的实现机制3.1 专门线程支持的系统-LWP机制3.2 Linux下线程的实现机制3.3 实现机制的区别3.4 内核线程3.5 内核线程与普通进程的异同3.6 内核线程创建3.6.1 kernel_thread3.6.2 kthrea转载 2020-08-14 10:46:11 · 333 阅读 · 0 评论 -
Linux进程的管理与调度(三)--- Linux进程ID号
Linux进程的管理与调度(三)--- Linux进程ID号一、进程ID概述1.1 进程ID类型(1) PID 内核唯一区分每个进程的标识Linux 内核使用 task_struct 数据结构来关联所有与进程有关的数据和结构,Linux 内核所有涉及到进程和程序的所有算法都是围绕该数据结构建立的,是内核中最重要的数据结构之一。该数据结构在内核文件include/linux/sched.h中定义,本篇文章只关注该数据结构如何来组织和管理进程ID的。一、进程ID概述1.1 进程ID类型要想了解内转载 2020-08-13 17:16:16 · 907 阅读 · 0 评论 -
Linux进程的管理与调度(二)--- Linux的命名空间 namespace 详解
Linux进程的管理与调度(二)--- Linux的命名空间 namespaces 详解Linux NameSpaces 机制提供了一种资源隔离方案。PID,IPC,Network 等系统资源不再是全局性的,而是属于特定的Namespace,每个Namespace 里面的资源对其他的Namespace 都是透明的。要创建新的 Namespace,只需要在调用 clone 时指定相应的flag。Linux Namespace 机制为实现基于容器的虚拟化技术提供了很好的基础,LXC(Linux C转载 2020-08-11 15:37:28 · 1530 阅读 · 0 评论 -
Linux进程的管理与调度(一)--- Linux进程描述符task_struct结构体详解
Linux进程的管理与调度(一)--- Linux进程描述符task_struct结构体详解一、进程状态1.1 五个进程状态1.2 两个终止状态1.3 睡眠状态1.3.1 内核如何将进程置为睡眠状态1.3.2 新的睡眠状态 TASK_KILLABLE1.3.2.1 使用TASK_KILLABLE的新内核 API1.3.2.2 完成机制二、进程标识符(PID)三、进程内核栈3.1 内核栈与线程描述符3.2 内核栈数据结构描述thread_info和thread_union3.3 获取当前在CPU上正在运行进程转载 2020-08-10 17:05:13 · 730 阅读 · 0 评论 -
【Linux 内核知识梳理 12】内存的分类
【Linux 内核知识梳理 12】内存的分类一、SDRAM二、SDRAM三、DRAM四、DDR五、DDR2六、它们之间的区别一、SDRAMSDRAM(Synchronous Dynamic Random Access Memory),同步动态随机存储器,同步是指 Memory工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写。SDRAM的一些参数:(1)容量。SDRAM的容量转载 2020-08-07 11:14:07 · 419 阅读 · 0 评论 -
【Linux 内核知识梳理 11】Linux内存寻址之分页机制
【Linux 内核知识梳理 11】Linux内存寻址之分页机制一、硬件中的分页1、为什么使用两级页表2、两级页表结构3、页目录项4、页面项5、线性地址到物理地址的转换6、扩展分页7、页面高速缓存8、页面高速缓存9、总结在前面《 【Linux 内核知识梳理 10】Linux内存寻址之分段机制》 中我们介绍了Linux 的分段机制,了解到逻辑地址是通过分段机制来转换为线性地址的,接下来我们来看下分页地址,为完成线性地址— 物理地址的转换过程。段机制把逻辑地址转换为线性地址,分页机制进一步把该线性地址再转转载 2020-08-07 10:44:11 · 462 阅读 · 0 评论 -
【Linux 内核知识梳理 10】Linux内存寻址之分段机制
【Linux 内核知识梳理 10】Linux内存寻址之分段机制及分页机制一、分段的由来1、实模式的诞生(16位处理器及寻址)一、分段的由来相信学过操作系统课程的人都知道分段分页,但是奇怪的是书上基本没提分段分页是怎么产生的,这就导致我们知其然不知其所以然。下面我们先扒一下分段机制产生的历史。1、实模式的诞生(16位处理器及寻址)在8086处理器诞生之前,内存寻址方式就是直接访问物理地址。本文学自:《Linux内存寻址之分段机制及分页机制》...转载 2020-08-07 10:09:02 · 438 阅读 · 0 评论 -
【Linux 内核知识梳理 9】Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析
【Linux 内核知识梳理 9】Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析一、智能指针背景知识二、轻量级指针三、轻量级指针的用法Android 系统的运行时库层代码是用C++ 来编写的,用C++ 来写代码最容易出错的地方就是指针了,一旦使用不当,轻则造成内存池漏,重则造成系统崩测。不过系统为我们提供了智能指针,避免出现上述问题,本文将系统的分析Androi 系统智能指针(轻量指针、强指针和弱指针)的实现原理。一、智能指针背景知识在使用C++来编写代码的过程中,指针使转载 2020-08-03 10:51:49 · 516 阅读 · 0 评论 -
【Linux 内核知识梳理 8】MMU的工作原理
【Linux 内核知识梳理 8】MMU的工作原理一、MMU的产生1、虚拟存储器(Virtual Memory)二、MMU的工作过程一、MMU的产生许多年以前,当人们还在使用DOS 或者更古老的操作系统的时候,计算机的内存还非常小,一般都是以K 为单位进行计算的,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界在的兴起,用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大,以至于内存容纳不下该程序。通常解决的办法是转载 2020-07-31 14:56:42 · 1733 阅读 · 0 评论 -
【Linux 内核知识梳理 7】Android Binder 驱动㳀析
【Linux 内核知识梳理 7】Android Binder 驱动㳀析一、Binder 学习思路二、基础知识理解三、ServiceManager四、Binder 驱动启动过程4.1 打开Binder 驱动4.2 内存映射4.3 动作执行者五、Binder与共享内存之间的区别六、Binder的实现架构七、Binder驱动7.1 Binder在Client中的表述7.2 Binder在驱动中的表述7.3 Server端Binder实体对象的内存地址7.4 Binder引用(Client端)在驱动中的表述八、Bi转载 2020-07-30 13:52:21 · 753 阅读 · 0 评论 -
【Linux 内核知识梳理 6】Linux 中的冷热页面
在CPU 访问内存时,因于这个操作比较慢,为了加快速度,根据本地性原则,CPU在访问主内存时的时候会把附近的一块数据都加载到CPU 的Cache 里,之后读这与这块数据都是在Cache 里做。Linux 本来有伙伴系统分配内存页,为了加快单个内存页的分配,Linux 在每个 inode 里 为每个CPU 分配了一个per_cpu_pageset (暂且叫页缓存吧)。每个 页缓存包含一个冷页缓存 和 一个热页缓存。如果申请完一个内存页就立即用来写数据,用热页缓存。如果申请完一个内存页,暂时用不转载 2020-07-30 11:04:47 · 562 阅读 · 0 评论 -
【Linux 内核知识梳理 5】什么是TLB
【Linux 内核知识梳理 5】什么是TLB1、TLB 种类2、TLB的联合方式3、CPU - TLB - CacheTLB:Translation Lookaside Buffer。根据功能可以译为快表,直译可以翻译为旁路转换缓冲,也可以把它理解为页表缓冲。里面存放的是一些页表文件(虚拟地址 到 物理地址转换表)。当处理器要在主内存寻址时,不是直接在内存的物理地址里查找的,而是通过一组虚拟地址转换到主内存的物理地址,TLB就是负责将虚拟内存地址翻译成实际的物理内存地址,而CPU寻址时会优先转载 2020-07-30 10:53:30 · 1237 阅读 · 0 评论 -
【Linux 内核知识梳理 4】Page Cache与 Page 回写
【Linux 内核知识梳理 4】Page Cache与 Page 回写1. Page Cache2. 读 Cache3. 写Cache4. Cache回收5. LRU算法6. Two-List策略7. Page Cache在Linux中的具体实现7.1 address_space结构7.2 address_space操作函数8. Buffer Cache9. Flusher线程群(Flusher Threads)Page Cache 是通过将磁盘中的数据缓存到内存中,从而减少磁盘I/O 操作,从而提高性能转载 2020-07-29 17:51:05 · 624 阅读 · 0 评论 -
【Linux 内核知识梳理 3】Linux Page Cache和 Buffer Cache
Page Cache 实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会缓存到 Page Cache。文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成。当 page cache 的数据需要刷新时,page cache 中的数据交给 buffer cache ,但这种处理在 2.6 版本的内核 之后就变得很简单了,没有真正意义上的cache 操作。buffer cache 是针对磁盘块的缓存也就是在没有文件系统的情况下,直接对磁盘进行操作的数据会缓存到 buffer ..转载 2020-07-29 16:33:28 · 448 阅读 · 0 评论 -
【Linux 内核知识梳理 2】深入理解 Cache
【Linux 内核知识梳理 2】深入理解 Cache一、存储器的分层二、Cache 的组成一、存储器的分层存储器是分层次的,离CPU越近的存储器,速度越快,每字节的成本越高,同时容量也因些越小。寄存器速度最快,离CPU 最近,成本是最高,所以个数容量有限,其次是高速缓存(缓存也是分级的,有 L1, L2 等缓存),再次是主存(普通内存),再次是本地磁盘。寄存器的速度最快,可以在一个时钟周期内访问,其次是高速缓存,可以存几个时钟周期内访问,普通内存可以在几十个或几百个时钟周期内访问。存储器分级转载 2020-07-29 15:18:36 · 942 阅读 · 0 评论 -
【Linux 内核知识梳理 1】Cache 和 Buffer 的区别
一、Cache 和 BufferCache 是为了弥补高速设备 和 低速设备的鸿沟而引入的中间层,最终起到加快访问速度的作用。Buffer 的主要目的是进行流量整形,把突发的大数量较小规模的I/O 整理成平稳的小数量较大的规则的I/O,以减少响应次数。(如网上下载电影,不能下一点点就写一下硬盘,而是积攒一定量的数据以后一整块一起写,不然会影响硬盘寿命)。Buffer(缓冲区) 是系统两端处理速度平衡(从长时间尺度上看)时使用的。它的引入是为了减小短期内突发I/O 的影响,起到流量整形的作用转载 2020-07-28 16:42:39 · 523 阅读 · 0 评论 -
《Linux内核 学习笔记》--- 第二章 内存管理 2.9 mmap
《Linux内核 学习笔记》--- 第二章 内存管理2.9 mmap 概述问题1:请阅读Linux内核中mmap相关代码,找出第二次调用mmap会成功的原因?问题2:在一个播放系统中同时打开几十个不同的高清视频文件,发现播放有些卡顿,打开视频文件是用mmap函数,请简单分析原因。2.9 mmap 概述mmap/munmap接口是用户空间最常用的一个系统调用接口,无论是在用户程序中分配内存、...原创 2020-03-24 17:42:48 · 603 阅读 · 0 评论 -
《Linux内核 学习笔记》--- 第二章 内存管理 2.6 vmalloc & 2.7 VMA & 2.8 malloc
kmalloc、vmalloc和malloc这3个常用的API函数具有相当的分量,三者看上去很相似,但在实现上可大有讲究。kmalloc基于slab分配器,slab缓冲区建立在一个连续物理地址的大块内存之上,所以其缓存对象也是物理地址连续的。如果在内核中不需要连续的物理地址,而仅仅需要内核空间里连续虚拟地址的内存块,该如何处理呢? 这时vmalloc()就派上用场了。vmlloc()函数声...原创 2020-03-24 16:48:07 · 659 阅读 · 0 评论 -
《Linux内核 学习笔记》--- 第二章 内存管理 2.5 slab分配器
伙伴系统用于分配内存时是以page为单位的,在实际中有很多内存需求是以Byte为单位的,那么如果我们需要分配以Byte为单位的小内存块时,该如何分配呢?slab分配器就是用来解决小内存块分配问题的,也是内存分配中非常重要的角色之一。slab分配器最终还是由伙伴系统来分配出实际的物理页面,只不过slab分配器在这些连续的物理页面上实现了自己的算法,以此来对小内存块进行管理。slab分配器提供如...原创 2020-03-24 13:24:19 · 452 阅读 · 0 评论 -
《Linux内核 学习笔记》--- 第二章 内存管理 2.3 内核内存布局图
第二章 2.3 内核内存布局图2.3.1 ARM32内核内存布局图2.3.2 ARM64内核内存布局图2.3.1 ARM32内核内存布局图Linux内核在启动时会打印出内核内存空间的布局图.编译器在编译目标文件并且链接完成之后,就可以知道内核映像文件最终的大小,接下来打包成二进制文件,该操作由arch/arm/kernel/vmlinux.ld.S控制,其中也划定了内核的内存布局。\ke...原创 2020-03-23 16:49:20 · 664 阅读 · 0 评论 -
《Linux内核 学习笔记》--- 第二章 内存管理 2.1 物理内存初始化
《Linux内核 学习笔记》--- 第二章 内存管理2.1 物理内存初始化2.1.1 内存管理概述2.1.2 内存大小2.1.3 物理内存映射2.1.4 zone初始化Linux 内存 zone 布局2.1.5 空间划分2.1 物理内存初始化从硬件角度来看内存,随机存储器(Random Access Memory, RAM)是与CPU直接交换数据的内部存储器。现在大部分计算机都使用DDR(...原创 2020-03-20 11:54:21 · 1165 阅读 · 0 评论 -
《Linux内核 学习笔记》--- 第一章 处理器体系结构
《奔跑吧-Linux内核》--- 第一章 处理器体系结构1.ARM 指令集介绍2.请简述精简指令集RISC和复杂指令集CISC的区别3.请简述数值0x12345678在大小端字节序处理器的存储器中的存储方式。1.ARM 指令集介绍兼容ARMv4指令集的处理器架构有ARM7-TDMI,典型处理器是三星的S3C44B0X。兼容ARMv5指令集的处理器架构有ARM920T,典型处理器是三星的S3...原创 2020-03-18 18:21:48 · 1404 阅读 · 0 评论 -
《奔跑吧-Linux内核》--- 不服,来跑个分吧
如没有特殊说明,本奔跑卷基于Linux 4.0内核和ARM32/ARM64体系架构。请简述在你所熟悉的处理器中(比如双核\2ortex-A9)一条存储读写指令的执行全过程。在一个32KB的4路组相联的cache中,其中cache line为32Byte,请画出这个cache组相联的结构图。内核的一级页表和二级页表存放在什么地方?用户进程的一级页表和二级页表分别存放在什么地方?...原创 2020-03-18 17:44:36 · 737 阅读 · 0 评论 -
【Linux内核】---- 03 安装文件系统
【Linux内核】---- 03 安装文件系统3.1 从硬盘上获取hello.txt 文件的 i 节点3.1 从硬盘上获取hello.txt 文件的 i 节点在文件系统中,每个文件都对应一个唯一的 i 节点。目录文件和普通文件是有区别的,它们存储的内容不一样。目录文件存储着若干个目录项,每个目录项由两部分组成:一个是文件名,表明该项目所对应的文件名,它可以是对应着普通文件,也可以对应着目...原创 2020-03-13 11:35:51 · 382 阅读 · 0 评论 -
【Linux内核】---- 02 从main到怠速
【Linux内核】---- 02 从main到怠速2.1 开中断之前的准备工作2.1.1 复制根设备号 和 硬盘参数表2.2.2 规划物理内存2.2.3 虚拟盘设置与初始化2.2.3 内存管理结构mem_map 初始化2.2.4 异常处理类中断服务程序挂接2.2.5 初始化块设备请求项结构2.2.6 与建立人机交互界面相关的外设的中断服务程序挂接2.2.7 开机启动时间设置2.2.8 系统开始激活...原创 2020-03-05 18:45:36 · 645 阅读 · 0 评论 -
【Linux内核】---- 01 开机上电初始化过程
【Linux内核】---- 开机上电初始化过程1.1 启动BIOS,准备实模式下的中断向量表和中断服务程序1.1.1 BIOS的启动原理1.1.2 BIOS在内存中加载中断向量表和中断服务程序1.1.3 加载操作系统内核程序并为保护模式做准备1.2 加载引导程序 bootsect从开机到 main 函数的执行分三步完成,其目的是实现从启动盘加载操作系统程序,完成main函数所需要的准备工作。...原创 2020-03-02 18:42:08 · 1899 阅读 · 0 评论 -
PCI (二) 之 不同的地址域
PCI总线协议中定义了三个不同的地址空间:1、PCI配置空间;2、PCI memory空间;3、PCI的IO空间。简单的说,PCI配置空间是PCI设备的内部属性,设备内部保存了256bytes的空间作为内部register定义该设备的属性。访问配置空间使用IO读写(X86架构中使用CF8h/CFCh端口);而PCI设备的memory/IO空间则是映射到CPU地址域中,需要占用的memo...转载 2019-03-16 17:17:43 · 1099 阅读 · 0 评论 -
PCIe总线协议概述
时势造英雄正所谓,时势造英雄、英雄造时势。PCI总线在PC界已然一统江湖多年,应用已然广泛,PCI的总线已蔚然成风。然,科技日益发展,需求不断膨胀,经过计算机技术10年的发展,包括摩尔定律的不断验证,PCI总线已渐渐感觉力不从心,成为PC 系统发展的瓶颈了,在显卡和图形处理方面尤为明显。更高速度的技术的出现势在必行。这种时候的到来是必然的,早在PCI取代ISA的时候就应该想得到的。对科...转载 2019-03-16 17:20:07 · 9599 阅读 · 0 评论 -
教你用自己的笔记本架设WiFi无线共享
教你用自己的笔记本架设WiFi无线共享总的来说就是7个步骤:1.第一,要判断我们自己的电脑是否拥有无线网卡模块 (1)打开我的电脑,右键单击“计算机”点击弹出的菜单中的“管理” (2)接着在弹出的页面中点击“设备管理器” (3)找到“网络适配器”并点击它,在下面的列表中如果有“Wireless”模块,就说明你的电脑有无线网卡模块2.第二,到C盘打开这个文件夹(C:\W...原创 2015-04-24 22:04:00 · 504 阅读 · 0 评论 -
PCI (一) 之 概述与接口定义
一、PCI 协议概述PCI总线标准是intel在很早以前推出的一种连接主板和外部设备的总线标准,全称为[Peripheral Component Interconnect]。任何事物的出现总是有其时代性,在PC领域也不例外。PCI的出现也是因为当时PC的性能和设计成本的要求。PCI针对ISA总线,做了不少改进,具有不少的优势。PCI槽在主板上是很容易找到的,一般都是乳白色的插槽,如下图所示...转载 2019-03-16 17:09:03 · 19419 阅读 · 0 评论 -
深入分析Linux内核源码oss.org.cn/kernel-book/
本html页面地址:http://oss.org.cn/kernel-book/深入分析Linux内核源码前言 第一章 走进linux1.1 GNU与Linux的成长1.2 Linux的开发模式和运作机制1.3走进Linux内核 1.3.1 Linux内核的特征 1.3.2 Linux内核版本的变化1.4 分析Lin...原创 2015-02-05 12:05:00 · 469 阅读 · 0 评论 -
Linux 输入子系统原理理解(原创)
linux 输入子系统原理理解(原创)以前学了单独的按键设备驱动以及鼠标驱动,实际上,在linux中实现这些设备驱动,有一种更为推荐的方法,就是input输入子系统。平常我们的按键,触摸屏,鼠标等输入型设备都可以利用input接口来简化驱动程序并实现设备驱动。输入子系统原理linux输入子系统的体系结构可以分为三个层面,分别为:驱动层、输入核心层、事件处理层,三个有点类似PHP的...原创 2015-02-05 12:06:00 · 549 阅读 · 0 评论 -
内核中断及按键驱动程序
寒假Linux学习笔记 2015年1月25日 晚 20:00 一、内核中断处理 进程上下文:应用程序主动调用内核驱动的程序的跳转中断上下文:中断由硬件产生的,与应用程序无关 1、注册中断 Int request_irq(unsigned int irq, //中断号void (*handler)(int ,void *, struct ...原创 2015-02-05 12:07:00 · 512 阅读 · 0 评论 -
PCIe 的软件配置方式
PCIe设计出来考虑了和pci兼容问题。所以PCIe的软件配置方式可以沿用PCI的配置方式。当然,由于特殊性,也有自身独特的配置方式。所以PCIe模块的访问方式有如下两种:1、 PCI 兼容的配置方式。2、 PCI Express enhanced 配置机制。PCI兼容方式是在PCI章节已经提过,PCIe与其完全兼容。这里主要描述PCIE高级配置机制。PCIe的配置空间PCIe的配...转载 2019-03-16 17:28:50 · 1041 阅读 · 0 评论 -
Linux 设备驱动 之 PCIE驱动开发
PCIE(PCI Express)是INTEL提出的新一代的总线接口,目前普及的PCIE 3.0的传输速率为8GT/s,下一代PCIE 4.0将翻番为16GT/S,因为传输速率快广泛应用于数据中心、云计算、人工智能、机器学习、视觉计算、显卡、存储和网络等领域。PCIE插槽是可以向下兼容的,比如PCIE 1X接口可以插4X、8X、16X的插槽上。实现基本的PCIE驱动程序,实现以下模块:初...转载 2019-03-16 17:39:33 · 2816 阅读 · 0 评论