在Linux环境中调用Start_Kernal之前发生了什么

时间:2012-11-27 07:09:55

标签: linux-kernel linux-device-driver

我刚刚开始阅读设备驱动程序并读取Start_kernal函数是与体系结构无关的代码的一部分,并且已经从依赖于体系结构的部分调用。我想知道在start_Kernal例程调用的意思是在引导内核之前发生了什么操作

我很想知道当newtork设备或USB设备与这个依赖于体系结构的代码交互时会发生什么(相信架构依赖是第一个软件与硬件交互)。

依赖于体系结构的代码是否负责获取附加到系统的硬件设备的mac地址,供应商ID等信息?

1 个答案:

答案 0 :(得分:1)

早期的内核代码主要关注:

  • 初始化内存,设置MMU和虚拟内存;
  • 初始化时钟和计时器;
  • 初始化中断子系统;
  • 关键GPIO引脚的配置
  • 检索与体系结构相关的数据,例如ARM ATAG 信息。

请注意,依赖于体系结构的初始化不会一次全部发生。在内核启动之后但在初始化驱动程序之前,可以调用板初始化函数。

  

newtork设备或USB设备与此体系结构相关的代码进行交互

网络和USB主机&小工具设备由设备驱动程序表示,这些驱动程序的初始化时间远早于早期内核代码。 “交互”是最小的,并且将符合已建立的内核驱动程序接口。应编写设备驱动程序以删除所有特定于板的依赖项,并将其替换为配置选项。如果没有,则该驱动程序代码应位于 platform mach 源代码目录中,而不是 drivers 目录中。

  

依赖于体系结构的代码是否负责获取像......这样的信息。

MAC地址可以在内核命令行中传递,也可以由引导加载程序安装(供设备驱动程序检索)。
供应商ID,板ID和其他数据可以是与架构相关的代码。对于ARM,内核在ATAGs的内存缓冲区中接收此信息。