
kernel
文章平均质量分 68
芒果520
每天进步一点点
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
内核编译机制
主要由Kconfig提供图形界面完成主要基于Kbuild编译系统,执行make完成编译主要也是基于Kbuild提供的脚本,然后执行make完成安装。原创 2023-08-22 17:36:11 · 242 阅读 · 0 评论 -
底层开发必知的内存结构概念
Linux中内存管理子系统使用节点(node)、区域(zone)和页(page)三级结构描述物理内存。原创 2023-08-21 17:05:23 · 217 阅读 · 0 评论 -
Linux内核入口函数——initcall
写过Linux驱动的人都知道宏,因为它声明了一个驱动的入口函数。除了宏,你会发现在Linux内核中有许多的驱动并没有使用上述举例的两个驱动入口分别使用了和来声明驱动入口,这些本质上都是对initcall的调用,也如此。原创 2023-08-18 17:59:00 · 421 阅读 · 0 评论 -
内核配置知识
是菜单项;菜单项下面的是菜单的属性;菜单都是以config开头,中间有空格,后面大写的就是菜单项。tristate:表示提示信息,在配置菜单中显示的字符串depends:表示依赖于的选项(依赖的选项选上,才能选这个选项)select:表示本菜单选上后,自动选上的菜单Help:帮助文字;Kconfig的语法详细参考:Documentation/kbuild/kconfig-languages.txt。原创 2023-08-19 16:13:05 · 200 阅读 · 0 评论 -
linux内核的初始化过程
标准 linux 内核初始化过程如下: 内核引导第一阶段:汇编语言 内核启动的第二阶段:C 语言 linux/arch/arm/kernel/head.S 文件定义了 bootloader 和 kernel 的参数传递要求: MMU = off, D-cache = off, I-cache = dont care, r0 = 0, r1 = machine nr, r2 = atags or dtb pointer. 目前的 kernel 支持旧原创 2021-12-28 09:24:51 · 349 阅读 · 0 评论 -
位置无关代码
ARM处理器支持位置无关的程序设计,这种程序加载到存储器的任意地址空间都可以正常运行,其设计方法在嵌入式应用系统开发中具有重要的作用。尤其在裸机状态下开发Bootloader程序及进行内核初始化设计;利用位置无关的程序设计方法还可以在具体应用中用于构建高效率动态链接库。应用程序必须经过编译、汇编和链接后才变成可执行文件,在链接时,要对所有目标文件进行重定位(relocation),建立符号引用规则,同时为变量、函数等分配运行地址。当程序执行时,系统必须把代码加载到链接时所指定的地址空间,以保证程序在执行原创 2021-08-19 15:05:00 · 1390 阅读 · 0 评论 -
利用proc和sys的接口进行linux系统调试
在调试的过程中我们通常需要去不停的修改寄存器的值来调试效果,其实linux有两个手段,分别利用的proc和sys可以帮忙我们来进行调试proc的方法不依赖与kobject,sys中show和store则依赖于kobject。 /proc是内存中有关系统进程的实时信息;/sys是有关系统内核以及驱动的实时信息;/proc下文件基本都是只读的,除了/proc/sys目录,它是可写的(查看和修改内核的运行参数)/proc下数字命令的目录就是对于PID的进程目录/proc/cmdl...原创 2021-05-25 11:09:44 · 513 阅读 · 0 评论 -
make编译语法
subsystem:cd subdir && $(MAKE)其等价于:subsystem:$(MAKE) -C subdir这句是Makefile的规则:这里的$(MAKE)就相当于make,-C 选项的作用是指将当前工作目录转移到你所指定的位置。...原创 2021-05-07 18:10:43 · 407 阅读 · 0 评论 -
进程调度
linux调度器https://www.cnblogs.com/20135235my/p/5398066.html 好文章首先我们在思考调度器的时候,我们要理解任何操作系统的调度器设计只追求2个目标:吞吐率大和延迟低(相应快)。因为吞吐率要大,势必要把更多的时间放在做真实的有用功,而不是把时间浪费在频繁的进程上下文切换;而延迟要低,势必要求优先级高的进程可以随时抢占进来,打断别人,强行插队。但是,抢占会引起上下文切换,上下文切换的时间本身对吞吐率来讲,是一个消耗,这个消耗可以低到2us或者更原创 2021-01-11 17:25:32 · 189 阅读 · 0 评论 -
ARM的七种工作模式详解
一、存储器格式(字对齐):Arm体系结构将存储器看做是从零地址开始的字节的线性组合。从零字节到三字节放置第一个存储的字(32位)数据,从第四个字节到第七个字节放置第二个存储的字数据,一次排列。作为32位的微处理器,arm体系结构所支持的最大寻址空间为4GB。存储器格式 1、大端格式:高字节在低地址,低字节在高地址; 2、小端格式:高字节在高地址,低字节在低地址;指令长度:Arm微处理器的指令长度是32位的,也可以为16位(thumb状态下)。Arm微处理器...原创 2020-11-24 17:31:52 · 1566 阅读 · 0 评论 -
Linux内核调试方法
#1 内核调试以及工具总结内核总是那么捉摸不透, 内核也会犯错, 但是调试却不能像用户空间程序那样, 为此内核开发者为我们提供了一系列的工具和系统来支持内核的调试.内核的调试, 其本质是内核空间与用户空间的数据交换, 内核开发者们提供了多样的形式来完成这一功能.工具 描述 debugfs等文件系统 提供了 procfs, sysfs, debugfs以及 relayfs 来与用户空间进行数据交互, 尤其是 debugfs, 这是内核开发者们实现的专门用来调试的文件系统接口. 其他原创 2020-11-20 16:47:47 · 237 阅读 · 0 评论 -
workqueue
Linux内核使用了不少工作队列来处理任务,他在使用上和 tasklet最大的不同是工作队列的函数可以使用休眠,而tasklet的函数是不允许使用休眠的。 工作队列的使用又分两种情况,一种是利用系统共享的工作队列来添加自己的工作,这种情况处理函数不能消耗太多时间,这样会影响共享队列中其他任务的处理;另外一种是创建自己的工作队列并添加工作。 (一)利用系统共享的工作队列添加工作: 第一步:声明或编写一个工作处理函数...原创 2020-09-18 16:10:00 · 175 阅读 · 0 评论 -
ARM 32 内核启动流程
“ARM32”的正式名称为Aarch32,在ARM架构中,从ARMv4到ARMv7这几个版本实现了该架构。本文我将讨论在经过解压缩和引导、加载到物理内存后,内核如何自我引导,直到在虚拟内存中执行由C编写的通用内核代码的过程。一切的开端在经过解压、增强,并收到了设备树块(DTB)之后,程序计数器(pc)被置于符号stext()的物理地址(即文本段的开始处),从而调用ARM32内核。这段代码可以参考arch/arm/kernel/head.S。宏 __HEAD 会将这里的代码放到一个名为 .he原创 2020-09-09 10:51:27 · 1059 阅读 · 1 评论 -
linux同步机制之下篇
在上一部分,我们讨论了最基本常见的几类同步机制,这一部分我们将讨论相对复杂的几种同步机制,尤其是读写信号量和RCU,在操作系统内核中有相当广泛的应用。 读写信号量(rw_semaphore) BKL(Big Kernel Lock,只包含在2.4内核中,不讲) Rwlock brlock(只包含在2.4内核中,不讲) RCU(只包含在2.6内核及以后的版本中) 一、读写信号量(RW_Semaphore)读写信号量与信号量有相...原创 2020-09-03 11:23:48 · 301 阅读 · 0 评论 -
Linux网络发包流程
网络发包流程。sys_write() file->f_op->write()(sock_writev)(注0)sock_writev()sock_sendmsg() sock->ops->sendmsg()(inet_sendmsg)structsock *sk = sock->sk;...原创 2020-08-25 17:57:29 · 1690 阅读 · 0 评论 -
Linux网络收包流程
关于linux网络包的收发流程,网上随便一搜都可以搜一桶,但自己不动手永远都搞不原理。最近在家比较闲,对网络这一块也不太了解,老婆在看《三生三世枕上书》,我只能看下代码打发下时间。小编习惯熟悉内核子系统原理从低版本内核开始. Linux(2.6.11.12)网络收包流程图: device driver interrupt handler netif_rx() cpu_raise_softirq() ...原创 2020-08-25 17:55:27 · 253 阅读 · 0 评论 -
Linux的页迁移(Page Migration)
对于用户空间的应用程序,我们通常根本不关心page的物理存放位置,因为我们用的是虚拟地址。所以,只要虚拟地址不变,哪怕这个页在物理上从DDR的这里飞到DDR的那里,用户都基本不感知。那么,为什么要写一篇论述页迁移的文章呢?我认为有2种场景下,你会关注这个Page迁移的问题:一个是在Linux里面写实时程序,尤其是Linux的RT补丁打上后的情况,你希望你的应用有一个确定的时延,不希望跑着跑着你的Page正在换位置而导致的延迟;再一个场景就是在用户空间做DMA的场景,尤其是SVA(SharedVirtua原创 2020-08-25 17:46:01 · 1843 阅读 · 1 评论 -
Linux kernel同步机制
在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实像多进程多线程编程一样也需要一些同步机制来同步各执行单元对共享数据的访问,尤其是在多处理器系统上,更需要一些同步机制来同步不同处理器上的执行单元对共享的数据的访问。在主流的Linux内核中包含了如下这些同步机制包括: 原子操作 信号量(semaphore) 读写信号量(rw_semaphore) Spinlock Mutex BKL(Big Kernel Lock,只包含在2.4内.原创 2020-08-18 09:23:45 · 241 阅读 · 0 评论 -
Linux select/poll机制原理详解
1. 概述Linux系统在访问设备的时候,存在以下几种IO模型: Blocking IO Model,阻塞IO模型; Nonblocking I/O Model,非阻塞IO模型; I/O Multiplexing Model,IO多路复用模型; Signal Driven I/O Model,信号驱动IO模型; Asynchronous I/O Model,异步IO模型; 今天我们来分析下IO多路复用机制,在Linux中是通过select/poll/ep原创 2020-08-05 09:18:16 · 629 阅读 · 0 评论 -
linux 设备树常用OF函数
1、查找节点的OF函数 Linux内核使用device_node结构体来描述一个节点,此结构体定义在文件include/linux/of.h1.1. of_find_node_by_name:通过节点名字查找指定节点1.2. of_find_node_by_type:通过device_type属性查找指定节点1.3. of_find_node_by_path:通过路径查找指定节点1.4. of_find_compatible_node:根据device_type和.原创 2020-07-16 14:24:47 · 8117 阅读 · 5 评论 -
Linux中断子系统之-softirq和tasklet
1. 概述中断子系统中有一个重要的设计机制,那就是Top-half和Bottom-half,将紧急的工作放置在Top-half中来处理,而将耗时的工作放置在Bottom-half中来处理,这样确保Top-half能尽快完成处理,那么为什么需要这么设计呢?看一张图就明白了: ARM处理器在进行中断处理时,处理器进行异常模式切换,此时会将中断进行关闭,处理完成后再将中断打开; 如果中断不分上下半部处理,那么意味着只有等上一个中断完成处理后才会打开中断,下一个中断才能得到响应。当某个中.原创 2020-06-16 17:19:56 · 474 阅读 · 0 评论 -
理解Linux内核抢占模型
当配置Linux内核的时候,我们可以选择一些参数,这些参数能影响系统的行为。你可以用不同的优先级、调度类和抢占模型来工作。正确地选择这些参数是非常重要的。本文将论述不同的抢占模型如何影响用户和系统的行为。当你使用 make menuconfig配置内核的时候,你能看到这样的菜单:为了深入理解这三个抢占模型的区别,我们将写一个案例: 2个线程,一个高优先级RT(50),一个低优...原创 2020-05-08 10:37:08 · 281 阅读 · 0 评论 -
makefile语法
Makefile文件 Makefile 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。 makefile带来的好处就是——“自动化编译”,一旦写好,...原创 2020-02-02 22:17:13 · 201 阅读 · 0 评论 -
内存管理单元MMU
一、内存管理单元MMU介绍内存管理单元简称MMU,它负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查。MMU使得每个用户进程拥有自己独立的地址空间,并通过内存访问权限的检查保护每个进程所用的内存不被其他进程破坏。重点就在于地址映射:页表的结构与建立、映射的过程。 1、S3C2440 MMU地址变换过程 1)地址的分类一个程序在运行之前,没有必要全...原创 2020-02-02 22:03:03 · 604 阅读 · 0 评论 -
lnux内核同步机制
临界区所谓临界区就是访问和操作共享数据的代码段。多个执行线程并发访问同一个资源通常是不安全的,为了避免在临界区中并发访问,编程者必须保证这些代码原子的执行——也就是说,操作在执行结束前不可被打断,就如同临界区是一个不可分割的指令一样。竞争如果两个执行线程有可能处于同一个临界区中执行,那么这就是程序的一个Bug,如果这种情况确实发生了,我们就称它为竞争条件。同步避免并发和防止竞争条件称为同...原创 2020-01-29 22:45:43 · 343 阅读 · 0 评论 -
上半部和下半部
中断处理程序以异步方式执行,并且它有可能打断其他重要代码(甚至包括其他中断处理程序)的执行,因此中断处理程序应该越快越好。如果当前有一个中断处理程序正在执行,在最好的情况下(如果IRQF_DISABLED没有被设置),与该中断同级的其他中断被屏蔽,在最坏的情况下(设置了IRQF_DISABLED),当前处理器上所有其他中断都会被屏蔽。因为禁止中断后硬件与操作系统无法通信,因此,中断处理程序执行...原创 2020-01-29 20:21:38 · 1043 阅读 · 0 评论