自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(432)
  • 收藏
  • 关注

原创 慢慢欣赏arm64内核启动30 __primary_switched之第三部分

将 x21 的值存放在 __fdt_pointer。而 __fdt_pointer 的定义如下。第1行涉及宏定义 str_l,其定义如下。

2024-10-17 09:06:22 411

原创 慢慢欣赏arm64内核启动29 __primary_switched之第二部分

展示代码 adr_l x8, vectors // load VBAR_EL1 with virtual msr vbar_el1, x8 // vector table address isb stp xzr, x30, [sp, #-16]! mov x29, sp#ifdef CONFIG_SHADOW_CALL_STACK adr_l scs_sp, init_shadow_call_stack // Set shadow call stack#endif分析代码

2024-10-16 09:10:47 207

原创 慢慢欣赏arm64内核启动28 __primary_switched之第一部分

第1行到第5行是注释,提示这段代码是在使能 MMU 之后执行。入参是 x0,即 __PHYS_OFFSET。第7行将 init_thread_union 的页面物理地址存放在 x4。

2024-10-14 09:01:03 823

原创 慢慢欣赏arm64内核启动27 primary_entry之__primary_switch代码第三部分

该宏定义在《慢慢欣赏arm64内核启动10 primary_entry之set_cpu_boot_mode_flag》和《慢慢欣赏arm64内核启动18 primary_entry之__create_page_tables代码第五部分》有介绍。在 ARM64 架构中,页面大小通常是 4KB,所以这个指令实际上是获取 __PHYS_OFFSET 地址所在的 4KB 页面的起始地址。这样我们到了第34行,第34行将 __primary_switched 的内核链接地址存放在了 x8。

2024-10-12 09:24:58 204

原创 慢慢欣赏arm64内核启动26 primary_entry之__primary_switch代码第二部分 __enable_mmu

x1 是 TTBR1_EL1 的赋值,《慢慢欣赏arm64内核启动25 primary_entry之__primary_switch代码第一部分》里面有描述。x0 是 SCTLR_EL1 的赋值,《慢慢欣赏arm64内核启动24 primary_entry之__cpu_setup代码第六部分》里面有描述。该函数的作用是使能 MMU,前期做了那么多的工作,就是为了这一刻。该函数需要两个入参,x0 和 x1。第1行到第12行是注释。

2024-10-08 09:03:38 498

原创 慢慢欣赏arm64内核启动25 primary_entry之__primary_switch代码第一部分

此外,CONFIG_RANDOMIZE_BASE是CONFIG_DYNAMIC_MEMORY_LAYOUT和CONFIG_RANDOMIZE_MEMORY的先决条件。禁用CONFIG_RANDOMIZE_BASE可以通过在内核启动参数中添加nokaslr来实现,这会导致内核的加载地址在每次启动时都是相同的,从而降低了安全性。总的来说,CONFIG_RANDOMIZE_BASE是一个重要的安全特性,可以防止多种类型的攻击,特别是那些依赖于内核地址预测的攻击。我们先不分析这个属性,我们关注启用 MMU。

2024-10-08 08:34:46 274

原创 慢慢欣赏arm64内核启动24 primary_entry之__cpu_setup代码第六部分

第1行到第3行是注释,准备寄存器 SCTLR,SCTLR 是什么东东我们继续分析。第4行涉及宏定义 SCTLR_EL1_SET,定义如下。

2024-09-26 09:07:32 914

原创 慢慢欣赏arm64内核启动23 primary_entry之__cpu_setup代码第五部分

CONFIG_ARM64_HW_AFDBM 是 Linux 内核的一个配置选项,用于启用 ARMv8.1 架构扩展中的硬件功能,该功能支持硬件更新页面表项中的访问(Access)和脏(Dirty)标志位。同样,如果向设置了 DBM 位的只读页面写入,将清除只读位(AP[2]),而不是触发权限故障。当在 TCR_EL1 寄存器(HA 和 HD 位)上启用此功能时,如果访问了清除了 PTE_AF 位的页面,则会设置该位,而不是触发访问标志故障。第2行到第6行为注释,含义为使能“硬件访问标记位”。

2024-09-25 09:06:37 584

原创 慢慢欣赏arm64内核启动22 primary_entry之__cpu_setup代码第四部分

