日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

精通init ramfs构建

發(fā)布時間:2023/12/1 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 精通init ramfs构建 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、init ramfs是什么  

在2.6版本的linux內(nèi)核中,都包含一個壓縮過的cpio格式的打包文件。當(dāng)內(nèi)核啟動時,會 從這個打包文件中導(dǎo)出文件到內(nèi)核的rootfs文件系統(tǒng),然后內(nèi)核檢查rootfs中是否包含有init文件,如果有則執(zhí)行它,作為PID為1的第一個進(jìn) 程。這個init進(jìn)程負(fù)責(zé)啟動系統(tǒng)后續(xù)的工作,包括定位、掛載“真正的”根文件系統(tǒng)設(shè)備(如果有的話)。如果內(nèi)核沒有在rootfs中找到init文件,則內(nèi)核會按以前版本的方式定位、掛載根分區(qū),然后執(zhí)行/sbin/init程序完成系統(tǒng)的后續(xù)初始化工作。

   這個壓縮過的cpio格式的打包文件就是init ramfs。編譯2.6版本的linux內(nèi)核時,編譯系統(tǒng)總會創(chuàng)建init ramfs,然后把它與編譯好的內(nèi)核連接在一起。內(nèi)核源代碼樹中的usr目錄就是專門用于構(gòu)建內(nèi)核中的init ramfs的,其中的ini tramfs_data.cpio.gz文件就是init ramfs。缺省情況下,init ramfs是空的,X86架構(gòu)下的文件大小是134個字節(jié)。

  二、構(gòu)建第一個init ramfs:hello world

  從C語言開始,學(xué)習(xí)計算機(jī)編程語言的第一個程序幾乎都是hello world,因此我們也構(gòu)建一個最簡單的hello world式的init ramfs,以說明init ramfs的基本構(gòu)建方法。

  init ramfs的靈魂是init文件(或者叫程序,因為它會被內(nèi)核第一個執(zhí)行),我們先寫一個簡單的init程序,它會在內(nèi)核的console中打印出經(jīng)典的hello world信息。

  hello.c:

  #include

  #include

  int main(int argc,char argv[])

  {

  printf("hello world, from init ramfs.n");

  sleep(9999999);

  return 0;

  }

  其中的sleep()函數(shù)語句是為了避免執(zhí)行時內(nèi)核很快打出panic的信息,并非功能上的需要。

  接著把hello.c編譯成靜態(tài)連接程序:

  gcc -o hello_static -static -s hello.c

  命令行中的-s參數(shù)表示編譯后的程序不包含調(diào)試定位信息,目的是減少編譯出來的程序文件的大小。

  再創(chuàng)建一個init ramfs的構(gòu)建源文件目錄image,把hello_static程序拷入這個目錄,并改名為init。

  在image目錄下,創(chuàng)建一個dev/console的設(shè)備文件,否init程序無法在內(nèi)核console中輸出信息:

  mknod -m 600 dev/console c 5 1

  注意,執(zhí)行這個命令需要有root權(quán)限。

  好了,現(xiàn)在可以設(shè)置內(nèi)核配置參數(shù),進(jìn)行init ramfs的構(gòu)建了:

   在general setup配置目錄下的init ramfs sources配置項下輸入image的路徑名,比如我的路徑就是/home/wyk/init ramfs-test/image。因為我們的init程序是ELF格式的,所以內(nèi)核需要支持ELF的可執(zhí)行文件,否則啟動這個init程序會失敗。在內(nèi) 核的 Executable file formats配置目錄下,選擇 kernel support for ELF binaries,則可使內(nèi)核支持ELF格式的可執(zhí)行文件。其他內(nèi)核配置參數(shù)根據(jù)實際需要設(shè)置即可,不過,為了減少內(nèi)核編譯時間,可參考這篇文章 http://linuxman.blog.ccidnet.com/blog-htm-do-showone-uid-60710-type- blog-itemid-293122.html設(shè)置一個最簡單的內(nèi)核配置。

  內(nèi)核配置參數(shù)設(shè)置完成后,按常規(guī)的內(nèi)核編譯方法進(jìn)行編譯,init ramfs就自動連接到編譯好的內(nèi)核映像文件中了。

  三、試驗環(huán)境搭建

   試驗init ramfs需要經(jīng)常重啟系統(tǒng),所以使用CPU模擬器是不錯的選擇。我們可以選用qemu,它支持直接啟動linux內(nèi)核,無需在模擬器中安裝OS。從方便 使用的角度考慮,我們采用qemu launcher設(shè)置qemu的各項參數(shù),它的安裝可參考http://linuxman.blog.ccidnet.com/blog-htm-do- showone-uid-60710-type-blog-itemid-612280.html。

  在qemu launcher的linux配置標(biāo)簽中,打勾直接啟動linux,然后在下面的文本框中填上剛才編譯好的內(nèi)核映像文件的路徑名。因為qemu的運行還需要設(shè)置硬盤映像文件,所以還需要在左邊的配置標(biāo)簽中新建一個硬盤映像文件,但實際上我們并不使用硬盤。

  配置好qemu的參數(shù)后,點擊launcher按鈕,內(nèi)核就開始在qemu中運行了。內(nèi)核輸出一堆內(nèi)核運行信息后,最后打出了

  hello world, from init ramfs.

  哈哈,我們構(gòu)建的init ramfs已經(jīng)能夠正常工作了!

轉(zhuǎn)載于:https://www.cnblogs.com/linengier/archive/2013/03/30/2990293.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的精通init ramfs构建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。