LinuxGod

LinuxGod.net
Linux大神网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

第一部分ARMLinux内核——分析内核前需要做的准备

2023年4月24日 528点热度

第一部份ARMLinux内核——分析内核前须要做的打算

第1章内核介绍及2.6版和3.2版之间的差别

1.1内核的诞生、作用以及内部结构

1.1.1Linus创造的Linux

1.1.2由多种子系统集成运行的单内核

1.1.3全世界最知名的通用操作系统

1.2内核2.6版和3.2版之间的差别

第2章内核建立系统

2.1内核初始化

2.2内核配置

2.3内核建立

2.4内核安装

第3章了解ARM处理器

3.1处理器概要和特点

3.2处理器构架与核心

3.3处理器命名规则

3.4处理器内部结构

3.5处理器模式和寄存器

3.6处理器异常

3.7硬件扩充功能

3.7.1缓存

3.7.2显存管理装置

3.7.3协处理器

第4章建立剖析环境

4.1下载并安装Linux源内核

4.1.1下载源内核

4.1.2安装源内核

4.2安装ctags+cscope

4.2.1用ctags制做源代码标签

4.2.2制做cscope标签数据库

4.3vim插件下载及环境设置

4.3.1下载vim插件

4.3.2vim+plugin的环境结构

4.3.3vim环境设置

4.4查看源码剖析环境工具

第二部份内核的启动——start_kernel调用方式

第5章打算解压内核

5.1步入启动加载后结束首个启动——start标签

5.2BSS系统域初始化——not_relocated标签

5.3激活缓存——cache_on标签

5.4页目录项初始化——__setup_mmu标签

5.5指令缓存激活及缓存策略适用——__common_mmu_cache_on标签

第6章从压缩的内核zImage还原内核映像

6.1解压内核并防止覆写——wont_overwrite、decompress_kernel标签

6.2调用已解压内核——call_kernel标签

6.3缓存清除及消除——cache_clean_flush标签

6.4缓存禁用——cache_off标签

第7章调用start_kernel

7.1初始化指向——stext标签

7.2处理器信息搜救——__look_processor_type

7.2.1__lookup_processor_type标签

7.2.2__proc_info_begin和__proc_info_end中保存的信息

7.2.3在MMU禁用状态下将虚拟地址转换为化学地址

7.2.4查找proc_info_list结构体并比较处理器信息

7.3搜救我的型号——__lookup_machine_type

7.3.1__lookup_machine_type标签

7.3.2保存在__arch_info_begin和__arch_info_end中的machine_desc信息及访问路径

7.3.3查找machine_desc结构体并比较机器信息

7.4源自启动加载项的atags——__vet_atags标签

7.5对虚拟显存进行基础创建——__create_page_tables标签

7.6设置核心(core)——v6_setup标签

7.7打开MMU并使用虚拟地址——__enable_mmu/__turn_mmu_on标签

7.8跳转至start_kernel——__mmap_switched标签

第三部份内核的执行——内核的起始与结束位置

第8章start_setup_processor_id~lock_kernel

8.1smp_setup_processor_id、lockdep_init、debug_objects_early_init

8.1.1smp_setup_processor_id

8.1.2lockdep_init

8.1.3debug_objects_early_init

8.2栈溢出感应——__boot_init_stack_canary

8.3初始化提供进程集成方式的cgroup——__cgroup_init_early

8.3.1cgroupfs_root和cgroup的关联初始化——init_cgroup_root

8.3.2初始化子系统——cgroup_init_subsys

8.4禁用IRQ

8.5early_boot_irqs_off、early_init_irq_lock_class

8.6大内核锁——lock_kernel

第9章注册针对时钟风波的处理器

9.1函数的申明和定义——tick_init

9.2注册处理风波的处理器——_clockevents_register_notifier

9.2.1为clockevents_lock添加载流子锁

9.2.2clockevents_chain生成原理

9.2.3在clockevents_chain中注册tick_notifier的方式

