![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
文章平均质量分 84
Hacker_Albert
If I am not for myself, who will be for me?
If I am only for myself, what am I?
If not now, when?
展开
-
Linux ACPI(一) -- 解析ACPI表
描述acpi 如何解析原创 2022-06-06 11:07:12 · 6333 阅读 · 0 评论 -
linux -IOMMU
了解IOMMU1.什么是IOMMU? 在计算机领域,IOMMU(Input/Output Memory Management Unit)是一个内存管理单元(Memory Management Unit),它的作用是连接DMA-capable I/O总线(Direct Memory Access-capable I/O Bus)和主存(main memory)。传统的内存管理单元会把CPU访问的虚拟地址转化成实际的物理地址。而IOMMU则是把设备(device)访问的虚拟地址转化成物理地址。为了防止.原创 2021-06-15 14:27:27 · 1068 阅读 · 1 评论 -
linux ftrace (一) - 概述
了解ftrace1.What is tracing? Tracing is the specialized use of logging to record information about a program’s flow of execution. You know when you add print messages in your code to debug it? You are tracing the application with your own “tracing sys.原创 2021-03-26 10:48:20 · 1665 阅读 · 0 评论 -
linux signal
了解linux signal1.Linux信号概述 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。信号机制除了基本通知功能外,还可以.原创 2021-03-23 11:31:13 · 1009 阅读 · 1 评论 -
linux udev
了解udev (Linux dynamic device management)1.概述 Udev is the device manager for the Linux kernel. Udev dynamically creates or removes device node files at boot time in the /dev directory for all types of devices. udev is a replacement for the Device Fil.原创 2021-03-04 15:44:25 · 1009 阅读 · 2 评论 -
龙芯内核启动流程(一)
了解龙芯内核启动流程。1.MIPS CPU Address MIPS CPU运行时有三种状态:用户模式(User Mode);核心模式(Kernel Mode);管理模式(Supervisor Mode)。其中管理模式不常用。用户模式下,CPU只能访问KUSeg;当需要访问KSeg0、Kseg1和Kseg2时,必须使用核心模式或管理模 式。 32位MIPS CPU将程序地址空间分为4部分:Kuseg:0×00000000~0×7FFFFFFF(2G)。这些地址是用户态可用的地址。 在.原创 2020-09-26 14:31:25 · 2403 阅读 · 0 评论 -
linux core dump
了解linux coredump1.描述 In computing, a core dump, crash dump, memory dump, or system dump[1] consists of the recorded state of the working memory of a computer program at a specific time, generally when the program has crashed or otherwise terminated ab.原创 2020-09-16 20:07:23 · 240 阅读 · 0 评论 -
linux cgroup
了解cgroup1.描述 Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU、内存、磁盘输入输出等)。这个项目最早是由Google的工程师在2006年发起(主要是Paul Menage和Rohit Seth),最早的名称为进程容器(process containers)。在2007年时,因为在Linux内核中,容器(container)这个名词太过广泛,为避免混乱,被重命名为cgroup,并且被合并到2.原创 2020-09-13 10:42:03 · 631 阅读 · 0 评论 -
linux 之copy_to_user/copy_from_user
了解linux内核中的copy_to_user和copy_from_user。内核 2.6.121.copy_from_user copy_from_user和copy_to_user函数负责在用户空间和内核空间传递数据。copy_from_user:(linux/include/asm-arm/uaccess.h)static inline unsigned long copy_from_user(void *to, const void __user *from, unsigned .原创 2020-08-05 17:49:10 · 1040 阅读 · 0 评论 -
Linux 内核之bitmap
分析bitmap. 参考此文1.Bit 简介 bit 中文翻译 ‘位’,即代表计算机里最小的计数单位。bit 在计算机里可用于表示 ‘0’ 和 ‘1’ 两个值,由于表征数字信号高低电平,为计算机提供了最基础的数据基础。 计算机中,多个 bit 的集合构成了固定长度不同的数据类型,比如字节,字,双字等 数据类型;多个 bit 也可以构成长度不同的位图 (bitmap), 因此位图就是包含了...原创 2020-04-24 10:31:58 · 2402 阅读 · 0 评论 -
如何创建基于arm 的Ubuntu rootfs
参考:https://blog.csdn.net/u010632165/article/details/78424000https://www.jianshu.com/p/7453d52f0324https://blog.csdn.net/sinat_37141443/article/details/80882219https://www.cnblogs.com/pengdonglin1...原创 2020-03-29 09:28:33 · 377 阅读 · 0 评论 -
linux 锁机制 - spinlock
了解linux spinlock1.spinlock 在linux kernel的实现中,经常会遇到这样的场景:共享数据被中断上下文和进程上下文访问,该如何保护呢?如果只有进程上下文的访问,那么可以考虑使用semaphore或者mutex的锁机制,但是现在中断上下文也参和进来,那些可以导致睡眠的lock就不能使用了,这时候,可以考虑使用spin lock。 spinlock又称自旋锁...原创 2020-03-22 13:33:38 · 697 阅读 · 0 评论 -
linux内存管理(16) - volatility
1.Linux Memory Extractor A Loadable Kernel Module (LKM) which allows for volatile memory acquisition from Linux and Linux-based devices, such as Android. This makes LiME unique as it is the first...原创 2020-03-15 20:05:18 · 657 阅读 · 0 评论 -
linux 内存管理(15) - mmap
了解mmap机制。1.概述 mmap 即地址的映射, 是一种内存映射文件的方法,将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以向访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。 Linu...原创 2020-03-11 17:47:10 · 625 阅读 · 0 评论 -
linxu 内核调试(3) - 内核loglevel
了解printk1.Description Specify the initial console log level. Any log messages with levels less than this (that is, of higher priority) will be printed to the console, whereas any messages with le...原创 2020-03-06 11:01:47 · 2281 阅读 · 0 评论 -
linux 内存管理(14) - paging_init
了解paging_init1.paging_init Linux物理内存初始化中,可知在paging_init调用之前,存放Kernel Image和DTB的两段物理内存区域可以访问了(相应的页表已经建立好)。尽管物理内存已经通过memblock_add添加进系统,但是这部分的物理内存到虚拟内存的映射还没有建立,可以通过memblock_alloc分配一段物理内存,但是还不能访问,一切还...原创 2020-03-05 22:28:43 · 418 阅读 · 0 评论 -
linux 内存管理 -- 调试方法
了解内存调试方法。1.free free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。默认情况下,即在没有选项的情况下,"free"命令显示内存的使用信息。默认按照k(b)的计数单位统计。total:表示 总计物理内存的大小。used:表示 已使用多少。free:表示 可用内存多少。Shared:表示多个进程共享的内存总额。Buffers...原创 2020-03-03 15:52:49 · 512 阅读 · 0 评论 -
linux 内存管理(13) - memblock
了解memblock机制。1.概述 在引导内核的过程中,需要使用内存, 而这个时候内核的内存管理并没有被创建, 因此也就需要一种精简的内存管理系统先接受这个工作, 而在初始化完成后, 再将旧的接口废弃, 转而使用强大的buddy系统来进行内存管理. 早期的Linux内核在引导阶段都是通过bootmem来完成初期的内存管理的, 但是后来的版本开始把bootmem弃用了,使用memblo...原创 2020-03-02 22:09:26 · 1368 阅读 · 1 评论 -
linux 内存管理(12) - 物理内存初始化
-了解linux物理内存初始化1.系统是怎么知道物理内存的? memory节点,以arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi为例: memory@80000000 { device_type = "memory"; reg = <0x00000000 0x80000000 0 0x80000000...原创 2020-03-01 19:58:19 · 956 阅读 · 0 评论 -
linux 进程切换(1) - 基本框架
了解进程切换流程;1.context_switch代码分析 context_switch函数用来完成具体的进程切换。代码调用流程:kernel/sched/core.c:schedule() ->__schedule(false); ->context_switch context_switch函数分析:static inline struct rq * c...原创 2020-02-29 17:11:23 · 258 阅读 · 0 评论 -
linux 内存管理(11) - TLB flush
了解 TLB flush1.TLB flush API1.1.void flush_tlb_all(void); 这个接口用来invalidate TLB cache中的所有的条目,执行完毕了该接口之后,由于TLB cache中没有缓存任何的VA到PA的转换信息,因此,调用该接口API之前的所有的对page table的修改都可以被CPU感知到。注:该接口是大杀器,不要随便使用。 ...原创 2020-02-27 21:51:44 · 1336 阅读 · 0 评论 -
linux 内存管理(10)- phys_to_virt/virt_to_phys
了解phys_to_virt/virt_to_phys1.概述 对于提供了MMU的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。进程的4GB内存空间被人为的分为两个部分:用户空间与内核空间。用户空间地址分布从0到3GB(PAGE_OFFSET,在0x86中它等于0xC0000000),3GB到4GB为内核空间。 内核空间中,从3G到vmalloc_...原创 2020-02-26 20:48:20 · 10168 阅读 · 0 评论 -
linux 内存管理(9) -页表实现
了解linux 页表实现1.ARM32处理器查询页表 32bit的Linux采用三级映射:PGD–>PMD–>PTE,64bit的Linux采用四级映射:PGD–>PUD–>PMD–>PTE,多了个PUD。缩写:PGD:Page Global Directory、PUD:Page Upper Directory、PMD:Page Middle Dire...原创 2020-02-23 20:08:57 · 1563 阅读 · 1 评论 -
linux 内存管理(8) —内存描述符(mm_struct)
了解进程内存描述符mm_struct1.概述 每个进程都只有一个mm_struct结构,该结构是对整个用户空间的描述。一个进程的虚拟地址空间主要由两个数据结来描述。最高层次的:mm_struct,描述一个进程的整个虚拟地址空间。较高层次的:vm_area_structs,描述虚拟地址空间的一个区间(简称虚拟区)。内存管理大致结构:2.mm_struct 结构体 task...原创 2020-02-23 11:05:17 · 3896 阅读 · 1 评论 -
Linux 内核调试(2) - Kdump
了解kdump1.Introduction Kdump is a standard Linux mechanism to dump machine memory content on kernel crash. Kdump is based on Kexec. Kdump utilizes two kernels: system kernel and dump capture kerne...原创 2020-02-20 16:15:14 · 772 阅读 · 0 评论 -
linux 内核调试(1) - coredump
学习kernel 调试方法1.内核转储 内核转储(coredump)保存了进程某一时刻的运行状态,它在进程发生问题时产生,此时只要有程序的可执行文件和 coredump 即可对其进行调试,了解产生 coredump 那一刻进程的状态,从而发现问题点。通常情况下coredmp包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息等,在设置妥当的情况下,该coredump文件在程序出错时...原创 2020-02-19 18:06:20 · 1919 阅读 · 0 评论 -
Linux内存管理(7) - page fault
了解linux page fault.1.概述 A page fault (sometimes called #PF, PF or hard fault)[a] is a type of exception raised by computer hardware when a running program accesses a memory page that is not curre...原创 2020-02-16 18:38:10 · 1611 阅读 · 0 评论 -
linux 内存管理(6) - 页面迁移
了解页面迁移1.概述 A longtime aspect of the kernel’s memory-management subsystem is that it tends to fragment memory over time. After a system has been running for a while, finding groups of physically c...原创 2020-02-16 18:38:59 · 494 阅读 · 0 评论 -
Linux 等待队列
了解linux 等待队列1.概述 While writing modules there might be situations where one might have to wait for input some condition to occur before proceeding further. Tasks that need such behavior can make u...原创 2020-02-10 11:47:10 · 231 阅读 · 0 评论 -
linux MMC framework(6) - 分区MBR/GPT及Debug
debug sdcard1.加载驱动成功后,查看log:root@colibri-imx6ull:~# dmesg | egrep "(sdhci|mmc)"[ 1.880782] sdhci: Secure Digital Host Controller Interface driver[ 1.890679] sdhci: Copyright(c) Pierre Ossm...原创 2020-01-07 11:09:34 · 1701 阅读 · 0 评论 -
linux block framework(4) - kernel devices.txt
LINUX ALLOCATED DEVICES (4.x+ version)3 4 This list is the Linux Device List, the official registry of allocated5 device numbers and /dev directory nodes for the Linux operating6 system.7 ...原创 2020-01-04 13:00:56 · 114188 阅读 · 0 评论 -
linux MMC framework(5) - mmc card driver
了解linux mmc card driver.1.相关结构体struct mmc_cardstruct mmc_card { struct mmc_host *host; /* the host this device belongs to */ struct device dev; /* the device */...原创 2020-01-01 20:30:03 · 550 阅读 · 0 评论 -
linux MMC framework(4) - mmc host driver
了解mmc host driver.1.host相关数据结构1.1.struct mmc_host struct mmc_host是mmc core由host controller抽象出来的结构体,用于代表一个mmc host控制器。struct mmc_host { struct device *parent; // 对应的host controller的d...原创 2019-12-31 18:25:19 · 1047 阅读 · 2 评论 -
linux MMC framework(3) - sdhci-pltfm
了解sdhci-pltfm.1.sdhci-pltfm说明 sdhci-pltfm并不是实际某个host的driver。sdhci-pltfm是指在sdhci core的基础上,提供了统一对sdhci_host的必要属性进行解析和设置的方法。 但是,对于sdhci类的host driver来说,使用sdhci-pltfm并不是必须的,host driver也可以自己来实现对应的操作。...原创 2019-12-31 14:11:09 · 1482 阅读 · 0 评论 -
linux MMC framework(2) - sdhci host driver
了解MMC host driver.1.概述 The MultiMediaCard (MMC)/ Secure Digital (SD)/ Secure Digital Input Output (SDIO) host driver implements a standard Linux driver interface to the ultra MMC/SD host controll...原创 2019-12-31 13:27:53 · 903 阅读 · 0 评论 -
linux MMC framework(1) - 基本框架
1.概述 Linux中,将包括MMC、SD、SDIO统称为MMC子系统。MMC子系统从功能上可分为三个层次:card层: Card驱动, 或称client驱动core层: MMC的核心层, 完成不同协议和规范的实现, 为host层和设备驱动层提供接口函数host层: Host驱动, 针对不同主机端的SDHC、MMC控制器的驱动2.软件架构MMC framework的软件架...原创 2019-12-31 10:12:54 · 969 阅读 · 2 评论 -
Linux Framebuffer(二) -- 驱动框架
了解Linux Framebuffer的驱动框架1.Framebuffer 驱动位置 对于驱动开发人员来说,其实只需要针对具体的硬件平台SOC和具体的LCD(焊接连接到该SOC的引脚上)来进行第一部分的寄存器编程(红色部分)。而第二、三、四部分内容(绿色部分)已经被抽象并实现在Linux driver发布源码中了,LCD驱动开发人员只需要理解framebuffer内部的框架和接口使用即可...原创 2019-12-19 18:32:32 · 730 阅读 · 0 评论 -
Linux Framebuffer(一) - 概述
了解Linux framebuffer.1.Framebuffer Intro FrameBuffer是出现在 2.2.xx 内核当中的一种驱动程序接口。Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏,Linux抽象出 FrameBuffer这 个设备来供用户态进程实现直接写屏。 Framebuffer机制模仿显卡的功能,...原创 2019-12-19 15:04:25 · 285 阅读 · 0 评论 -
Linux Device tree(三) - 获取DT信息
获取内核运行时device tree.代码如下:/* * Module to inspect device tree from the kernel */#define pr_fmt(fmt) "%s: " fmt, KBUILD_MODNAME#include <linux/moduleparam.h>#include <linux/module.h>...原创 2019-12-18 13:39:18 · 242 阅读 · 0 评论 -
linux 通知链(notifier chain)
了解通知链(notifier chain)。1.通知链(notifier chain) notifier chain在Linux kernel中被用来实现不同的subsystem之间的通信。简单来说,notifier chain是一个存储了某个事件对应的回调函数的列表。每个notifier chain都和特定的事件相关,当发出事件通知的时候,会触发对应的回调函数来处理该事件。 四种不...原创 2019-12-17 16:06:54 · 696 阅读 · 0 评论