瞭解linux的進程:rootfs與linuxrc

內核啓動的最後階段啓動了三個進程
進程0:進程0其實就是剛纔講過的idle進程,叫空閒進程,也就是死循環。
進程1:kernel_init函數就是進程1,這個進程被稱爲init進程。
進程2:kthreadd函數就是進程2,這個進程是linux內核的守護進程。這個進程是用來保證linux內核本身自己能正常工做的。
在嵌入式操做系統中通常會指定/linuxrc爲init進程

瞭解linux的進程:rootfs與linuxrc瞭解linux的進程:rootfs與linuxrc

一、/linuxrc是一個可執行的應用程序linux

(1)/linuxrc是應用層的,和內核源碼一點關係都沒有shell

(2)/linuxrc在開發板當前內核系統下是可執行的。所以在ARM SoC的linux系統下,這個應用程序就是用arm-linux-gcc編譯連接的;若是是在PC機linux系統下,那麼這個程序就是用gcc編譯鏈接的。ubuntu

(3)/linuxrc若是是靜態編譯鏈接的那麼直接能夠運行;若是是動態編譯鏈接的那麼咱們還必須給他提供必要的庫文件才能運行。可是由於咱們/linuxrc這個程序是由內核直接調用執行的,所以用戶沒有機會去導出庫文件的路徑,所以實際上這個/linuxrc無法動態鏈接,通常都是靜態鏈接的。函數

二、/linuxrc執行時引出用戶界面操作系統

(1)操做系統啓動後在一系列的本身運行配置以後,最終會給用戶一個操做界面(也許是cmdline,也許是GUI),這個用戶操做界面就是由/linuxrc帶出來的。blog

(2)用戶界面等不少事並非在/linuxrc程序中負責的,用戶界面有本身專門的應用程序,可是用戶界面的應用程序是直接或者間接的被/linuxrc調用執行的。用戶界面程序和其餘的應用程序就是進程二、三、4·····,這就是咱們說的進程1(init進程,也就是/linuxrc)是其餘全部應用程序進程的祖宗進程。進程

三、/linuxrc負責系統啓動後的配置開發

(1)就好像一個房子建好以後不能直接住,還要裝修同樣;操做系統啓動起來後也不能直接用,要配置下。get

(2)操做系統啓動後的應用層的配置(通常叫運行時配置,英文簡寫etc)是爲了讓咱們的操做系統用起來更方便,更適合我我的的愛好或者實用性。cmd

四、/linuxrc在嵌入式linux中通常就是busybox

(1)busybox是一個C語言寫出來的項目,裏面包含了不少.c文件和.h文件。這個項目能夠被配置編譯成各個平臺下面能夠運行的應用程序。咱們若是用arm-linux-gcc來編譯busybox就會獲得一個能夠在咱們開發板linux內核上運行的應用程序。

(2)busybox這個程序開發出來就是爲了在嵌入式環境下構建rootfs使用的,也就是說他就是專門開發的init進程應用程序。

(3)busybox爲當前系統提供了一整套的shell命令程序集。譬如vi、cd、mkdir、ls等。在桌面版的linux發行版(譬如ubuntu、redhat、centOS等)中vi、cd、ls等都是一個一個的單獨的應用程序。可是在嵌入式linux中,爲了省事咱們把vi、cd等全部經常使用的shell命令集合到一塊兒構成了一個shell命令包,起名叫busybox。

根目錄rootfs中還應該有什麼

一、/linuxrc

二、dev目錄下的設備文件。在linux中一切皆是文件,所以一個硬件設備也被虛擬化成一個設備文件來訪問,在linux系統中/dev/xxx就表示一個硬件設備,咱們要操做這個硬件時就是open打開這個設備文件,而後read/write/ioctl操做這個設備,最後close關閉這個設備。

在最小rootfs中/dev目錄也是不可少的,這裏面有一兩個設備文件是rootfs必須的。

三、sys和proc目錄。在最小rootfs中也是不可省略的,可是這兩個只要建立了空文件夾便可,裏面是沒東西的,也不用有東西。這兩個目錄也是和驅動有關的。屬於linux中的虛擬文件系統。

四、usr是系統的用戶全部的一些文件的存放地,這個東西未來busybox安裝時會自動生成。

五、etc目錄是很關鍵很重要的一個,目錄中的全部文件所有都是運行時配置文件。/etc目錄下的全部配置文件會直接或者間接的被/linuxrc所調用執行,完成操做系統的運行時配置。etc目錄是製做rootfs的關鍵,因此後面下一個課程專門講這個etc目錄。

六、lib目錄也是rootfs中很關鍵的一個,不能省略的一個。lib目錄下放的是當前操做系統中的動態和靜態連接庫文件。咱們主要是爲了其中的動態連接庫。

相關文章
相關標籤/搜索