在该宏定义里面,ID_AA64MMFR0_EL1, AArch64 Memory Model Feature Register 0。第4行涉及到宏定义 tcr_compute_pa_size 和 TCR_IPS_SHIFT。提供 EL1 异常模式下 内存模型和内存管理的信息,涉及到的宏定义如下。第1到第3行是注释,含义是设置 TCR_EL1 的 IPS 域。其中,tcr_compute_pa_size 的定义如下。我们可以看到 bit[3] 始终为0, 所以可以忽略掉。

2024-09-23 09:19:07 722

原创 作文笔记15 点面结合

修辞手法:比喻(把一个事物比作另一个事物,好处是形象生动),拟人(给人以外的事物人的特征,好处是情感共鸣),排比(不少于3句,句式结构类似郎朗上口,句意相关,好处是气势节奏强,深化中心)。好处是强化描写的层次感,既有整体形象描写,又凸显人物个性特点。表现手法:正面描写(对描写对象直接描写),侧面描写(描写对象周围的景物)另外对比,象征,借景抒情,托物言志等等。景色描写方法:动态描写,静态描写,动静结合。人物描写方法:外貌,语言,动作,神态,心理。环境描写方法:自然环境,社会环境。

2024-09-22 21:07:04 159

原创 慢慢欣赏arm64内核启动21 primary_entry之__cpu_setup代码第三部分

展示代码 /* * Set/prepare TCR and TTBR. We use 512GB (39-bit) address range for * both user and kernel. */ mov_q x10, TCR_TxSZ(VA_BITS) | TCR_CACHE_FLAGS | TCR_SMP_FLAGS | \ TCR_TG_FLAGS | TCR_KASLR_FLAGS | TCR_ASID16 | \ TCR_TBI0 | TCR_A1 | TC

2024-09-13 09:13:13 982

原创 慢慢欣赏arm64内核启动20 primary_entry之__cpu_setup代码第二部分

【代码】慢慢欣赏arm64内核启动20 primary_entry之__cpu_setup代码第二部分。

2024-09-04 08:51:05 627

原创 慢慢欣赏arm64内核启动19 primary_entry之__cpu_setup代码第一部分

也就是说,位域bit12设置为1时,在EL0异常等级下,访问 MDCCSR_EL0, DBGDTR_EL0, DBGDTRTX_EL0, and DBGDTRRX_EL0 将会切换到 EL1 异常等级。第14, 15行涉及的寄存器 CPACR_EL1, Architectural Feature Access Control Register 的位域 bits[21:20]daifclr 涉及到 pstate 寄存器的 bits[9:6],分别是 DAIF,8对应 bit[9],表示清除调试掩码。

2024-09-02 09:41:38 748

原创 慢慢欣赏arm64内核启动18 primary_entry之__create_page_tables代码第五部分

【代码】慢慢欣赏arm64内核启动18 primary_entry之__create_page_tables代码第五部分。

2024-08-24 15:43:32 908

原创 慢慢欣赏arm64内核启动17 primary_entry之__create_page_tables代码第四部分map_memory剩下的流程

其中,表项的属性由 PMD_TYPE_TABLE 定义,rtbl 只定义了下一级页表的第一个页表起始地址,那么下一级页表的后续页表的起始地址需要根据 rtbl + n * PAGE_SIZE 而定。接着第7行,根据第6行,将 对应的下一级页表的物理地址 rtbl 填写到 本级页表也就是全局页表的表项,区间为 [start, iend],count 为0,表示全局页表的表项只在一个页表里面,不可能跨页表,当然 count 也当出参,统计全局页表的表项数目。n 代表第n个页表,n的范围为 [0, count)

2024-08-20 08:44:34 581

原创 慢慢欣赏arm64内核启动16 primary_entry之__create_page_tables代码第四部分populate_entries

我们没有使能 CONFIG_ARM64_PA_BITS_52,而是使能了 CONFIG_ARM64_PA_BITS_48,所以该宏就是把 rtbl,也就把是下一级的页表物理地址存放在 tmp1 里面。第19行将 tmp1 与 flags 进行或操作,也就是说,将页表基地址与页表属性组合在一起,由于页表基地值的有效位和页表属性的有效位在不同的位域里面,所以可以认为是缝合在一起。第1行到第16行时注释,大概意思是填充页表项,当前页表的每个页表项的内容是下一级页表的物理地址,所以牵扯到本级页表和下级页表。