9.2.4对clockevents_lock解除载流子锁的原理

第10章在CPU位图中注册当前运行CPU/初始化HIGHMEM管理

10.1在包含热拔插信息的位图上添加执行init_task的CPU——boot_cpu_init

10.2管理高档显存——page_address_init

第11章整体指向——setup_arch

第12章unwind_init~early_trap_init

12.1栈回溯——unwind_init

12.2求出包含机器信息的machine_desc结构体——setup_machine

12.3处理ATAG信息——setup_arch

12.4处理启动参数——parse_cmdline

12.5建立源代码树——request_standard_resources

12.6初始化cpupossible位图——smp_init_cpus

12.7用栈指定各ARM异常模式——cpu_init

12.8初始化以处理异常——early_trap_init

12.9查看中断处理器函数

12.9.1调用IRQ处理器——asm_do_IRQ

12.9.2返回中断之前——ret_to_user标签

第13章设置处理器——setup_processor

13.1查看setup_processor结构

13.2查找CPUID——read_cpuid_id

13.3查找处理器信息——lookup_processor_type

13.4查找处理器结构信息——cpu_architecture

13.5查找处理器缓存类型_cacheid_init

13.6调用处理器初始化函数——cpu_proc_init

第14章打算显存分页——paging_init

14.1查看paging_init的整体结构

14.2设置显存类型表——build_mem_type_table

14.3检验显存信息——sanity_check_meminfo

14.4打算页表——prepare_page_table

14.4.1prepare_page_table

14.4.2Linux的分页结构

14.4.3求出页目录项

14.4.4pmd_clear

14.5设备区域映射打算——devicemaps_init

14.6打算使用高档显存——kmap_init

14.7初始化零页

14.7.1分配显存——__alloc_bootmem_nopanic

14.7.2在指定节点使用fallback分配显存——alloc_bootmem_core

14.7.3将虚拟地址变换为page结构体——virt_to_page

14.8保持数据缓存一致性——flush_dcache_page

第15章在启动时初始化显存分配器

15.1bootmem函数流和数据结构

15.2查看bootmem_init结构

15.3查找虚拟显存盘位置——check_initrd

15.4将节点的BANK信息反映到页目录——bootmem_init_node

15.4.1map_memory_bank

15.4.2bootmem_bootmap_pages

15.4.3find_bootmap_pfn

15.4.4node_set_online

15.4.5NODE_DATA宏

15.4.6init_bootmem_node

15.4.7free_bootmem_node

15.4.8reserve_bootmem_node

15.5排除0号节点——reserve_node_zero

15.6排除虚拟显存盘节点——bootmem_reserve_initrd

15.7设置为无可用页——bootmem_free_node

15.8初始化free_area区域

15.8.1free_area结构体

15.8.2free_area_init_node

15.8.3free_area_init_core

15.8.4init_currently_empty_zone

15.8.5memmap_init

第16章mm_init_owner~preempt_disable

16.1设置显存拥有者——mm_init_owner

16.2保存命令行——setup_command_line

16.3初始化per-cpu数据——setup_per_cpu_areas

16.4求CPU个数——setup_nr_cpu_ids

16.5注册SMP上的启动进程——smp_prepare_boot_cpu

16.6初始化数据结构以使用调度程序——sched_init

16.6.1为集合调度中使用的task_group的sched_entity结构体和runqueue结构体分配显存

16.6.2初始化root_domain、rt_bandwidth、task_group相关数据结构

16.6.3初始化系统上所有可用CPU的就绪队列

16.6.4初始化当前任务的调度相关值与注册针对负载均衡的中断处理器

16.7容许内核占领和制止占据——preempt_enable/preempt_disable

第17章建立借用显存的后台

17.1在build_all_zonelists中操作的一些数据结构

17.2查看build_all_zonelists结构

17.3决定zone的列表形式——set_zonelist_order

17.4建立备用列表和备用位图——__build_all_zonelists

17.4.1build_zonelists

