全面解析Linux 内核 3.10.x - 内核入口函数__kernel_entry

From: 全面解析Linux 内核 3.10.x - 本文章完全基于MIPS架构

找对了入口,才有可能找对出口 – 佚名

在前面几节内容中我简单将Linux ,以及Linux Kernel的概念做了总结,然后又将编译以及内核镜像也做了也总结! 从本节内容开始,我将真正的进入到内核代码中去!加油吧,Keven!
从上一节中我已经知道了vmlinux.lds链接文件中指定了内核的入口函数kernel_entry,此函数被定义在head.S文件中!,请跟着我去看看此函数到底做了什么!

1、head.S - kernel_entry

    NESTED(kernel_entry, 16, sp)            # kernel entry point

    kernel_entry_setup          # cpu specific setup

    setup_c0_status_pri

    /* We might not get launched at the address the kernel is linked to,
    so we jump there.  */
    PTR_LA  t0, 0f      #Loading 数字标号0中的地址
    jr  t0
0:
    PTR_LA      t0, __bss_start             #Loading __bss_start(0xffffffff80dc0000) 到 t0
    LONG_S      zero, (t0)                  #对0xffffffff80dc0000这个地址内容清零(清除bss)
    PTR_LA      t1, __bss_stop - LONGSIZE   #Loading __bss_stop(0xffffffff80dc0000 + 0x00cc2ac0 - unsinged(8)<0x40> 8*8) = 
                                            0xffffffff80106ae8 此地址就是kernel_entry函数地址 到 t1
1:
    PTR_ADDIU   t0, LONGSIZE                #t0 = t0 + LONGSIZE (64位操作) = 0xffffffff80dc0000 + 0x40
    LONG_S      zero, (t0)                  #清零地址内容
    bne     t0, t1, 1b                      #判断 t0 是否等于 t1,如果不等于到当前位置前面的第一个标号1,循环加到等于后,执行下面指令

                                # firmware arguments
    LONG_S      a0, fw_arg0     #子程序的前4个参数存到a0~a3中
    LONG_S      a1, fw_arg1
    LONG_S      a2, fw_arg2
    LONG_S      a3, fw_arg3

    MTC0        zero, CP0_CONTEXT           # clear context register 清除 寄存器CP0的$4,这个寄存器保存的是页表的起始地址 
    PTR_LA      $28, init_thread_union 		#将init_thread_union地址Loading $28中(Ps.$28是全局指针寄存器),关于全局指针见 Note 1:
    /* Set the SP after an empty pt_regs.  */
    PTR_LI      sp, _THREAD
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: linux-headers-5.10.0-kali7-amd64_5.10.28-1kali1_amd64.deb 是一个 Linux 内核的头文件包。在 Linux 系统中,内核是操作系统的核心部分,负责管理硬件、进程和文件系统等核心功能。而内核的头文件则包含了一些用于开发和编译内核模块的必要文件。 这个特定的包是针对 Kali Linux 7 版本的,适用于 AMD64 架构的计算机。版本号为 5.10.28-1kali1,表示这个包是在内核版本 5.10.28-1kali1 上构建的。 安装了这个头文件包后,开发者就可以编写和编译适用于 Linux 内核 5.10.28-1kali1 版本的内核模块,以扩展或修改现有的内核功能。此外,这个包也为其他软件或工具提供了必要的头文件,以在编译期间与该特定内核版本进行交互。 如果您是 Linux 开发者或需要对内核进行定制编译的用户,安装这个包可以提供便利。 ### 回答2: linux-headers-5.10.0-kali7-amd64_5.10.28-1kali1_amd64.deb 是一个Linux内核头文件的软件包。在Linux中,内核是操作系统的核心部分,它负责管理计算机的硬件和软件资源。内核头文件是开发或编译内核模块时所需的文件。 这个特定的软件包的版本是5.10.0-kali7-amd64_5.10.28-1kali1_amd64.deb。其中,5.10.0-kali7-amd64代表内核的版本号,5.10.28-1kali1代表软件包的版本号,amd64代表软件包适用的处理器架构。 这个软件包中包含了一些C语言头文件,用于与Linux内核进行交互和开发。这些头文件为开发者提供了函数和结构的定义,使他们能够编写代码来扩展和修改内核的功能。 以.deb结尾的文件是Debian操作系统中使用的软件包格式。Debian是一个流行的Linux发行版,kali则是基于Debian的一个专注于渗透测试和网络安全的发行版。这个软件包是为kali Linux系统设计的,适用于64位的amd64处理器架构。 如果你在kali Linux系统上进行开发或编译内核模块,你可能需要安装这个软件包。你可以使用适当的包管理器,如apt-get或dpkg,来安装这个软件包并获取所需的头文件。安装后,你就可以在编写代码时包含这些头文件,并使用它们提供的函数和结构来与内核进行交互。 ### 回答3: linux-headers-5.10.0-kali7-amd64_5.10.28-1kali1_amd64.deb是针对Kali Linux操作系统的头文件。在Linux中,头文件包含了一些预定义的函数和数据结构,这些函数和数据结构可以用于开发应用程序或编译驱动程序。 这个文件名中的"linux-headers-5.10.0-kali7-amd64"表示这是适用于Kali Linux 5.10.0版本的头文件。"5.10.28-1kali1"代表了具体的版本号。而"amd64"表示该文件适用于64位的处理器架构。 安装这个.deb文件可以帮助用户在Kali Linux系统上进行编译、安装或加载驱动程序。有时候,特定的软件或驱动程序需要这些头文件来编译和与操作系统进行交互。因此,通过安装这个.deb文件,用户可以获得所需的头文件,以在Kali Linux系统上进行开发或定制。 要安装这个.deb文件,可以使用dpkg命令,如下所示: ``` sudo dpkg -i linux-headers-5.10.0-kali7-amd64_5.10.28-1kali1_amd64.deb ``` 这将安装头文件到系统中的正确位置,以供开发和编译使用。 总而言之,linux-headers-5.10.0-kali7-amd64_5.10.28-1kali1_amd64.deb是一个重要的软件包,针对Kali Linux操作系统,包含了必要的头文件,以支持开发和编译驱动程序。通过安装该软件包,用户可以确保在Kali Linux系统上进行开发时拥有所需的工具和资源。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值