最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux外圍文件系統(tǒng)的定制方法

 更新時間:2019年02月01日 09:18:28   作者:騰訊云加社區(qū)  
這篇文章主要給大家介紹了關(guān)于Linux外圍文件系統(tǒng)的定制方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

一般來說,我們所說的Linux系統(tǒng)指的是各種基于Linux Kernel和GNU Project的操作系統(tǒng)發(fā)行版。為了掌握Linux操作系統(tǒng)的使用,了解 Linux操作系統(tǒng)的運作過程,理解內(nèi)核與外圍支撐系統(tǒng)的關(guān)系,加深對開源操作系統(tǒng)的認(rèn)識,我決定造個輪子——自己定制一個Linux文件系統(tǒng)。

這里有兩種實現(xiàn)方法:

直接自己實現(xiàn)init**\*(M1)***

加載bios 的硬件信息-> 讀取MBR –>執(zhí)行Grub ->加載kernel–> 加載驅(qū)動–> init –> 執(zhí)行bash

利用系統(tǒng)/sbin/init**\*(M2)***

加載bios 的硬件信息-> 讀取MBR –>執(zhí)行Grub ->加載kernel–> 加載驅(qū)動–> init –> /sbin/init -> 取得run-level信息 -> /etc/rc.d/rc.sysinit -> services –> /etc/rc.d/rc.local –> mingetty –> login

我們先選擇*M1*。

思路

  • 利用原有系統(tǒng)復(fù)制必備部件到新存儲器
  • 利用initrd.img機制在RAM Disk中測試
  • 搭配原文件內(nèi)核和模塊啟動

Step1:獲得shell版本的initrd.img

首先,我們可以寫一個腳本init,使得內(nèi)核用該文件系統(tǒng)啟動后能夠直接獲得一個Bash。


創(chuàng)建腳本 init

其中:/bin目錄下是常用命令,init是自己寫的腳本,/lib64目錄下是應(yīng)用程序所依賴的動態(tài)庫。

init 內(nèi)容

現(xiàn)在我們需要使用命令行,創(chuàng)建bin和sbin目錄,向其中添加bash、ls、rm、cp、mv、echo、cat、less等基礎(chǔ)命令。由于這些命令需要依賴/lib64等目錄下的一些動態(tài)鏈接的共享庫,所以需要將依賴的庫拷貝到小系統(tǒng)對應(yīng)的目錄下,用ldd命令查詢應(yīng)用程序及其依賴的動態(tài)庫。完成之后,執(zhí)行:

find . | cpio -H newc -o | gzip > /boot/initrd.img

將根文件系統(tǒng)打包成initrd.img放到/boot目錄下。啟動時系統(tǒng)會自動執(zhí)行initrd.img中的init。

費了這么大勁生成initrd.img,如何測試新建的initrd.img呢,需要在grub啟動配置文件當(dāng)中增加一個入口用于測試。

title CentOS 6 Mini
root (hd0,0)
kernel /vmlinuz-2.6.32-642.el6.x86_64
initrd /initrd.img

這樣重啟之后就會出現(xiàn)啟動選項了。

Step2:完成掛載原系統(tǒng)能力

為了能掛載原系統(tǒng),必須在initrd.img中加載原系統(tǒng)運行所必須的驅(qū)動模塊,比如ext4文件系統(tǒng)的驅(qū)動、scsi設(shè)備的相關(guān)驅(qū)動等,/sbin/modinfo 配合/sbin/insmod,驅(qū)動放到/module

Step3:完成擁有管理設(shè)備能力(udev)

