Linux系統初始化流程
linux系統的啟動,指的是從系統加電到系統控制檯顯示“login:
”登入提示符為止的系統執行階段,與這部分動作密切相關的程式碼主要是:
- 四個彙編程式:
bootsect.S
setup.S
head.S
entry.S
init
目錄下的main.c
檔案主要檢視
init/main.c
中的start_kernel
函式:
在系統啟動過程中,主要關注一下幾個方面:
- 中斷系統及排程系統
- 檔案系統的初始化
- 裝置管理系統的初始化
- 網路協議的初始化
在init/main.c
中reset_init
函式:
在此函式中,有kernel_thread
函式,這個函式建立了核心執行緒,原型如下:
int kernel_thread(int (*fn), void *arg, unsigned long flags)
此函式定義在arch/xxx/kernel/process.c
中,它利用do_fork()
函式建立一個新的核心態執行緒,linux的核心執行緒是沒有虛擬儲存空間的程序,它們執行在核心中,直接使用實體地址空間。
kernel_thread
建立的新的核心執行緒是init
,然後返回,執行unlock_kernel
(與start_kernel
中的lock_kernel
對應),接著執行cpu_idle()
,這實際是執行初始化主執行緒的歸宿:它觀察自己是否處於TIF_NEED_RESCHED
need_resched
實現,如果不是,就讓自己睡眠,否者完成schedule()
函式。TIF即Thread Information Flag的意思。
下一步轉入init
函式中:
init執行緒呼叫了許多函式,但與網路有關的在do_basic_setup
中初始化的sock_init()
,然後繼續執行do_initcalls
函式,此函式定義在c檔案中,有兩個重要的變數__initcall_start
和__initcall_end
,它們的定義如下:
extern initcall_t __initcall_start, __initcall_end;
static void __init do_initcalls(void)
{
initcall_t *call ;
int count = preempt_count();
/*從start遍歷到end*/
for(call = &__initcall_start; call < &__initcall_end; call++){
char *mesg;
......
(*call)();
msg = NULL;
}
}
initcall_t
類與__initcall_start
,__initcall_end
定義在include/linux目錄下的init.h檔案中。
相關推薦
Linux系統初始化流程
linux系統的啟動,指的是從系統加電到系統控制檯顯示“login:”登入提示符為止的系統執行階段,與這部分動作密切相關的程式碼主要是: 四個彙編程式:bootsect.S setup.S he
青蛙學Linux—系統初始化init及執行級
Linux系統的啟動首先從BIOS開始,接下來Linux的載入程式將核心映像載入到記憶體,進行核心初始化。在核心初始化的最後一步,就是啟動PID為1的init程序,這個程序是系統的第一個程序,負責啟動那些開機時需要啟動的服務。 大多數的Linux發行版的init系統都是和System V相容的,所以也被稱為
Linux 系統初始化指令碼;
1.背景日常伺服器申請完畢後需要各種系統指標初始化,實施思路(編寫系統初始化指令碼,ansible 批量拷貝到目標機器執行); 初始化指令碼如下; #!/bin/bash function install_pkg(){ yum -y install l
Linux核心初始化流程筆記
好文章,轉載一下! 作者:[email protected] 部落格:blog.focus-linux.net linuxfocus.blog.chinaunix.ne
一鍵linux系統初始化指令碼
一、前言一般我們在安裝新的系統時,系統的一些預設配置對我們來說是不行的,所以我們要自定義初始化系統。 二、需求1)設定時區並把同步時間加入計劃任務2)禁用selinux3)清空原防火牆預設策略只保留ssh4)歷史命令顯示操作時間級使用者5)建立ALL許可權使用者並禁止root遠端登入6)禁止定時任務傳送郵件
一鍵linux系統初始化腳本
auto 新的 isa 必須 buck etc shang gre 謝謝 一、前言一般我們在安裝新的系統時,系統的一些默認配置對我們來說是不行的,所以我們要自定義初始化系統。 二、需求1)設置時區並把同步時間加入計劃任務2)禁用selinux3)清空原防火墻默認策略只保留s
LINUX系統初始化
轉載地址:https://blog.csdn.net/runner668/article/details/79844423 說明BIOS是位於位於主機板flash rom(掉電不丟失0)中的程式,作業系統Boot Loader位於硬碟MBR中。BIOS在完成 硬體檢測和資源分配後。將硬碟MB
ZigBee網路的建立 & ZigBee系統初始化流程
Osal_int_disable(INTS_ALL):關閉所有中斷HAL_BOARD_INIT():初始化系統時鐘Zmain_vdd_check():檢測晶片電壓是否正常Zmain_ram_init();初始化堆疊InitBoard(OB_COLD):初始化LED,配置系統定時器HalDriverInit()
ECS Linux系統初始化後重新掛載資料盤
如果伺服器需要初始化系統,資料盤資料不需要改變,初始化伺服器後需要對資料盤重新掛載。操作如下: 1、輸入 mount 命令可以看到並沒有掛載資料盤,輸入fdisk -l 命令,看到已經分割槽的資料盤 /dev/xvdb1 (裝置編號以實際情況為準)。新購買資料盤分割槽格式化請參考這裡。
linux文件系統 - 初始化(一)
成員函數 cat 文章 記錄 inf htm 源代碼 設備驅動模型 proxy 術語表: struct task:進程 struct mnt_namespace:命名空間 struct mount:掛載點 struct vfsmount:掛載項 struct file:文件
linux文件系統 - 初始化(三)
視圖 div 目錄遷移 oca script 方式 不能 輸出 str 一、目的 內核加載完initrd文件後,為掛載磁盤文件系統做好了必要的準備工作,包括掛載了sysfs、proc文件系統,加載了磁盤驅動程序驅動程序等。接下來,內核跳轉到用戶空間的init程序,
linux文件系統 - 初始化(二)
軟鏈接 復制代碼 模式 文件的 操作 pop 臨時 console mini 一、目的 本文主要講述linux3.10文件系統初始化過程的第二階段:加載initrd。 initrd是一個臨時文件系統,由bootload負責加載到內存中,裏面包含了基本的可執
systemd---Linux的初始化系統
控制 -abort ola ted 主機 end strong timeout idl 一、概述 systemd是一套Linux系統的基本構建塊。它提供了一個系統和服務管理器,它作為PID 1運行,並啟動系統的其余部分。systemd提供了積極的並行化能力,使用Socket
Linux記憶體初始化之夥伴系統(三)
這裡主要分析zone/zonelist的初始化,以及把系統空閒記憶體釋放到夥伴系統 1.zone的初始化 呼叫關係:start_kernel->setup_arch->paging_init->bootmem_init->zone_sizes_init->fre
Linux例項初始化系統盤後重新掛載資料盤
在Linux例項中,重新初始化系統盤不會改變資料盤裡的內容,但是資料盤的掛載資訊會丟失,所以,在Linux重啟後,按以下步驟建立新的掛載點資訊並掛載資料盤分割槽。 1,檢視資料盤掛載資訊:執行命令 mount。返回結果中沒有/dev/vdb1的資訊。 sysfs on /sys ty
Linux EMMC子系統分析-初始化流程(轉載)
最近在解EMMC的一個bug,發現Linux EMMC有點小複雜,先整理個文件出來吧 用的是TI 平臺,僅分析MMC,不分析SD和SDIO mmc_init 2769 static int __init mmc_init(void
linux檔案系統初始化過程(5)---載入initrd(下)
一、目的 linux把檔案分為常規檔案、目錄檔案、軟連結檔案、硬連結檔案、特殊檔案(裝置檔案、管道檔案、socket檔案等)幾種型別,分別對應不同的新建函式sys_open()、sys_mkd
Linux系統之啟動流程
linux系統啟動流程開機自檢(bios)MBR引導GRUB菜單加載內核(kernel)init 進程初始化·由linux內核加載運行/sbin/init·是系統的第一個進程·PID永遠為1init進程的配置文件參數說明/etc/inittab配置默認運行級別/etc/sysconfig/init控制tty終
Linux系統啟動了流程
linux開機開機自檢(BIOS)MBR引導(光盤、磁盤)GRUB菜單(選擇內核,一般只有一個內核)加載內核運行init進程,選擇運行級別(Linux的第一個運行程序)讀取/etc/inittab配置文件執行/etc/rc.d/rc.sysinit腳本(系統的初始化腳本,設置主機名和IP地址)執行/etc/r
Spring Core Container 源碼分析三:Spring Beans 初始化流程分析
turn raw time -c rri add 步驟 引用 lin 前言 本文是筆者所著的 Spring Core Container 源碼分析系列之一; 本篇文章主要試圖梳理出 Spring Beans 的初始化主流程和相關核心代碼邏輯; 本文轉載自本人的私人博客,傷神