国产宅男网站在线|亚洲A级性爱免费视频|亚洲中精品级在线|午夜福利AA毛

  • <dd id="gf5jf"><th id="gf5jf"></th></dd>

    <cite id="gf5jf"><label id="gf5jf"></label></cite>
  • <div id="gf5jf"><listing id="gf5jf"></listing></div>
    學(xué)習(xí)啦>學(xué)習(xí)電腦>操作系統(tǒng)>Linux教程>

    如何將init程序打包進內(nèi)核

    時間: 若木635 分享

      將init程序打包進內(nèi)核

      我們先寫一個簡單的C語言init程序,它會在內(nèi)核的console中打印出經(jīng)典的hello world信息。

      hello.c:

      #include

      #include

      int main(int argc,char argv[])

      {

      printf("hello world, from initramfs.\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)建一個initramfs的構(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ù),進行initramfs的構(gòu)建了:

      在general setup配置目錄下的initramfs sources配置項下輸入image的路徑名,比如我的路徑就是/home/wyk/initramfs-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)核配置參數(shù)設(shè)置完成后,按常規(guī)的內(nèi)核編譯方法進行編譯,initramfs就自動連接到編譯好的內(nèi)核映像文件中了。

    75406