17.4.2build_zonelist_in_node_order

17.4.3build_zonelists_in_zone_order

17.4.4build_thisnode_zonelists

17.4.5build_zonelists_cache

17.5输出备用列表信息——mminit_verify_zonelist

17.6指定处理页分配恳求的节点——cpuset_init_current_mems_allowed

17.7求空页数——nr_free_pagecache_pages

17.8页联通性

第18章page_alloc_init~pidhash_init

18.1处理用于热拔插CPU的页——page_alloc_init

18.2处理console参数——parse_early_param

18.3处理特殊参数——parse_args

18.4确认中断处理是否激活——irqs_disable

18.5内核异常列表定义——sort_main_extable

18.6初始化RCU机制——rcu_init

18.7打算使用IRQ——early_irq_init

18.8初始化中断——init_IRQ

18.9建立迅速搜救进程信息的结构——pidhash_init

第19章init_timers~page_cgroup_init

19.1初始化计时器——init_timers

19.1.1timers_cpu_notify

19.1.2register_cpu_notifier

19.1.3open_softirq

19.2初始化高帧率计时器——hrtimers_init

19.3注册softirq的反弹函数——softirq_init

19.4设置xtime——timekeeping_init

19.5初始化硬件计时器——time_init

19.6初始化时钟时间——sched_clock_init

19.7激活CPU的中断处理——local_irq_enable

19.8测量用作根文件系统的init虚拟显存盘

19.9初始化以分配动态显存——vmalloc_init

19.10预先初始化目录项和索引节点缓存——vfs_caches_init_early

19.11初始化cpuset子系统——cpuset_init_early

19.12初始化显存子系统——page_cgroup_init

第20章中止bootmem分配器并替换为伙伴系统

20.1mem_init函数的调用关系及其与数据结构的互相关系

20.2查看mem_init结构

20.3记录到不存在的显存位图——free_unused_memmap_node

20.4移交至普通空白页伙伴系统——free_all_bootmem_node

20.4.1register_page_bootmem_info_node

linux内核源代码情景分析 pdf_linux内核源代码情景分析pdf_linux内核网络栈源代码情景分析 pdf

20.4.2free_all_bootmem_core

20.4.3__free_pages_bootmem

20.4.4__free_pages

20.4.5free_hot_cold_page

20.4.6__free_pages_ok

20.5移交到高档显存空白页伙伴系统——free_area

第21章初始化以支持CPU热拔插

21.1初始化cpu_hotplug成员变量——cpu_hotplug_init

21.2CPU的联机→脱机转换处理

第22章激活slab显存分配器——kmem_cache_init

22.1slab分配器的概念及结构体

22.2slab分配器的重要结构体——kmem_cache和kmem_list3

22.3查看kmem_cache_init结构

22.4初始化initkmem_list3〔〕、cache_cache、nodelist〔〕

22.5联接kmem_list3字段并决定cache压缩时间——set_up_list3s

22.6求出用于cache扩充/压缩的页次序——cache_estimate

22.7malloc_sizes和cache_names

22.8生成cache——kmem_cache_create

22.8.1kmem_cache_zalloc

22.8.2calculate_slab_order

22.8.3setup_cpu_cache

22.8.4enable_cpucache

22.9生成arraycache_init,kmem_list3cache

22.10用kmalloc函数分配的显存取代静态分配的显存

第23章kmem_trace_init~security_init

23.1生成IDalloccator缓存——idr_init_cache

23.2初始化pageset——setup_per_cpu_pageset

23.3指定交叉节点——numa_policy_init

23.4结束计时器初始化——late_time_init

23.5测定BogoMIPS——calibrate_delay

23.6制做位图以分配进程辨识符(ID)——pidmap_init

23.7初始化优先树的数据结构——prio_tree_init

23.8生成anon_vmaslab缓存——anon_vma_init

23.9为对象的每位用户赋于资格——cred_init

23.10初始化数据结构以使用fork函数——fork_init