2024-08-19 07:57:04 482

原创 慢慢欣赏arm64内核启动15 primary_entry之__create_page_tables代码第四部分compute_indices

第三个参数 shift 入参, 将虚拟地址转换为索引需要偏移的位数,调用者传过来的参数是 PGDIR_SHIFT,该参数我们在以前的章节中分析过,为39。第二个参数 vend 入参,虚拟地址的结束地址,在上一章节中我们是将 vend 自减1的,恰好符合注释描述的区间概念,否则就多分配了一个页表项。对于全局页表来说,最多就一个页,不会超过512,但是后面级别的页表就不好说了,只要全局页表的有效索引超过1,下一级的页表肯定是跨多个页表。根据注释,出参统计有效页表项的数目,包括了跨多个页表的场景。

2024-08-18 08:50:40 363

原创 慢慢欣赏arm64内核启动14 primary_entry之__create_page_tables代码第四部分map_memory

第二个参数 rtbl 是下一级页表的起始地址,根据刚才的描述,下一级页表的起始地址其实是不用传达的,注释也做了说明,由于全局目录只占有1个页面,所以在函数的内部是通过 tbl + PAGE_SIZE 传递的。第九个参数 iend,注释里没有说明,根据意思以及上下文代码的实现,应该是 index of end 的缩写,就是下一级页表的终止地址在该级页表的索引值,由于可能存在多个页表的可能性,第十二个参数 sv,也是出参,对应 x14,也是 临时变量,用于存储计算出来的下一级页表的起始物理地址。

2024-08-17 16:42:31 905

原创 慢慢欣赏arm64内核启动13 primary_entry之__create_page_tables代码第三部分

所以最终 PGDIR_SHIFT 的值为 ((PAGE_SHIFT - 3) * 4 + 3) == 39这就是 L0 索引的偏移PTRS_PER_PGD 的值为 1

2024-08-17 15:18:41 656

原创 慢慢欣赏arm64内核启动12 primary_entry之__create_page_tables代码第二部分

【代码】慢慢欣赏arm64内核启动12 primary_entry之__create_page_tables代码第二部分。

2024-08-11 15:35:36 301

原创 慢慢欣赏arm64内核启动11 primary_entry之__create_page_tables代码第一部分

【代码】慢慢欣赏arm64内核启动11 primary_entry之__create_page_tables代码第一部分.txt。

2024-08-10 10:14:28 325

原创 慢慢欣赏arm64内核启动10 primary_entry之set_cpu_boot_mode_flag

上面的文章我们分析完毕el2_setup函数,该函数虽长但不啰嗦。主要作用就是如果bootloader把控制权交给内核时,如果内核是EL1异常模式,则按照EL1模式初始化一些系统寄存器,然后返回w0为EL1;如果内核当前为EL2模式,则判断硬件是否支VHE,如果不支持,则切换到EL1;如果支持,则继续以EL2模式启动,这两种情况返回w0均为EL2。

2024-08-10 08:49:34 358

原创 慢慢欣赏arm64内核启动9 primary_entry之el2_setup代码第七部分

【代码】慢慢欣赏arm64内核启动9 primary_entry之el2_setup代码第七部分。

2024-08-07 13:53:50 94

原创 慢慢欣赏arm64内核启动8 primary_entry之el2_setup代码第六部分

【代码】慢慢欣赏arm64内核启动8 primary_entry之el2_setup代码第六部分。

2024-08-06 13:43:59 695

原创 慢慢欣赏arm64内核启动7 primary_entry之el2_setup代码第五部分

【代码】慢慢欣赏arm64内核启动7 primary_entry之el2_setup代码第五部分。

2024-08-06 08:51:25 594

原创 慢慢欣赏arm64内核启动6 primary_entry之el2_setup代码第四部分

【代码】慢慢欣赏arm64内核启动6 primary_entry之el2_setup代码第四部分。

2024-08-02 18:48:19 188

原创 慢慢欣赏arm64内核启动5 primary_entry之el2_setup代码第三部分

解析完虚拟化部分,我们继续分析启动过程中,对中断控制器的处理。

2024-08-02 05:15:52 481

原创 慢慢欣赏arm64内核启动4 primary_entry之el2_setup代码第二部分

el2_setup继续执行就到了EL2异常等级的虚拟化部分的解析和处理部分。

2024-07-30 13:46:43 342

