linux内核源码启动流程一

linux内核本身被链接在虚拟地址处,因此kernel希望尽快建立页表并且启动MMU进入虚拟地址工作状态,但是kernel本身工作起来后页表体系是非常复杂的,建立起来也不是那么容易的。因此kernel想了一个好办法,就是:建立页表分两步走。第一步,kernel先建立一个段式页表(和uboot之前建立的页表一样,页表以1MB为单位来区分的),这里的函数就是建立段式页表。段式页表本身比较好建立(段式页表1MB一个映射,4GB的空间需要4096个页表项,每个页表项4字节,因此一共需要16KB内存来做页表),坏处是比较粗不能精细管理内存;第二步,再去建立一个细页表(以4KB为单位),然后启动新的细页表,废除第一步建立的段式映射页表。(Linux内核分段分页进行内存管理

在内核启动的早期,建立的段式页表,并在内核启动的前期使用;在内核启动的后期,就会再次建立细页表并启用。等内核启动工作起来之后就只有细页表了。

                                                       start_kernel函数前执行流程图

第91行:初始化栈基指针fp

第92~94:清空bss段数据

第96行:重新设置寄存器值

R4=processor_id(cpu处理器ID地址,其变量定义在arch/arm/kernel/setup.c中)

R5=__machine_arch_type(machine id地址,其变量定义在arch/arm/kernel/setup.c中)

R6=__atags_pointer(dtb指针的地址,其变量定义在arch/arm/kernel/setup.c中)

R7=cr_alignment(cp15的c1寄存器的值的地址,也就是mmu控制寄存器的值,其变量定义在arch/arm/kernel/entry-armv.S中)

sp=init_thread_union + THREAD_START_SP(init_thread_union可在System.map中获取,笔者的是0x809e6000,这样一来相当于SP的初值是0x809e6000 + 0x2000 - 8)

第97~98行:thumb指令的实现,意义同第86行,同时只有一处生效

第99行:把cpu处理器id(r9)放到processor_id变量中

第100行:把mechine id(r1)存放到__machine_arch_type变量中

第101行:把dtb的地址指针(r2)存放到__atags_pointer变量中(此地址为物理地址,使用需转换)

第102~103行:把cp15的c1的寄存器的值(r0)存放到cr_alignment变量中

第104行:跳转到start_kernel开始启动内核

注:系统一复位就处于SVC模式。CPSR当前程序状态寄存器来切换ARM模式。ARM有9种模式:

User:用户模式,非特权模式,大部分程序运行的时候就处于此模式

FIQ:快速中断模式,进入 FIQ 中断异常

IRQ:一般中断模式,进入 IRQ 中断异常

Supevisor(SVC):超级管理员模式,复位或者一个 Supervisor 指令调用

Monitor(MON):监听模式,用户安全扩展模式

Abort(ABT):数据访问中止模式,用户虚拟存储及存储保护

Hyp(HYP):用于虚拟化扩展

Undef(UND):未定义的指令终止模式

System(SYS):系统模式,用于运行特权级的操作系统任务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要安装Linux内核源码,可以按照以下步骤进行操作: 1. 下载内核源码:你可以从Linux官方网站(https://www.kernel.org/)下载最新版本的内核源码,或者使用Git从Linux源代码仓库克隆。 2. 解压源码包:将下载的源码包解压到你想要安装的目录中。你可以使用命令行工具如tar来解压压缩包,例如:tar -xvf linux-x.x.x.tar.xz。 3. 安装编译工具:在编译内核之前,你需要确保安装了一些必要的编译工具,如GCC编译器、make工具等。你可以使用包管理器来安装这些工具,例如在Ubuntu上可以运行:sudo apt-get install build-essential。 4. 配置内核:进入源码目录,运行make menuconfig命令来配置内核。这个命令会打开一个文本界面,你可以根据需要选择所需的配置选项,如硬件支持、文件系统、驱动程序等。 5. 编译内核:配置完成后,运行make命令开始编译内核。这个过程可能需要一些时间,取决于你的计算机性能和内核源码的大小。 6. 安装内核:编译完成后,运行make install命令来安装编译好的内核。这个命令会将内核文件复制到适当的位置,并更新引导加载程序(如GRUB)的配置文件。 7. 重启系统:完成安装后,你可以重启系统并选择新安装的内核启动。在引导加载程序界面中,选择适当的内核版本并按照提示启动系统。 请注意,编译和安装内核源码需要一定的技术知识和经验,如果你不熟悉或不确定,建议在进行操作之前阅读相关文档或咨询专业人士。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值