<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • 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();            

       
    本文地址:http://www.portaltwn.com/thread-88590-1-1.html     【打印本頁】

    本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
    您需要登錄后才可以發表評論 登錄 | 立即注冊

    廠商推薦

    • Microchip視頻專區
    • EtherCAT®和Microchip LAN925x從站控制器介紹培訓教程
    • MPLAB®模擬設計器——在線電源解決方案,加速設計
    • 讓您的模擬設計靈感,化為觸手可及的現實
    • 深度體驗Microchip自動輔助駕駛應用方案——2025巡展開啟報名!
    • 貿澤電子(Mouser)專區

    相關視頻

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