免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1453 | 回复: 0
打印 上一主题 下一主题

arm linux内核启动大致流程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-03 15:37 |只看该作者 |倒序浏览

1.在顶层MAKEFILE中,包含include $(srctree)/arch/$(ARCH)/Makefile
(此Makefile中head-y=arch/arm/kernel/head$(MMUEXT).o arch/arm/kernel/init_task.o)
vmlinux-init := $(head-y) $(init-y)
vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y)
vmlinux-all  := $(vmlinux-init) $(vmlinux-main)
vmlinux-lds  := arch/$(ARCH)/kernel/vmlinux.lds
从以上,可以看出,内核首先执行的是head.S
2.第一阶段
从head.S到init/main.c中的start_kernel 执行过程
/*是否支持CPU、板子类型、建立一级页表*/
bl __lookup_processor_type
           |
bl __lookup_machine_type
           |
bl __create_page_tables
           |
/*将__switch_data地址放入r13,以备使能MMU后,再调用*/
ldr r13, __switch_data  
           |
/*将__enable_mmu放入lr返回地址,以备使用*/
adr lr, __enable_mmu  @ return (PIC) address
/*r10中保存的是__lookup_processor_type得到的__arm920_proc_info的地址
PROCINFO_INITFUNC 是此地址处的偏移。此时跳转到b __arm920_setup
*/
add pc, r10, #PROCINFO_INITFUNC
            |
      __arm920_setup
            |
/*当在__arm920_setup中执行完最后一句mov pc, lr时,就跳到__enable_mmu中去执行了*/
            |
        __enable_mmu
/*__enable_mmu执行完最后一句mov pc, r13时,跳到__switch_data执行,__switch_data的第一个值是.long __mmap_switched,所以就去执行__mmap_switched  */
            |
        __mmap_switched
            |
/*__mmap_switched中最后一句b start_kernel,开始调用start_kernel,第一阶段完成*/   
         start_kernel

3.第二阶段 在start_kernel中的部分函数
printk(linux_banner);
setup_arch(&command_line);
console_init();
rest_init();





本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/86768/showart_1889663.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP