【【华为云技术分享】Linux内核发展史 (2)】教程文章相关的互联网学习教程文章

Linux内核中container_of宏的详细解释【代码】【图】

上一节拒绝造轮子!如何移植并使用Linux内核的通用链表(附完整代码实现)我们在分析Linux内核链表的时候注意到内核在求解结构体偏移的时候巧妙的使用了container_of宏定义,今天我们来详细剖析下内核到底是如何求解结构体成员变量的地址的。文章目录结构体在内存中是如何存储的container_of宏typeof(((type *)0)->member)const typeof(((type *)0)->member)*__mptr = (ptr);offsetof(type, member))(type *)((char *)__mptr - off...

拒绝造轮子!如何移植并使用Linux内核的通用链表(附完整代码实现)【代码】【图】

在实际的工作中,我们可能会经常使用链表结构来存储数据,特别是嵌入式开发,经常会使用linux内核最经典的双向链表 list_head。本篇文章详细介绍了Linux内核的通用链表是如何实现的,对于经常使用的函数都给出了详细的说明和测试用例,并且移植了Linux内核的链表结构,在任意平台都可以方便的调用内核已经写好的函数。建议收藏,以备不时之需!文章目录链表简介单链表双链表循环链表Linux内核中的链表内核实现说明举例内核实现说明...

Linux内核中断顶半部和底半部的理解【代码】【图】

工科生一枚,热衷于底层技术开发,有强烈的好奇心,感兴趣内容包括单片机,嵌入式Linux,Uboot等,欢迎学习交流! 爱好跑步,打篮球,睡觉。 欢迎加我QQ1500836631(备注CSDN),一起学习交流问题,分享各种学习资料,电子书籍,学习视频等。文章目录中断上半部、下半部的概念实现中断下半部的三种方法软中断软中断模版tasklettasklet函数模版工作队列工作队列函数模版进程上下文和中断上下文软中断和硬中断的区别硬中断、软中断和...

你真的懂Linux内核中的阻塞和异步通知机制吗?(花了五天整理,墙裂推荐!)【代码】

工科生一枚,热衷于底层技术开发,有强烈的好奇心,感兴趣内容包括单片机,嵌入式Linux,Uboot等,欢迎学习交流! 爱好跑步,打篮球,睡觉。 欢迎加我QQ1500836631(备注CSDN),一起学习交流问题,分享各种学习资料,电子书籍,学习视频等。文章目录阻塞/非阻塞简介阻塞/非阻塞例程等待队列简介等待队列相关函数定义等待队列初始化等待队列头定义并初始化一个等待队列项将队列项添加到等待队列头将队列项从等待队列头移除等待唤醒...

面试官让你讲讲Linux内核的竞争与并发,你该如何回答?【代码】

工科生一枚,热衷于底层技术开发,有强烈的好奇心,感兴趣内容包括单片机,嵌入式Linux,Uboot等,欢迎学习交流! 爱好跑步,打篮球,睡觉。 欢迎加我QQ1500836631(备注CSDN),一起学习交流问题,分享各种学习资料,电子书籍,学习视频等。文章目录内核中的并发和竞争简介原子操作原子操作简介整型原子操作函数位原子操作函数原子操作例程自旋锁自旋锁简介自旋锁操作函数自旋锁例程读写自旋锁读写锁例程顺序锁顺序锁操作函数自旋...

Linux内核网络设备驱动【代码】

1. 接收数据包过程概述介绍数据包收包过程,有助于我们了解Linux内核网络设备在数据收包过程中的位置,下面从宏观的角度介绍数据包从被网卡接收到进入 socket 接收队列的整个过程:加载网卡驱动,初始化数据包从外部网络进入网卡网卡(通过DMA)将包拷贝到内核内存中的ring buffer产生硬件中断,通知系统收到了一个包驱动调用 NAPI ,如果轮询(poll)还没有开始,就开始轮询ksoftirqd软中断调用 NAPI 的poll函数从ring buffer收包...

Linux内核调试方法总结之coredump【图】

什么是core dump?分析core dump是Linux应用程序调试的一种有效方式,像内核调试抓取ram dump一样,core dump主要是获取应用程序崩溃时的现场信息,如程序运行时的内存、寄存器状态、堆栈指针、内存管理信息、函数调用堆栈信息等。Core dump又称为“核心转储”,是Linux基于信号实现的。Linux中信号是一种异步事件处理机制,每种信号都对应有默认的异常处理操作,默认操作包括忽略该信号(Ignore)、暂停进程(Stop)、终止进程(T...

linux内核bug问题排查过程详细报告

Linux Kernel BUG:soft lockup CPU#1 stuck分析1.线上内核bug日志kernel: Deltaway too big! 18428729675200069867 ts=18446743954022816244 write stamp =18014278822746377 kernel:------------[ cut here ]------------ kernel:WARNING: at kernel/trace/ring_buffer.c:1988 rb_reserve_next_event+0x2ce/0x370()(Not tainted) kernel:Hardware name: ProLiant DL360 G7 kernel:Modules linked in: fuse ipv6 power_meter bnx2 ...

者旨於陽 Linux内核调试方法总结之反汇编【图】

Linux反汇编调试方法Linux内核模块或者应用程序经常因为各种各样的原因而崩溃,一般情况下都会打印函数调用栈信息,那么,这种情况下,我们怎么去定位问题呢?本文档介绍了一种反汇编的方法辅助定位此类问题。代码示例如下:#include <signal.h>#include <stdio.h>#include <stdlib.h>#include <execinfo.h>#include <fcntl.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h> #define PRINT_D...

炫技!bug 排查大曝光,涉及Linux 内核的那种【图】

那些编程高手除了写代码很厉害之外,调试代码找 bug 更是手到擒来。 编写代码只是程序员的工作之一,调试代码的时间甚至会超过编写代码,之前为大家讲解了很多关于系统、架构、编程等方面的内容,这篇文章就为大家全方位展示一次涉及到内核的 bug 排查过程。 发现问题 话说一天公司服务器报警,登录到机器后发现进程已被“卡死”,常规 GDB 调试没有反应,查找 Log 也没有线索,问题似乎已经无解。 就在这时博主的脑海里浮现出了岛...

正点原子linux内核启动流程学习笔记【代码】

1、Linux 内核入口 stext 在linux内核启动之前要求如下: ①、关闭 MMU。 ②、关闭 D-cache。(数据缓存) ③、 I-Cache 无所谓。(指令缓存) ④、 r0=0。 ⑤、 r1=machine nr(也就是机器 ID)。 ⑥、 r2=atags 或者设备树(dtb)首地址 1.1 为什么需要关闭MMU和D-cache 1.1.1 cache的作用cache 是高速缓冲存储器 cache是位于主存(即是内存)与CPU内部的寄存器之间的一个存储设施,用来加快cpu与内存之间 数据与指令的传输速率,从而加快处...

590_linux内核学习_fork.c中copy_process函数分析【图】

全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 继续分析fork.c,看样子,这个文件应该能够结束的很快。最近工作的不顺心、堵心让我更有了找点慰藉的东西的想法。学习吧,这就是最好的选择。这次看看copy_process函数。 开始的时候有点吃惊这个函数的传入参数数目多,后来分析代码的时候基本清楚其实这些基本都是CPU的寄存器。 看上去,这个进程的复制功能的确不算是复杂。不过,这个...

Linux内核简单启动流程以及功能描述

/arch/arm/kernel/head.S svc mode irqs disabled get processor id /arch/arm/kernel/head-common.S \arch\arm\include\asm\procinfo.h \arch\arm\kernel\asm-offsets.c __lookup_processor_type CPU信息的定义都放到.proc.info.init?段中 CONFIG_XIP_KERNEL 是否片内执行 \arch\arm\kernel\head-common.S __vet_atags验证atags或设备树(dtb)的合法性。 __create_page_tables 建立一个临时的page table mmu ldr r13, =__mmap_...

Linux内核学习之2号进程kthreadd【代码】【图】

Author : ToneyEmail : vip_13031075266@163.comDate : 2020.12.04Copyright : 未经同意不得转载!!!Version : Linux-4.19.yReference:https://www.linux.org/目录一、Linux的2号进程二、kthreadd进程的创建三、kthreadd进程执行体四、create_kthread函数五、小结一、Linux的2号进程说起Linux进程,学习Linux系统的大部分人都知道1号进程为init进程,人们就是这样只记得第一,却很少人记得第二。(经...

Linux内核学习之工作队列【图】

Author : ToneyEmail : vip_13031075266@163.comDate : 2020.12.02Copyright : 未经同意不得转载!!!Version : Linux-2.6.12Reference:https://www.linux.org/目录一、核心数据结构 1. struct work_struct 2. struct cpu_workqueue_struct 3. struct workqueue_struct 4. 这三个数据结构之间的关系5. 工作队列实现框架(singlethread)二、创建并初始化工作队列三、工作者线程四、调度一个任务到工作队...