当前位置: 技术问答>linux和unix
有关内核移植步骤,概念问题
来源: 互联网 发布时间:2015-11-21
本文导语: 看了一部分bootloader和内核移植的介绍。 其中有一段是这么说的: 使用linux 2.4.17采用ARM linux的补丁是patch-2.4.17-rmk5、完成ARM linux内核到EP7312体系结构的移植,需要修改所有和体系结构相关的代码。其中主要的部分是...
看了一部分bootloader和内核移植的介绍。
其中有一段是这么说的:
使用linux 2.4.17采用ARM linux的补丁是patch-2.4.17-rmk5、完成ARM linux内核到EP7312体系结构的移植,需要修改所有和体系结构相关的代码。其中主要的部分是内核入口部分,处理器和体系结构初始化部分,IO端口映射部分和中断初始化部分。除此之外,还有EP7312相关设备的驱动程序,如CS8900A以网接口的驱动等
问题:
内核入口部分,处理器和体系结构初始化部分,IO端口映射部分和中断初始化部分。 这些不都是bootloader要做的事吗?而bootloader都能下载到源码,不就只需要移驱动,还有应用软件。可能也只需要改一下驱动程序及应用软件的某些API,用新的内核提供的API或删去一些功能。
如果是这样的话,内核移植的工作量还是不太大,是么?
其中有一段是这么说的:
使用linux 2.4.17采用ARM linux的补丁是patch-2.4.17-rmk5、完成ARM linux内核到EP7312体系结构的移植,需要修改所有和体系结构相关的代码。其中主要的部分是内核入口部分,处理器和体系结构初始化部分,IO端口映射部分和中断初始化部分。除此之外,还有EP7312相关设备的驱动程序,如CS8900A以网接口的驱动等
问题:
内核入口部分,处理器和体系结构初始化部分,IO端口映射部分和中断初始化部分。 这些不都是bootloader要做的事吗?而bootloader都能下载到源码,不就只需要移驱动,还有应用软件。可能也只需要改一下驱动程序及应用软件的某些API,用新的内核提供的API或删去一些功能。
如果是这样的话,内核移植的工作量还是不太大,是么?
|
ARM上的BOOT初始化过程:
前提:假定用的是某一款基于ARM9的开发板,并采用的是NOR FALSH存储器,在此存储器上已经写入了一个BOOT程序(假定是U-boot),且假定在硬件上通过跳线设定从一个地址为0x10000000处开始运行,并且此地址个接了一块NOR FLASH芯片,上面就有一个BOOT程序
1.由于BOOT程序存储在了NOR FLASH中,所以,当板子一上电,BOOT的第一条代码开始运行,这一部分初始化代码的工作主要是根据具体开发板来决定的,所以移植时有一定的代码改动量,不过通常都会做几方面的工作:比如对内存进行分区,对内存的速度进行设定,设定CPU的工作频率,设定一些外设的初始状态,构造一个中断向量表,具体内容可以参照某一款开发板的芯片说明资料
2.在上一步中已做完芯片初始化工作,接下来就主要是为进入C语言编写的代码作准备,首先设置各种状态下的栈指针,拷贝数据段与BSS段到内存中,建立虚拟地址到物理地址的页表,对各种需要用到的外设驱动进行初始化,在存储器上建立一个简单的文件系统,接着就进入到一个主循环中,等待用户输入命令
3.如果在指定的时间内用户没有键入任何字符,则在相关配置中找出默认的LINUX内核文件与参数,开始启动内核,进入到LINUX内核的流程中,CPU的控制权由内核接管
前提:假定用的是某一款基于ARM9的开发板,并采用的是NOR FALSH存储器,在此存储器上已经写入了一个BOOT程序(假定是U-boot),且假定在硬件上通过跳线设定从一个地址为0x10000000处开始运行,并且此地址个接了一块NOR FLASH芯片,上面就有一个BOOT程序
1.由于BOOT程序存储在了NOR FLASH中,所以,当板子一上电,BOOT的第一条代码开始运行,这一部分初始化代码的工作主要是根据具体开发板来决定的,所以移植时有一定的代码改动量,不过通常都会做几方面的工作:比如对内存进行分区,对内存的速度进行设定,设定CPU的工作频率,设定一些外设的初始状态,构造一个中断向量表,具体内容可以参照某一款开发板的芯片说明资料
2.在上一步中已做完芯片初始化工作,接下来就主要是为进入C语言编写的代码作准备,首先设置各种状态下的栈指针,拷贝数据段与BSS段到内存中,建立虚拟地址到物理地址的页表,对各种需要用到的外设驱动进行初始化,在存储器上建立一个简单的文件系统,接着就进入到一个主循环中,等待用户输入命令
3.如果在指定的时间内用户没有键入任何字符,则在相关配置中找出默认的LINUX内核文件与参数,开始启动内核,进入到LINUX内核的流程中,CPU的控制权由内核接管
|
bootloader负责把内核加载入内存,然后将控制权转移到内核
具体是
1:有可能需要先从指定设备中在找到自己的config信息
2:确定启动设备
3:如果有initrd,则先读取,解压,执行
4:从启动设备中读取,解压内核(有可能需要识别启动设备中的fs)
5:把内核参数传递给内核,然后转移到内核
具体是
1:有可能需要先从指定设备中在找到自己的config信息
2:确定启动设备
3:如果有initrd,则先读取,解压,执行
4:从启动设备中读取,解压内核(有可能需要识别启动设备中的fs)
5:把内核参数传递给内核,然后转移到内核
|
当然不是bootloader的事情,进到系统里,仍然需要对DMA,中断,内存映射等进行初始化。bootloader说白了,可以做的很复杂,也可以做的很简单,只是引导系统。