23.11初始化生成进程的缓存——proc_caches_init

23.12初始化缓冲缓存——buffer_init

23.13打算秘钥——key_init

第24章初始化VFS中使用的多种缓存——vfs_cache_init

第25章radix_tree_init~ftrace_init

25.1基数树相关数据结构初始化——radix_tree_init

25.2打算使用讯号——signals_init

25.3注册并挂载proc文件系统——proc_root_init

25.4注册无法初始化的子系统——cgroup_init

25.5重置top_cpuset并注册cpuset文件系统——cpuset_init

25.6初始化任务统计信息插口——delayacct_init

25.7为管理延后信息做打算——delayacct_init

25.7.1延后审计

25.7.2delayacct_init

25.7.3task_delay_info结构体和delayacct_tsk_init

25.8检测写缓冲一致性——check_bugs

第26章同步显存与后备储存——pagewriteback

26.1页回写机制

26.2激活页回写——pdflush_init

26.3pdflush线程

26.4指定页回写函数

26.5周期性页回写和强制性页回写反弹函数调用方式

26.5.1周期性页回写函数——wb_kupdate

26.5.2强制性页回写函数——background_writeout

26.6初始化周期性页回写

第27章查看启动内核的最终函数结构——rest_init

第28章生成执行函数的内核线程——kernel_thread

28.1查看kernel_thread结构

28.2生成处理器的网段——do_fork

28.3复制父进程——copy_process

第29章唤起新生成的任务

29.1查看wake_up_new_task结构

29.2获取任务的就绪队列——task_rq_lock

29.3改善任务的优先次序——effective_prio

第30章打算使用内核

30.1将当前进程转移到其他CPU——sched_init_smp

30.2结束系统整体初始化——do_basic_setup

30.2.1生成执行rcu_sched_grace_period的线程——rcu_init_sched

30.2.2生成events工作队列——init_workqueues

30.2.3初始化cpuset子系统的top_cpuset——cpuset_init_smp

30.2.4生成khelper工作队列——usermodehelper_init

30.2.5初始化Linux的设备模型——driver_init

30.2.6在proc文件系统注册irq信息——init_irq_proc

30.2.7调用内核未知子系统——do_initcalls

30.3为初始化以后的操作做打算——init_post

第31章内核线程守护进程

31.1内核线程守护进程——kthreadd

31.2忽视讯号——ignore_signals

31.3设置nice值——set_user_nice

31.4搜索执行任务的CPU——set_cpus_allowed_prt

31.5搜索包含列表的实际结构体位置——list_entry

31.6生成内核线程——create_kthread

第32章find_task_by_pid_ns~cpu_idle

32.1用PID搜索任务——find_task_by_pid_ns

32.2解除BKL——unlock_kernel

32.3将调度类变更为idle——init_idle_bootup_task

32.4RCU机制激活完成通知——rcu_scheduler_starting

32.5激活内核占据——preempt_enable_no_resched

32.6执行进程调度表——schedule

32.7Linux启动万里长征的终点——cpu_idle

附表

附表A汇编语言、gas关键词总结

附表B内核剖析常见API

附表C探讨ext2文件系统

附表DLinux线程模型

附表E链接器脚本文件结构

杂记

索引

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: cpu参数 cpu时间 初始化列表 生成函数 结构体类型
最后更新:2023年4月24日