利用管理、監(jiān)控主機設(shè)備的服務(wù)程序udevd來自動加載所需的驅(qū)動模塊,比我們自己實現(xiàn)更加可靠。udevd的規(guī)則文件在/lib/udev/目錄下,配置文件在/etc/udev/目錄下,同時還需要/etc/nsswitch.conf配置的名稱服務(wù)交換,其依賴的庫為/lib目錄下以libnss開頭的文件,將上述文件拷貝到我們的目錄下,然后使用/sbin/start\_udev命令可以啟動udevd服務(wù)。(udevd需要調(diào)用一些其他的系統(tǒng)命令,如/sbin/modprobe,可用strace進(jìn)行跟蹤獲?。?/p>


小系統(tǒng)的目錄文件

其中:/dev目錄下是系統(tǒng)存放可用設(shè)備的目錄,/log是使用strace命令生成的log記錄文件。

Step4:完成擁有l(wèi)ogin登錄能力

由于login的機制比較復(fù)雜,涉及進(jìn)程管理機制和進(jìn)程組、控制臺等許多方面,因此我們采用*M2*,將/sbin/init命令拷到小系統(tǒng)目錄下,init腳本改為

#!/bin/bash
exec /sbin/init

將控制權(quán)交給/sbin/init之后,系統(tǒng)啟動時就必須等到它完成一系列調(diào)用之后,進(jìn)入login界面,用戶才能重新獲得控制權(quán)。

/sbin/init的過程大致分為三塊:第一塊是udevd加載驅(qū)動模塊、文件系統(tǒng)檢查和根切換,相關(guān)配置在/etc/rc.sysinit中;第二塊是啟動各項服務(wù),相關(guān)配置在/etc/rc.d/目錄下;第三塊是登錄部分,需要調(diào)用/sbin/mingetty和/bin/login等命令。將上述所涉及的命令及文件拷貝到小系統(tǒng)對應(yīng)的目錄下,并對配置進(jìn)行修改。

由于小系統(tǒng)啟動之后initrd.img作為臨時根文件系統(tǒng)直接在內(nèi)存中運行,而我們小系統(tǒng)不需要進(jìn)行根切換,故將/etc/rc.sysinit中remount\_needed()函數(shù)體注釋掉,這樣就不會根切換了。

由于系統(tǒng)采用了全新的Upstart啟動方式(/sbin/init程序已經(jīng)改由upstart軟件包提供),將與Upstart啟動相關(guān)的配置文件拷貝至小系統(tǒng)目錄下:

/etc/inittab 配置默認(rèn)運行級別
/etc/init/rcS.conf 加載rc.sysinit腳本,完成系統(tǒng)初始化任務(wù)
/etc/init/rc.conf 兼容腳本,負(fù)責(zé)各運行級別的調(diào)用處理
/etc/init/rcS-sulogin.conf 為單用戶模式啟動/sbin/sushell環(huán)境
/etc/init/control-alt-delete.conf 控制終端下的Ctrl+Alt+Del熱鍵操作
/etc/init/start-ttys.conf 配置tty終端的開啟數(shù)量、設(shè)備文件
/etc/sysconfig/init 控制tty終端的開啟數(shù)量、終端顏色方案
/etc/init/tty.conf 控制tty終端的開啟

將bootmini/etc/inittab的運行優(yōu)先級改為2,那么系統(tǒng)啟動時/sbin/init將執(zhí)行bootmini/etc/rc.d/rc2.d/目錄下以S開頭的文件,將一些不需要開啟的服務(wù)文件名改為K開頭。

在bootmini/etc/rc.d/rc.local文件中可以加入用戶需要系統(tǒng)開機啟動后自動執(zhí)行的操作。

login程序基于認(rèn)證體系PAM, 配置文件在/etc/pam.d/目錄下,相關(guān)庫文件有/lib64/security/及其依賴的庫文件;login還涉及用戶組管理/bin/chgrp、/bin/chown、/bin/chmod等,保存用戶名的文件/etc/passwd、/etc/group,用戶密碼文件為/etc/shadow。其他一些涉及的文件可通過strace來幫助分析。

可在真機上運行的完整版小系統(tǒng)

部分目錄文件:

/etc


/bin

/sbin

/usr/bin


/usr/sbin

至此,文件系統(tǒng)算是可以跑了。下一篇我們再造個輪子——進(jìn)行Linux內(nèi)核的裁剪。真機效果也將在下篇看到。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Ubuntu文件系統(tǒng)磁盤空間不足報錯low disk space on filesystem root的解決方案

    Ubuntu文件系統(tǒng)磁盤空間不足報錯low disk space on file

    最近開始啟動Ubuntu20.04時提示的信息如下:Low Disk Space on “Filesystem root”,這是因為Ubuntu文件系統(tǒng)磁盤空間不足導(dǎo)致的,所以本文給大家詳細(xì)介紹了Ubuntu文件系統(tǒng)磁盤空間不足報錯low disk space on filesystem root的解決方案,需要的朋友可以參考下
    2024-09-09
  • vim學(xué)習(xí)高級技巧之序列的生成方法詳解

    vim學(xué)習(xí)高級技巧之序列的生成方法詳解

    Vim經(jīng)過了這么多年的發(fā)展,已經(jīng)是世界上最強悍的編輯器之一,這篇文章主要給大家介紹了關(guān)于vim高級學(xué)習(xí)技巧之序列生成的相關(guān)資料,文中通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)下吧。
    2017-09-09
  • linux用戶和組命令實例分析【切換、添加用戶、權(quán)限控制等】

    linux用戶和組命令實例分析【切換、添加用戶、權(quán)限控制等】

    這篇文章主要介紹了linux用戶和組命令,結(jié)合實例形式分析了Linux系統(tǒng)切換、添加用戶、權(quán)限控制等相關(guān)命令與使用技巧,需要的朋友可以參考下
    2020-03-03
  • linux下C語言實現(xiàn)寫日志功能

    linux下C語言實現(xiàn)寫日志功能

    這篇文章給大家分享了linux下C語言實現(xiàn)寫日志的相關(guān)功能方法以及實例代碼,有興趣的朋友可以學(xué)習(xí)參考下。
    2018-07-07
  • Linux MySQL忘記root密碼解決方案

    Linux MySQL忘記root密碼解決方案

    這篇文章主要介紹了Linux MySQL忘記root密碼解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • 淺談Linux C語言動態(tài)庫及靜態(tài)庫

    淺談Linux C語言動態(tài)庫及靜態(tài)庫

    下面小編就為大家?guī)硪黄獪\談Linux C語言動態(tài)庫及靜態(tài)庫。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • apache日志配置一例

    apache日志配置一例

    apache日志配置一例,包括指定存儲目錄與格式、自動刪除過期的日志文件,有需要的朋友可以參考下
    2013-02-02
  • Linux學(xué)習(xí)之CentOS(二十九)--Linux網(wǎng)卡高級命令、IP別名及多網(wǎng)卡綁定的方法

    Linux學(xué)習(xí)之CentOS(二十九)--Linux網(wǎng)卡高級命令、IP別名及多網(wǎng)卡綁定的方法

    本篇文章詳細(xì)的介紹了Linux網(wǎng)卡高級命令、IP別名及多網(wǎng)卡綁定的實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2016-11-11
  • Linux之權(quán)限管理解讀

    Linux之權(quán)限管理解讀

    本文介紹了Linux下的超級用戶和普通用戶以及它們的命令提示符,接著,詳細(xì)解釋了權(quán)限的概念、訪問者的分類、文件類型與訪問權(quán)限以及文件權(quán)限值的表示方法,最后,文章討論了文件權(quán)限的設(shè)置方法,包括chmod、chown和chgrp命令,并列舉了一些常見權(quán)限問題
    2025-03-03
  • Apache 2配置域名綁定的方法詳解

    Apache 2配置域名綁定的方法詳解

    這篇文章主要給大家介紹了Apache 2配置域名綁定的方法,文中介紹的很詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02

最新評論

怀安县| 朝阳县| 寿阳县| 攀枝花市| 简阳市| 尉犁县| 简阳市| 新闻| 四川省| 沁源县| 河北区| 万年县| 聂荣县| 江都市| 乌拉特中旗| 巴中市| 巴林右旗| 宁海县| 合江县| 三门峡市| 利津县| 田阳县| 江达县| 瑞丽市| 海南省| 文成县| 沧州市| 安多县| 麦盖提县| 都江堰市| 九台市| 榆中县| 福建省| 西宁市| 上饶县| 铁岭县| 九龙城区| 凌云县| 彰化市| 呼伦贝尔市| 马公市|