瞭解linux的程式:rootfs與linuxrc
核心啟動的最後階段啟動了三個程式
程式0:程式0其實就是剛才講過的idle程式,叫空閒程式,也就是死迴圈。 程式1:kernel_init函式就是程式1,這個程式被稱為init程式。 程式2:kthreadd函式就是程式2,這個程式是 核心的守護程式。這個程式是用來保證linux核心自己本身能正常工作的。 在嵌入式作業系統中一般會指定/linuxrc為init程式 |
1、/linuxrc是一個可執行的應用程式
(1)/linuxrc是應用層的,和核心原始碼一點關係都沒有
(2)/linuxrc在開發板當前核心系統下是可執行的。因此在ARM SoC的 下,這個應用程式就是用arm-linux-gcc編譯連結的;如果是在PC機linux系統下,那麼這個程式就是用gcc編譯連線的。
(3)/linuxrc如果是靜態編譯連線的那麼直接可以執行;如果是動態編譯連線的那麼我們還必須給他提供必要的庫檔案才能執行。但是因為我們/linuxrc這個程式是由核心直接呼叫執行的,因此使用者沒有機會去匯出庫檔案的路徑,因此實際上這個/linuxrc沒法動態連線,一般都是靜態連線的。
2、/linuxrc執行時引出使用者介面
(1)作業系統啟動後在一系列的自己執行配置之後,最終會給使用者一個操作介面(也許是cmdline,也許是GUI),這個使用者操作介面就是由/linuxrc帶出來的。
(2)使用者介面等很多事並不是在/linuxrc程式中負責的,使用者介面有自己專門的應用程式,但是使用者介面的應用程式是直接或者間接的被/linuxrc呼叫執行的。使用者介面程式和其他的應用程式就是程式2、3、4·····,這就是我們說的程式1(init程式,也就是/linuxrc)是其他所有應用程式程式的祖宗程式。
3、/linuxrc負責系統啟動後的配置
(1)就好像一個房子建好之後不能直接住,還要裝修一樣;作業系統啟動起來後也不能直接用,要配置下。
(2)作業系統啟動後的應用層的配置(一般叫執行時配置,英文簡寫etc)是為了讓我們的作業系統用起來更方便,更適合我個人的愛好或者實用性。
4、/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、 等)中vi、cd、ls等都是一個一個的單獨的應用程式。但是在嵌入式linux中,為了省事我們把vi、cd等所有常用的shell命令集合到一起構成了一個shell命令包,起名叫busybox。
根目錄rootfs中還應該有什麼
1、/linuxrc
2、dev目錄下的裝置檔案。在linux中一切皆是檔案,因此一個硬體裝置也被虛擬化成一個裝置檔案來訪問,在linux系統中/dev/xxx就表示一個硬體裝置,我們要操作這個硬體時就是open開啟這個裝置檔案,然後read/write/ioctl操作這個裝置,最後close關閉這個裝置。
在最小rootfs中/dev目錄也是不可少的,這裡面有一兩個裝置檔案是rootfs必須的。
3、sys和proc目錄。在最小rootfs中也是不可省略的,但是這兩個只要建立了空資料夾即可,裡面是沒東西的,也不用有東西。這兩個目錄也是和驅動有關的。屬於linux中的虛擬檔案系統。
4、usr是系統的使用者所有的一些檔案的存放地,這個東西將來busybox安裝時會自動生成。
5、etc目錄是很關鍵很重要的一個,目錄中的所有檔案全部都是執行時配置檔案。/etc目錄下的所有配置檔案會直接或者間接的被/linuxrc所呼叫執行,完成作業系統的執行時配置。etc目錄是製作rootfs的關鍵,所以後面下一個課程專門講這個etc目錄。
6、lib目錄也是rootfs中很關鍵的一個,不能省略的一個。lib目錄下放的是當前作業系統中的動態和靜態連結庫檔案。我們主要是為了其中的動態連結庫。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2220293/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux中的rootfs/initrd/ramfs/initramfsLinux
- rootfs打包方式
- 瞭解Linux的時鐘(轉)Linux
- 初級程式設計師應該瞭解的Linux命令程式設計師Linux
- Linux 串列埠程式設計 深入瞭解 termiosLinux串列埠程式設計iOS
- 瞭解JDK、JRE、JVM及Java程式的編譯與執行JDKJVMJava編譯
- Docker 原理剖析(三)rootfsDocker
- 深入瞭解Java社群程式Java
- 瞭解過、使用過的程式語言及其優勢,瞭解過、使用過的程式設計工具程式設計
- C/C++ Linux 程式設計師必須瞭解的 10 個工具C++Linux程式設計師
- Golang 包瞭解以及程式的執行Golang
- 你真的對 Linux 中的 Inode 瞭解嗎?Linux
- 我所瞭解的Linux運維技術Linux運維
- 一文帶你瞭解Linux軟連結與硬連結!Linux
- 瞭解 Android 的程式和執行緒Android執行緒
- 何為Linux,瞭解一下?Linux
- 全面瞭解Linux載入器(轉)Linux
- 關於Linux你瞭解多少?Linux由來!Linux
- 關於Linux你瞭解多少?Linux由來Linux
- 簡單瞭解Ruby與自學教程
- 帶你瞭解 Angular 與 Angular JSAngularJS
- 瞭解MySQL-索引與優化MySql索引優化
- vue瞭解與初步接觸/使用Vue
- 瞭解用於 Linux 和 Windows 容器的 Docker “容器LinuxWindowsDocker
- Linux引導載入程式之爭:瞭解 LILO 和 GRUB(轉)Linux
- 基於 ubuntu base 構建 rootfsUbuntu
- 瞭解用於 Linux 和 Windows 容器的 Docker “容器主機”與“容器作業系統”LinuxWindowsDocker作業系統
- 帶你瞭解小程式生態
- Linux磁碟分割槽瞭解多少?Linux入門必看Linux
- 用程式設計師的思維瞭解Filecoin程式設計師
- 小白程式猿瞭解大廠的開發模式模式
- 我瞭解到的JavaScript非同步程式設計JavaScript非同步程式設計
- 只有程式設計師瞭解的9個真相程式設計師
- 更深入地瞭解 Linux 許可權Linux
- 自學linux——22.粘滯位的瞭解及使用Linux
- 用系統日誌瞭解你的 Linux 系統Linux
- 你應該瞭解的 7個Linux ls 命令技巧Linux
- 帶你瞭解redux與react-reduxReduxReact