原创 慢慢欣赏arm64内核启动3 primary_entry之el2_setup代码第一部分

分析完el2_setup的注释和代码段的位置之后,我们正式开始学习el2_setup的实现。

2024-07-30 08:39:44 199

原创 慢慢欣赏arm64内核启动2 primary_entry之el2_setup注释部分

primary_entry执行完保存参数的函数后,进入el2_setup函数查看调用函数的注释,含义是切换到EL1模式,出参为w0,保存进入内核时的异常等级。看到这个注释,我联想起异常返回章节的通过sppr_elX和elr_elX切换异常等级的方法,我们分析代码看看是否这样实现的。该函数较长,我们分段进行欣赏。

2024-07-29 07:47:56 191

原创 慢慢欣赏arm64内核启动1 primary_entry之保存启动参数

根据上一章节,bootloader将控制权交给内核,内核从__HEAD段的开头执行。该段的起始位置是_head。

2024-07-28 17:46:09 269

原创 慢慢欣赏DPDK RTE_MAX_ETHPORTS的定义

DPDK代码里面,RTE_MAX_ETHPORTS是一个常见的宏定义,但是在.c和.h文件找不到其定义,在全文件搜索条件下,在config/meson.build找到这么一个定义。那么max_ethports的值为多少呢?继续搜索,在meson_options.txt里面默认值如下。该宏定义是根据构建输入动态生成的宏定义。

2024-07-24 14:04:18 332

原创 慢慢欣赏arm64内核启动0 链接脚本.head.text部分的解析

HEAD_TEXT是指什么呢?我们搜索一下内核源码。

2024-07-24 08:41:46 161

原创 ntp自动同步时间 ubuntu入门之二十四

当我们的电脑的CMOS电池失效时,我们可以在登陆shell之后通过脚本自动同步ntp时间。首先是该目录是内存临时目录,关机后该文件会消失,重新开机重新生成该文件。用户可以根据自己的df显示的tmpfs情况设置自己的文件路径。其次,该文件我的用户user可读可写,不需要root权限。Ubuntu如何同步网络时间。

2024-06-27 09:54:26 362

原创 作文笔记14漫画

3联系生活实际:彩票、赌博、抄作业等不劳而获。按内容、议论、联系实际、提出观点写四段。2发表议论:对、不对、为啥不对why。1表示漫画内容:不劳而获what。4提出观点:应该怎么做how。常用夸张、比喻、象征手法。漫画:强烈讽刺和批评性。

2024-06-22 21:40:51 114

原创 作文笔记13-某某即景

例如写《冬雪即景》 下雪前天空积云,空气凛冽;下雪中雪由小雪花变鹅毛变糖粒;下雪后地面,楼房,街道不同地方雪的变化,楼房房檐雪水化凝结成冰凌,地面的雪被踩得黄黄黑黑,街道被铲雪车清空路面,从楼上远眺,一片黑白相间的世界。观察时间 观察地点 景观、现象。注意:即景指短时间内的眼前景物,不能写成一年四季的变化。最长一天之内的变化。观察顺序 景物变化。参考著名篇章《海上日出》《火烧云》

2024-06-15 21:23:17 119

原创 答题套路3 仿写句子-排比

桌上可口营养的饭菜是妈妈做的;衣柜里整齐排列的衣服是妈妈叠的;干净的地板和桌面是妈妈擦的。3三个分句内容不重复,格式尽量统一。2三个分句能支持总句,充当论据。注意:1三个分句不要加先,然后等关联词。

2024-06-08 22:08:57 110

原创 作文笔记11 推荐一本书

只有...才... 只要...就 表条件。既...又... 表并列。不但...而且 表递进。因为...所以... 表因果。why推荐理由挑一两点(内容,语言,情节,人物,思想),几点就分几段。2、结合书的情节、人物对话、插图来说明。关联词表示的关系:虽然...但是... 表转折。how如何挑选推荐的书1、读过的、了解的。how具体1、可以转述摘录精彩片段。what介绍书名作者出版社。

2024-06-08 21:57:04 264

原创 作文笔记10 复述故事

救白蛇 得宝石救相亲 变石头人们纪念海力布。

2024-06-01 21:41:25 333

原创 wine的使用 ubuntu入门之二十三

在ubuntu22.04中安装及使用wine。手工生成如下文件,内容入选。

2024-05-31 14:47:10 475

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除