Linux大神网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux大神网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
Linux下如何使用vsftpd构建后的FTP服务器有哪些特点 Gcc编译器编译语言:C运行库C语言标准 提高网络编程功力的不二之选——Socket/IP协议 C语言教程之linuxC编程实战:linux电子书 #Ubuntu查看防火墙的状态#添加开放普通端口开放22:开启完成 Ubuntu18.04上安装GCC编译器通过终端执行以下命令命令 2019年Linux操作系统启动流程介绍-苏州安亲宝 如何安装Windows10下的WSL和mkfontdir命令? 获取内核源码:阅读linux内核设计的艺术 如何操作Linux启动盘?的安装目录信息详解 (多图预警)多篇Linux(centos7)安装流程 Ubuntu22.04最终发布最终RC版本号召大家积极进行进行测试 如何在Linux安装字体中用到各种命令如mkfontscale? 自带几个预设,你可以在Numix、Arc或Materia主题样式上创建自己的GTK主题 (架构)为什么要在Linux下写C++程序? Ubuntu中各种类型频繁发生的更新错误以及修复方法 图1.3编程的7个步骤,你知道吗? 虚拟机Linux安装教程及安装流程介绍-苏州安嘉 常用且流行的Linuxshell脚本编写工具:/Vim编辑器 Linux下统计C语言程序执行时间的几种常用方法
:身份证明检索失败开始->进程的配置文件微控制器简化存储数据的组织形式如何从Elrepo或者源代码来安装最新的Linux内核4.0Linux下ldd命令的使用方法本身不是一个程序炫龙毁灭者DC还是不能关机和重启内核的窝如何在Ubuntu下修改root用户的密码?Linux系统迁移到另一个硬盘小时就迁移完成了炫龙毁灭者DC还是不能关机和重启内核的窝如何使用Python处理文件数据-程序员必读结合虚拟化技术分析Linux系统的一般执行过程Linux中常用的域名解析命令包括哪些?(回答)炫龙毁灭者DC还是不能关机和重启内核的窝VMware如何安装UbuntuWorkstation虚拟机的博客~(官方个人免费版)开发嵌入式Linux按键驱动程序开发-电脑版软件功能强大,界面简洁明晰、操作方便快捷CentOS8安装新的java环境卸载老版本下载环境介绍Android终端仿真器安装Python的注意事项!!在Linux系统中安装和配置JDK有两种方法可以选择当前Linux系统的版本的方法及使用方法系统管理员使用的系统级别的管理命令和程序包
linux中makefile文件 cdeveloper的第21篇原创技术文章建议横屏Makefile简介 引言MMC(MultitmediaCard):底层驱动的实现 chown命令chmod命令Linux/Unix的文件调用权限分为三级 Linux内核更新包配置Ubuntu环境配置环境 Android终端仿真器安装Python的注意事项!! Oracle10G数据库系统备份数据的备份时间与系统时间的关系 Ubuntu下换内核的过程及详细分析内核操作分析 img创建一个cronjob要创建,你可以使用crontab命令 5假设你的Linux服务器上有一个超大的ISO镜像文件 Running态进程运行的几种状态,你知道吗? Asahi团队将手伸向M2芯片,支持M1Ultra的MacStudio 如何增加一块硬盘虚拟机插硬盘分区格式化一、命令查看设备情况 来说一说Python的第三方第三方库可以按照python打包的目录结构要求来搭建 Ubuntu下安装nvidia显卡驱动获取显卡的型号图 一下远程syslogd的配置及应用 不同版本的内核源码下载页面介绍:主线版(mainline) 如何在linux下操作和查看用户状态和进程状态? Linuxcentos7虚拟机装找Linux镜像找的!找了好多都是度盘! 不懂这些硬盘分区的知识,怎么能够安装操作系统 (编程)编程的更进一步更进一步.1--2
标签聚合
软件 操作 文件目录 linux服务器 虚拟机 应用 内核 命令 文件 linux系统
书籍
课程
技术群
技术干货大合集↓
  • 2023年12月 / 15篇
  • 2023年11月 / 88篇
  • 2023年10月 / 94篇
  • 2023年9月 / 90篇
  • 2023年8月 / 93篇
  • 2023年7月 / 94篇
  • 2023年6月 / 90篇
  • 2023年5月 / 93篇
  • 2023年4月 / 90篇
  • 2023年3月 / 129篇
  • 2023年2月 / 84篇
  • 2023年1月 / 161篇
  • 2022年12月 / 187篇
  • 2022年11月 / 76篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源

COPYRIGHT © 2024 linuxgod.net ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang