1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問(wèn)題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      Linux外圍文件系統(tǒng)的定制方法

      前言

      從事川西大數(shù)據(jù)中心,服務(wù)器租用,云主機(jī),雅安服務(wù)器托管,空間域名,CDN,網(wǎng)絡(luò)代維等服務(wù)。

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

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

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

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

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

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

      我們先選擇*M1*。

      思路

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

      Step1:獲得shell版本的initrd.img

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

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

      創(chuàng)建腳本 init

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

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

      init 內(nèi)容

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      #!/bin/bash
      exec /sbin/init

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

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

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

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

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

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

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

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

      可在真機(jī)上運(yùn)行的完整版小系統(tǒng)

      部分目錄文件:

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

      /etc

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

      /bin

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

      /sbin

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

      /usr/bin

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

      /usr/sbin

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

      總結(jié)

      以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)創(chuàng)新互聯(lián)的支持。


      分享標(biāo)題:Linux外圍文件系統(tǒng)的定制方法
      新聞來(lái)源:http://www.ef60e0e.cn/article/gsoige.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        本溪| 浦县| 济南市| 陈巴尔虎旗| 贵州省| 教育| 安多县| 甘泉县| 板桥市| 华容县| 留坝县| 裕民县| 安远县| 固阳县| 尼勒克县| 邵阳县| 濮阳市| 齐河县| 宣汉县| 志丹县| 台北县| 长汀县| 南川市| 昭通市| 德庆县| 九江县| 广东省| 台州市| 喀喇| 吉首市| 连州市| 南木林县| 延吉市| 环江| 扎兰屯市| 石城县| 新巴尔虎右旗| 绥阳县| 浦江县| 讷河市| 江达县|