Chinaunix首页 | 论坛 | 博客
  • 博客访问: 108380
  • 博文数量: 24
  • 博客积分: 1584
  • 博客等级: 上尉
  • 技术积分: 215
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-16 08:59
文章分类
文章存档

2012年(1)

2011年(2)

2010年(21)

分类: LINUX

2010-07-31 14:47:14

-------------------------------------------
本文系本站原创,欢迎转载!
转载请注明出处:
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进程等重要工作。
     初学者理解上难免有差错,还望有新解者不吝赐教。
     更详细的解释可参考:http://blog.chinaunix.net/u3/116930/showart_2286599.html
阅读(1811) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~