-------------------------------------------
本文系本站原创,欢迎转载!
转载请注明出处:http://ymcheng.cublog.cn
------------------------------------------
内核移植工作主要是修改跟硬件平台相关的代码,一般不涉及 Linux 内核通用的程序。由于 Linux 内核具备可移植性的特点,并且已经支持了各种体系结构的很多种目标板,我们很容易从中找到跟自己硬件类似的目标板。参考内核已经支持的目标板来移植 BSP,就如同使用模板开发程序。 因此,移植linux内核的过程大多数情况下就是移植BSP的过程。 从start_kernel()函数开始,主要思想:1.kernel为了支持不同平台给出的接口---平台通用函数会调用具体platform上的同名.c或.h函数。2.设备层次关系,resource--->device--->platform_device---->driver--->platform_driver.
系统初始化流程主干:start_kernel()--->setup_arch()---->rest_init()--->核心级init()---->do_basic_setup()--->driver_init()--->do_initcallls()
解释1:setup_arch()它实际上是在为具体平台“立制”,后面的init_IRQ()等函数都是在这个基础上拿到MACHINE_STASRT与MACHINE_END之间的machine_desc这个结构来初始化自己的板子,总要的有:smdk2410_map_io() s2c24xx_init_irq() smdk_machine_init() s3c24xx_init_timer()。
解释2:Start_kernel() 函数完成初始化内核各子系统,最后调用reset_init(),启动一个叫做init的内核线程,继续初始化。在init内核线程中,将执行下列 init()函数的程序。Init()函数负责完成根文件系统的挂接、初始化设备驱动程序和启动用户空间的init进程等重要工作。
初学者理解上难免有差错,还望有新解者不吝赐教。
阅读(1828) | 评论(0) | 转发(0) |