x
x

linux内核启动解析(一)

发布时间:2012-4-1 09:54    发布者:李宽
关键词: linux
freshtree

1 linux内核启动过程分析

        
嵌入式linux系统从软件角度来看可分为四部分:bootloader,linux内核,文件系统和应用程序。在这里我选取的内核版本是linux2.6.28,硬件平台选择smdk6410。
        
Bootloader是系统启动或复位后首先被执行的代码,它的主要作用是初始化处理器,初始化ram,初始化相应的外设(uart,usb等等),下载内核映像(或文件系统)到ram相应的位置,然后跳转到内核下载地址 c0008000,将控制权交给linux内核。
        
Linux内核下载到ram中的映像一般是zImage。这是压缩版本的内核,首先要进行解压操作。调用decompress_kernel()(位于arch/arm/boot/compressed/misc.c)进行解压缩操作,然后再次跳到c0008000,进行真正的内核初始化操作。
        
我们重点放在讲解内核映像解压之后linux内核的启动过程。内核初始化启动过程如下:
        
        1) __lookup_processor_type(),查找处理器类型。
        
        2) __lookup_machine_type(),查找机器类型。
        
        3) __vet_atags()。
        
        4) __create_page_tables(),创建页表。
        
        5) __enable_mmu(),使能MMU。
        
        6) __mmap_switched(),拷贝数据,清BBS。
        
        7) start_kernel(),进入真正的内核初始化函数。
        
        8) smp_setup_processor_id();
        
        9) unwind_init();
        
        10)lockdep_init();
        
        11) debug_objects_early_init();
        
        12) cgroup_init_early();
        
        13) local_irq_disable();
        
        14) early_boot_irqs_off();
        
        15) early_init_irq_lock_class();
        
        16) lock_kernel();
        
        17) tick_init();
        
        18) boot_cpu_init();
        
        19) page_address_init();
        
        20) setup_arch(&command_line);
        
        21) mm_init_owner(&init_mm, &init_task);
        
        22) setup_command_line(command_line);
        
        23) unwind_setup();
        
        24) setup_per_cpu_areas();
        
        25) setup_nr_cpu_ids();
        
        26) smp_prepare_boot_cpu();
        
        27) sched_init();
        
        28) preempt_disable();
        
        29) build_all_zonelists();
        
        30) page_alloc_init();
        
        31) parse_early_param();
        
        32) sort_main_extable();
        
        33) trap_init();
        
        34) rcu_init();
        
        35) init_IRQ();
        
        36) pidhash_init();
        
        37) init_timers();
        
        38) hrtimers_init();
        
        39) softirq_init();
        
        40) timekeeping_init();
        
        41) time_init();
        
        42) sched_clock_init();
        
        43) profile_init();
        
        44) early_boot_irqs_on();
        
        45) local_irq_enable();
        
        46) console_init();
        
        47) lockdep_info();
        
        48) locking_selftest();
        
        49) vmalloc_init();
        
        50) vfs_caches_init_early();
        
        51) cpuset_init_early();
        
        52) page_cgroup_init();
        
        53) mem_init();
        
        54) enable_debug_pagealloc();
        
        55) cpu_hotplug_init();
        
        56)  kmem_cache_init();
        
        57)  debug_objects_mem_init();
        
        58)  idr_init_cache();
        
        59)  setup_per_cpu_pageset();
        
        60)  numa_policy_init();
        
        61)  if (late_time_init)
        
        62)  late_time_init();
        
        63)  calibrate_delay();
        
        64)  pidmap_init();
        
        65)  pgtable_cache_init();
        
        66)  prio_tree_init();
        
        67)  anon_vma_init();
        
        68)  thread_info_cache_init();
        
        69)  fork_init(num_physpages);
        
        70)  proc_caches_init();
        
        71)  buffer_init();
        
        72)  key_init();
        
        73)  security_init();
        
        74)  vfs_caches_init(num_physpages);
        
        75)  radix_tree_init();
        
        76)  signals_init();
        
        77)  page_writeback_init();
        
        78)  proc_root_init();
        
        79)  cgroup_init();
        
        80)  cpuset_init();
        
        81)  taskstats_init_early();
        
        82)  delayacct_init();
        
        83)  check_bugs();
        
        84)  acpi_early_init();
        
        85)  ftrace_init();
        
        86)  rest_init();            

   
本文地址:https://www.eechina.com/thread-88590-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

  • Microchip视频专区
  • EtherCAT®和Microchip LAN925x从站控制器介绍培训教程
  • MPLAB®模拟设计器——在线电源解决方案,加速设计
  • 让您的模拟设计灵感,化为触手可及的现实
  • 深度体验Microchip自动辅助驾驶应用方案——2025巡展开启报名!
  • 贸泽电子(Mouser)专区

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表