linux学习笔记3 初始化的一些补充

linux页表机制管理初始化 linux页表机制的建立分为两个阶段,第一个阶段在启动初始化时,调用汇编代码实现临时的分页;第二阶段在内核初始化时建立完整的完整的页表机制。对于物理地址扩展(PAE)分页机制中,intel通过在她得处理器上把管脚数从32增加到36已经满足了这些需求,寻址能力可以达到64GB。不过,只有引入一种新的分页机制把32位线性地址转换为36位物理地址才能使用所增加的物理地址。linux为对多种体系的支持,选 阅读详情

在kernel_init里会调用
do_basic_setup();按照level依次调用moduleinit()声明过的模块初始化函数来初始化编译进内核的模块
在随后的init_post()里会起init进程,会加载各个动态模块,同样也是module_init()声明的函数
动态模块的makefile是 obj-m:*.0
静态是 obj-y:*.0
在menuconfig里也可以看到,打M和Y的。

那么,为什么不是在basic_setup里调用呢?


insmod这个工具其实是调用了sys_init_moudle()来给动态模块分配内存空间,并装载模块的符号表到内核符号表,调用初始化函数初始化模块。
也就是说在insmod之前,内核符号表里是没有动态模块的符号表的,因此在basic_setup时,没有找到对应地址的初始化函数,所以没有初始化。



init进程的主函数在/system/code/init/init.c
依次加载了   init.rc  init.*.rc init.*.3rdparty.rc 
init_parse_config_file("/init.rc");

然后触发 init和boot,
 action_for_each_trigger("init", action_add_queue_tail);
    action_for_each_trigger("boot", action_add_queue_tail);
在*.rc文件里我们可以看到:
on boot
    insmod /system/sps/PIXCIR/ko/pixcir_i2c_ts.ko
当有上述调用的时候(boot),就会触发insmod,就会加载sps目录下对应模块的ko。
这样,动态加载的模块就会被加载到内核中


3rd下的文件夹下,均有一个叫init.3rdparty.rc的文件,在lbuild模块的时候,会被加入总的init.3rdparty.*.rc,并依次被init进程加载。
lbuild模块后会将编译生成的*.ko放到指定的位置,一般大多数都在/system/sps/**/ko/ 。



Linux虚拟文件系统(内核初始化<二>) 这部分主要对linux虚拟文件系统内核初始化部分做些补充。 关于shrinker,inode和dentry cache初始化阶段都需要注册自己的shrinker,用于缩减cache。两个操作原理类似。 shrinker数据结构介绍 /* * A callback you can register to apply pressure to ageable caches. * * 'shr 阅读详情

相关推荐

Linux GIC 的初始化

原创文章,转载请注明出处.Linux中断的初始化流程:Linux kernel的启动入口是start_kernel(), 在init/main.c中,start_kernel()中有一系列初始化操作,比如:boot_cpu_init(),setup_arch(&amp;command_line),mm_init()等, 本文主要分析init_IRQ()__irqchip_of_table实际为静态...

pandy_gao的博客 2428

mbedtls编译提示crypto/3rdparty不存在

最新版本的mbedtls需要按照README.md的要求去执行一次crypto code同步的git操作,执行完之后再去执行cmake. 或make均可以编译通过。 当前编译的环境安装python执行make check也可以测试通过当前的所有case. README.md explain how to compile the new version mbedtls Getting files ...

天使之翼 1257

Linux系统中DDR3硬件初始化实验

第二:此工具有一个默认的配置文件,为execl表,通过此表可以设置板子的DDR信息,最后生成一个.inc结尾的DDR初始化脚本文件。今天的话,主要和大家聊一聊,如何使用Cortex-A芯片自带的RAM,很多时候要运行Linux的话是完全不够用的,必须要外接一片RAM芯片,驱动开发板上的DDR3。综上所述,RAM速度快,可以直接和CPU进行通信,但是掉电以后数据会丢失,容量不容易做大。第四:对此工具进行简单的设置,即可开始DDR测试,一般新阿做校准,因为不同的PCB其结构不同,必须做一次校准,

嵌入式技术开发 1465

Linux安装anaconda3是否初始化的区别

Linux安装anaconda3提示是否希望安装程序通过运行conda init来初始化Anaconda3? Do you wish the installer to initialize Anaconda3 by running conda init? 官方建议的是选yes,那么选择yes和no有什么区别呢? 1、选择yes: 选择yes的话,bashrc文件中会添加以下内容,这样在打开终端时自...

qq_41126685的博客 6万+

PaddleOCR实战:如何在CentOS 8.5上搭建高性能OCR识别环境

本文详细介绍了在CentOS 8.5系统上搭建高性能PaddleOCR识别环境的完整指南。从系统环境准备、PaddlePaddle框架部署到PaddleOCR的定制化安装与性能优化,提供了针对生产环境的解决方案,包括GPU/CPU环境配置、内核参数调优及常见问题排查,帮助用户实现高效OCR识别。

weixin_29223603的博客 349

超详细YOLOv8实例分割全程概述:环境、训练、验证与预测详解

这篇博客提供了一个全面的指南,介绍了如何使用 Ultralytics YOLOv8-seg 系列模型进行对象检测和分割任务。内容从环境搭建、模型选择、训练、验证到预测的完整流程都有详细说明。为想要使用 YOLOv8-seg 系列模型的开发者提供了一站式的解决方案。它不仅涵盖了从环境配置到模型部署的详细步骤,还解释了如何解读和使用模型输出,使得用户能够根据自己的需求选择合适的模型,并能够有效地训练和评估它们。

CDBmax的博客 6万+

Linux 中断管理之ARM GIC V3 初始化

1.ARM GIC V3中断控制器介绍 GIC(Generic Interrupt Controller)是一个通用的中断控制器,用来接收硬件中断信号,并经过一定处理后,分发给对应的CPU进行处理。GIC V3是其中一个版本,支持的中断类型如下表: 中断类型 中断号 描述 SGI (Software Generated Interrupt) 0-15 ...

wyy4045的专栏 4370

服务器测试之GPU基础汇总

GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”。一个专门的图形核心处理器。GPU是显示卡的“大脑”,决定了该显卡的档次和大部分性能,同时也是2D显示卡和3D显示卡的区别依据。可以形象的理解为90%的ALU(运算单元),5%的Control(控制单元)、5%的Cache(缓存单元)GPU的设计原理——总结为大量的简单运算。

qq_41897488的博客 2万+

学习笔记——Linux线程(补充)

针对上一小节内容作补充: 学习笔记——Linux线程针对上一小节中的demo5示例作静态宏使用的说明 补充二:demo5示例的测试 命令截图如下:然后cat ret.txt 文本可以看到100条记录

打不倒的程序猿 161

基于TI MSPM0的PS2双轴按键摇杆模块ADC+GPIO驱动移植实战

本文详细介绍了在TI MSPM0微控制器上驱动PS2双轴按键摇杆模块的完整实战流程。通过SysConfig图形化工具配置ADC与GPIO引脚,并编写了包含ADC采样、按键检测及数据处理的驱动代码,实现了对摇杆X/Y轴模拟量及按键数字量的稳定读取,为嵌入式控制项目提供了可直接移植的解决方案。

weixin_42465140的博客 83

b站视频链接快速获取

快速获取b站视频数据

qq_45889931的博客 7766

Linux 3.10 ARM Device Tree 的初始化

[转] Linux 3.10 ARM Device Tree 的初始化 本文代码均来自标准 linux kernel 3.10,可以到这里下载 https://www.kernel.org/ 以 arch/arm/mach-msm/board-dt-8960.c 为例,在该文件中的 msm_dt_init 函数的作用就是利用 dt(device tree)结构初始化 platform device...

xiaozi0221的博客 213

superpowers-中文使用说明

《obra/superpowers:AI辅助开发的流程纪律工具集》 摘要:obra/superpowers是一套面向AI辅助软件开发的系统化流程规范,包含14个核心技能,强调"先理解后行动"的纪律性开发方法。该工具集定义了从头脑风暴到代码评审的完整工作流,要求严格遵循测试驱动开发、子代理隔离执行等原则。核心特色包括:1) 任何实现前必须完成设计和评审;2) 采用红-绿-重构的TDD循环;3) 复杂任务通过独立子代理串行处理;4) 所有产出需经过双重验证(规格合规+代码质量)。该工具集特别注重文档化和可验证性

qq_22786633的博客 765

Linux系统初始化

学习Linux内核的原因 我个人是软件工程专业的学生,但是对计算机是怎么运行的一直都有疑惑。 为什么一通电计算机就能运行了,处理各种任务。 如果对计算机底层知识的不熟悉和不理解的话,这就造成了在了解各种中间件或者软件的底层原理的时候,会比较吃力,对于程序运行的具体情况也不太清楚。 我个人目前认为只有对程序在计算机中的具体执行过程有着深入的了解,才能写出性能更好、更健壮性的代码,所以开始学习Linux内核。 Linux内核学习方法 资料 《趣谈Linux内核 》 刘超 极客时间专栏 Linux源码 路线

qq_40276626的博客 4518

泰凌微8258入门教程 环境篇④——开发板+烧录器 8258mesh新手套件购买

工欲善其事,必先利其器。 淘宝链接:https://item.taobao.com/item.htm?

4128

【系统架构设计师】2025年下半年真题论文回忆版及写作要点

本文摘要围绕云原生数据库、性能测试、无服务器架构和秒杀场景等关键技术进行论述。云原生数据库通过容器化、微服务和自动化运维实现弹性扩展;性能测试需要规划测试场景并关注响应时间等关键指标;无服务器架构以事件驱动为核心,简化开发流程;秒杀场景需组合运用扩容、缓存、限流等技术应对高并发。这些技术方案为构建现代高可用系统提供了重要参考。

数据知道的博客 6157

Linux的进程相关学习笔记(持续更新补充)

本文介绍了Linux进程管理中常见的孤儿进程和僵死进程现象,以及相关处理函数。孤儿进程是父进程终止后由内核自动接管给init进程(PID=1)的子进程,内核通过修改子进程PCB中的父进程ID实现。僵死进程则是已终止但未被父进程回收资源的子进程,会占用系统资源。文章详细讲解了wait()和waitpid()函数的使用方法,以及如何通过它们防止僵死进程出现。此外,还对比了进程创建函数fork()和vfork()的区别,并分析了exit()、_exit()等进程终止方式的特性。全文通过生动的比喻和技术解释,帮助理

qq_52763245的博客 1318

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

全面解析Linux 内核 3.10.x - 板级初始化 - setup_arch

From: 全面解析Linux 内核 3.10.x - 本文章完全基于MIPS架构 九层之台,起于垒土 千里之行,始于足下 - 老子从dmesg的第一条打印信息说起 - Linux banner且看我的ubuntu 12.04的第一条打印语句Linux version 3.11.0-15-generic (buildd@allspice) (gcc version 4.6.3 (Ubuntu/ Li

何文的专栏 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Linux 中断 —— GIC 初始化

GIC-V2在 Linux 层的初始化分析 1、GIC 的 device node和GIC irq chip driver的匹配过程 (1)irq chip driver中的声明 在drivers\irqchip\irqchip.h文件中定义了 IRQCHIP_DECLARE : #define IRQCHIP_DECLARE(name, compat, fn) OF_DECL...

StephenZhou 4293

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Linux NVMe Driver学习笔记之2:初始化

上回,我们学习了Linux NVMe驱动的架构以及nvme_core_init的相关内容(),本文我们主要学习一下Linux NVMe驱动初始化过程中都做了哪些事情。

存储随笔 2641

linux内核启动过程3:内核初始化阶段

上一篇<<linux内核启动过程2:保护模式执行流程>>分析了保护模式启动过程以及bzImage的解压入口函数,本篇继续分析内核启动过程,从保护模式到C代码初始化。 startup_64   进入arch/x86/kernel/head_64.S,分析startup_64函数: .text __HEAD .code64 SYM_CODE_START_NOALIGN(startup_64) UNWIND_HIN.

大昱的博客 1895

Linux 模块的初始化过程

内核模块gnu.linkonce.this_module section简介

小立仔 2385

Linux操作系统学习笔记(三)内核初始化

前言   前文分析到Linux内核正式启动,完成了实模式到保护模式的切换,并做好了各种准备工作。下来就要看开始内核初始化工作了,源码位置位于init/main.c中的start_kernel(),源码如附录所示。这包括了一系列重要的初始化工作,本文会介绍其中一部分较为重要的,但是详细的介绍依然会留在后文各个模块的源码学习中单独进行。本文的目的在于承接上文给出一个从内核启动到各个模块开始运转的过程介绍,而不是详细的各部分内容介绍。 创建0号进程:INIT_TASK(init_task) 异常处理类中断

ty的博客 1918
上一篇: linux学习笔记2--diver初始化及设备模型
下一篇: [android学习1]横竖屏切换的机理
有梦想的胖子
博客等级 码龄16年 51粉丝 26原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值