![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
小张学inux内核
文章平均质量分 78
小张学inux内核,研究各子系统源码
加油2019
想学的太多,路上满是坎坷,越是如此,越要勇往直前
展开
-
linux早期内存管理:memblock完全介绍
linux启动阶段,在伙伴系统初始化之前,也是需要动态内存分配的,比如dts、sparse_vmemmap、页表等,称早期内存管理,early mem manger。此阶段采用简单的内存管理器,有bootmem和memblock,bootmem是早期内核采用。4.x以后内核内核采用memblock,配置了NO_BOOTMEM宏。......原创 2022-07-31 16:52:16 · 1582 阅读 · 1 评论 -
UBI文件系统镜像制作
UBI文件系统镜像制作ubifs文件系统镜像分为制作分两步,分别是:1)mkfs.ubifs工具制作UBIFS文件系统镜像2)ubinize添加UBI卷信息mkfs.ubifs只是制作了UBIFS文件系统镜像,但其要能通过烧录器烧片,必须使用ubinize工具把UBI卷信息加上。mkfs.ubifs工具mkfs.ubifs命令用于制作ubifs文件系统,命令示例如下:mkfs.ubifs -x lzo -m 2KiB -e 124KiB -c 360 -o ./tmp_ubifs.img -d原创 2022-03-12 18:48:00 · 1797 阅读 · 0 评论 -
进程proc文件介绍
进程proc文件介绍proc/${pid}/下是每个进程的proc信息,/proc/self比较特殊,哪个进程打开,对应链接到哪个进程。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4q6coJfs-1645932312850)(E:\csdn_demo\进程proc文件系统介绍\进程proc文件.PNG)]内存相关:status: 进程使用虚拟内存和物理内存(RSS)信息statm:maps: 段内核映射VMA以及加载动态库信息;(映射分为文件映射和原创 2022-03-12 16:07:07 · 3003 阅读 · 0 评论 -
内核tty框架_串口_tty_shell的关系
串口驱动已s3c24xx为例,串口驱动主要提供ops,数据结构如下:在driver/tty/serial/samsung.c以三星s3cttypty虚拟tty。shellcmdlineconsole=ttySAC0;tty和串口驱动的绑定。串口驱动会注册tty设备?tty设备名,是串口驱动uart_driver中定义,uart_driver的dev_name中定义。nr值为后续的索引。如:如console=ttySAC0,CONFIG_SERIAL_SAMSUNG_UART原创 2022-01-15 18:16:06 · 1474 阅读 · 0 评论 -
linux内核poll函数学习使用源码mark
记录linux poll机制源码记录,基于linux2.4内核,在内核poll函数中使用poll_wait等待完成变量完成,然后在中断中唤醒完成变量。#include <linux/errno.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/modulep原创 2022-01-03 22:32:31 · 393 阅读 · 0 评论 -
linux网桥实现代码走读
拓扑vlan_dev --> br-lan --> IP层 (br本身也会有一个fdb条目)网桥创建/添加节点模块初始化static int __init br_init(void){ int err; /*注册STP协议*/ err = stp_proto_register(&br_stp_proto); /*分配fdb的slab: "bridge_fdb_cache", 变量br_fdb_cache*/ err = br_fdb_init(); /*命名空间原创 2021-08-08 10:49:58 · 1040 阅读 · 0 评论 -
linux系统调用_arm实现深入剖析(上下文保存、参数传递)
前言这里我们不再赘述系统调用的基本原理以及系统调用产生时的函数调用以及系统调用表,直接看arm中的软中断产生及返回时如何保存寄存器上下文、如何陷入内核再返回、如何传参,模式切换做了哪些处理。这里mark一下: EABI和OABI系统调用实现的方式有所不同。陷入内核不同于x86的int 80中断,arm中使用软中断指令swi实现系统调用,直接看swi的处理向量vector_swi:/*=========================================================原创 2021-07-24 10:44:24 · 927 阅读 · 1 评论 -
socket源IP为INADDR_ANY,linux内核何时选择IP
1.通过bind看到原地址保存在inet_addr中2.tcp中connect操作,会设置通过ip_route_connect查路由操作选择srcip;3.udp没有绑定操作,一个socket可以给多个目的发包,不同目的使用的源ip也不一样原创 2021-05-01 18:39:32 · 1379 阅读 · 1 评论 -
linux软中断和系统调用深入研究
arm软中断模式arm7种模式有中断模式,但是并没有软中断模式。那么arm的软中断是什么呢?arm的软中断是arm从用户模式切换到特权模式,也就是linux中从用户态切换到内核态的过程。swi命令触发软中断linux系统中,swi异常向量代码:linux系统调用x86 架构是硬中断int 80,中断号为80来实现系统调用的;arm架构是使用swi命令,使arm切换为软中断模式,执行swi异常向量表中的异常向量。软中断的异常向量arm中异常象量表:异常类型偏移地址(低)偏移原创 2020-12-27 04:02:43 · 2042 阅读 · 2 评论 -
小张学linux内核: 9. slab分配器
概述slab分配器,不是按页进行分配的,而是按字节来分配的。slab分配器向页框分配器也就是伙伴系统申请page,然后进行自己的管理,进行字节的分配,slab分配器为"打通铺"的分配思想。kmalloc,和内核的一些专有的数据结构就是slab分配器管理的。slab分配器最小的粒度是8字节,也只能分配8字节为倍数的内存,申请小于8字节也会按8字节进行分配。特征slab分配器,slab分配器,按照每一个字节大小,维持了3个列表,即满,半满,空的page链表,分配的优先级是先从半满的链表分配,然后是空,如果原创 2020-10-25 01:16:15 · 253 阅读 · 0 评论 -
小张学linux内核: 写时复制COW和malloc的实现
写时复制。https://www.oschina.net/question/234345_48023添加链接描述COW的页设置写保护,试图写写保护的页会进入。do_wp_page原创 2020-09-10 23:44:58 · 708 阅读 · 0 评论 -
小张学linux内核:低速定时器和hrtimer
msleep低速定时器,最低精度一个tick,10ms。高速定时器hrtimer,nanosleep可到纳秒级。原创 2020-08-23 11:48:15 · 684 阅读 · 0 评论 -
小张学linux内核:十四. elf文件的加载和进程切换寄存器的保存
重点关注虚拟内存的切换,pgd,mm_struct, start_code;理清楚这三个概念。原创 2020-08-19 19:05:27 · 317 阅读 · 0 评论 -
小张学linux内核: 调度子系统2实时调度类和睡眠唤醒的抢占
接着上节,带着问题继续研究调度子系统;1.实时进程的调度与抢占?2.sleep结束的线程怎么调度?3.信号唤醒的线程怎么调度?实时进程的调度与抢占重要的两个函数入队列和pick_next函数来研究。带着几个问题来研究。因为调度策略分sched_fifo和sched_RR,这两个调度策略能否共存,优先级如何?如果是sched_RR,那cfs的task还能获取到cpu吗?enqueue入就绪队列存储结构数组链表相比cfs调度类使用红黑树来存储调度实体,rt调度类使用数组链表来存储,每一个优先原创 2020-08-16 12:41:45 · 653 阅读 · 0 评论 -
小张学linux内核:十三.vfork+exec的内核实现
vfork是为了exec而生,vfork不会拷贝父进程的内存空间,和父进程共用内存空间;当执行exec后,它就有了自己的独立的内存空间。针对vfork的两个特点,我们来追踪exec的实现。不copy_mm;–> exec是何时构建新的内存空间的?调用exec后父进程开始执行,exec如何实现?vfork等待task_struct–>vfork_done这个完成变量。调用过程如下带着这两个问题来阅读exec的源码。...原创 2020-08-01 11:57:15 · 437 阅读 · 0 评论 -
小张学linux内核:十一.进程和线程的创建过程
考试题。。。原创 2020-07-26 10:30:34 · 627 阅读 · 0 评论 -
小张学linux内核: 七. 设备树的使用
在很久之前的版本,uboot还需要传machine id和参数区地址给内核,但现在只传递设备树(fdt)的地址给内核了,这些参数全在fdt中做了。uboot将设备树bin文件和kernel加载到内存,然后将fdt地址传给kernel,跳到kernel地址执行。fdt为平坦设备树,即数作为一个一个节点顺序存在bin文件中,不再保持树的形状。我们来看看设备树bin文件dtb的文件结构分头部参数区,内存保留映射区,设备树结构区,和字符串区。当然我们只需要关注设备树的节点存储区,字符串区保存的是属性的名称字符原创 2020-07-08 23:30:56 · 1103 阅读 · 0 评论 -
小张学linux内核:六.内存管理子系统
今天我们开始啃内存管理子系统伙伴系统slab分配器虚拟内存内核空间映射,用户空间内存映射,用户进程内存结构mm_struct;vma;驱动中mmap到用户空间的映射。页表pgd,pmd,pte管理,页请求原创 2020-06-21 21:52:09 · 1215 阅读 · 0 评论 -
小张学linux内核:五.cfs调度类和rt调度类
今天我们来学习调度类cfs和rt调度类cfs调度类rt调度类原创 2020-05-24 18:51:48 · 1343 阅读 · 0 评论 -
小张学linux内核:四.cgroup子系统和组调度
上一节调度子系统中我们看到在分配一个公平调度组函数alloc_fair_sched_group(),是cpu_cgrp_subsys 结构的成员css_alloc :cpu_cgroup_css_alloc调用的。struct cgroup_subsys cpu_cgrp_subsys = { .css_alloc = cpu_cgroup_css_alloc, .css_online = ...原创 2020-05-10 16:55:25 · 1294 阅读 · 1 评论 -
小张学linux内核:三.调度子系统
就这第一章中断子系统和第二章时间子系统,我们进入tick中断处理函数tick_handle_periodic()原创 2020-05-03 12:48:49 · 632 阅读 · 0 评论 -
小张学linux内核:二. 时间子系统
跟着上节,以tick中断为例,探究liunx时间子系统原创 2020-04-26 17:09:46 · 995 阅读 · 0 评论 -
小张学linux内核:一.中断子系统
cpu中断模式1.arm异常向量表arm处理器有7种模式:当中断发生时,进入irq模式。cpu pc值跳转到异常象量表的irq向量执行。arm中异常象量表:异常类型偏移地址(低)偏移地址(高)复 位0x000000000xffff0000未定义指令0x000000040xffff0004软中断0x000000080xffff0008...原创 2020-04-20 01:18:32 · 819 阅读 · 0 评论