自制linux與內核編譯

自制Linux系統

1分區并創建文件系統

fdisk/dev/sdb

分兩個必要的分區

/dev/sdb1對應/boot /dev/sdb2對應根/

mkfs.ext4 /dev/sdb1

mkfs.ext4 /dev/sdb2

2掛載boot

mkdir/mnt/boot

mount /dev/sdb1 /mnt/boot

?

3安裝grub

grub-install –root-directory=/mnt/   dev/sdb

4、建立grub.conf:

vim /mnt/boot/grub/grub.conf

title wanglinux

root (hd0,0)

kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda2 selinux=0 init=/bin/bash

initrd /initramfs-2.6.32-642.el6.x86_64.img

5、恢復內核和initramfs文件

cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/

cp /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/boot

6、創建一級目錄

mkdir/mnt/sysroot

mount /dev/sdb2 /mnt/sysroot

mkdir–pv/mnt/sysroot/{etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc,opt,home,root,boot,dev,mnt,media}

7、vim /mnt/sysroot/etc/fstab

/dev/sda1 /boot ext4 defaults 1 1

/dev/sda2  /    ext4 defaults 1 2

8、復制bash和相關庫文件

9、復制相關命令及相關庫文件

如:ls,cat,vim,reboot,hostname等

/boot/config-2.6.32-504.el6.x86_64 這個文件記錄了這個系統所有的內置模塊,以及有沒有啟用信息。后面是y的就是打進vmlinuz-2.6.32-504.el6.x86_64這個內核文件里邊了,是M的就是以模塊形式放在/lib/modules.

需要在網上下載內核文件linux-3.18.41.tar.xz解壓縮然后創建個軟連接linux

編譯安裝內核之前,需要安裝編譯工具

yum grouplist

找到 Development Tools安裝

“`

(1)cp /boot/config-2.6.32-504.el6.x86_64 /usr/src/linux/.config

cd /usr/src/linux

make menuconfig

(配置內核選項)(因為拷貝過來的是模板,要挑選需要的模塊)

會報錯,需要安裝別的包

yum -y install "curses*"

make -j 內核數

“`

內核設計體系:單內核,微內核

linux:單內核,但充分借鑒微內核體系設計的優點:為內核引入了模塊化機制

內核的組成部分:

kernel:內核核心,一般為bzimage,通常位為/boot目錄,一般我們看到這個文件,就說明內核文件沒用了,在系統啟動時已經被加載過,開機后不在被使用,放在目錄里,方便我們后期管理.

kernel object:內核對象,即內核模塊,一般放置于/lib/modules/VERSION-release/.

A.內核模塊與內核核心版本一定要嚴格匹配;

B.內核模塊化的主要動因:為了能夠支持第三方廠商的硬件設備及其驅動程序,可以引進內核模塊化的方式設計,這樣每一個廠商都可以把自己的設備驅動寫成內核模塊,當用到這個設備時,單獨編譯這個內核模塊.針對于當前內核的源碼樹,編譯這個模塊,并裝載到內核上就可以使用了;

C.在對內核的編譯中,定義某個內核的功能,分為三種選擇:

[ ]:N 編譯時不啟動功能,留空

[M]:Module 編譯成內核模塊,用到時臨時裝載,只占用磁盤空間,不占用內核內存空間

[*]:Y 直接編譯進內核核心,只要內核在,功能就在,不用裝載.

D.內核:動態裝載和卸載

ramdisk:輔助性文件,并非必須,這取決于內核是否能直接驅動rootfs所在的設備;能直接驅動,ramdisk就不需要;不能驅動,就需要借助ramdisk封裝驅動,不僅包括設備的驅動程序,也可以包括設備上的格式化所提供的邏輯設備,比如說lVM,文件系統;如果都編譯成模塊的話,都可以加載到內核中.

借助于ramdisk,能加載的驅動,包括為:

目標設備驅動,例如:ISCSI設備的驅動

邏輯設備驅動,例如:LVM設備的驅動

文件系統,例如:XFS文件系統

ramdksk:是一個簡裝版的根文件系統;不能作為一個操作系統使用,因為運行在內存中,缺少長久性,所以操作系統必須在持久性存儲設備上,這也是做根切換的原因.提供設備驅動,僅僅是為了能夠讓內核找到真正的根文件系統.

內核信息查看:

uname命令:

-a, –all 全部顯示

-s, –kernel-name 內核名稱

-n, –nodename  節點名稱(主機名)

-r, –kernel-release  內核發行號

-v, –kernel-version  內核編譯版本號

-m, –machine   硬件架構類型

-p, –processor   cpu類型

-i, –hardware-platform  硬件平臺名稱

-o, –operating-system   操作系統類型

模塊信息查看:

lsmod命令:顯示當前內核已加載的模塊名,模塊大小,被引用次數,被什么模塊所引用

抽取/proc/modules的信息,lsmod抽取內核自己的輸出接口的信息,以人性化的方式輸出.

modinfo命令:顯示指定模塊文件的詳細信息

無論模塊是否被裝載,都可以用modinfo查看,modinfo就是通過獲取/lib/modules目錄下與當前內核版本同名的目錄下的模塊原數據文件,加以顯示的.模塊原數據文件類似于rpm包的元數據數據庫,可以支持查詢操作,需要專門的命令.每個文件都是經過hash格式編碼,文件里面的都是鍵值對,從中查找數據的性能是O1(恒定)的,衡量一個算法的標準,O1,On,Olocaln..

選項:

-F:只顯示指定字段的信息

-a:

-n:顯示文件路徑,相當于 -F filename,

-k:默認顯示當前內核信息,要想顯示其他內核的相關模塊,使用-k選項指明kernel,和模塊名

模塊信息管理:

modprobe命令:模塊動態裝載和卸載

modpobe [-r] mod_name

模塊動態裝卸載也可以基于文件實現,-c指明配置文件,默認是/etc/modprobe.d/*.conf文件

選項:

裝載模塊: modprobe 模塊名          被依賴的模塊也會被裝載

卸載模塊: modprobe- r 模塊名    正在使用的和默認裝載的模塊千萬不要卸載,會影響系統使用

depmod命令:生成模塊依賴關系

內核模塊依賴關系文件及系統信息映射文件的生成工具

大多數命令選項,不使用;只有在新增模塊時,這個模塊依賴于其他模塊,不得不手動改寫模塊文件.自己手動執行drpmod命令

在對另外一個的內核文件生成依賴關系,并且保存文件也不放在/boot目錄下,才有必要使用-b,-F,-E 選項指明內核文件,和內核模塊

模塊裝載和卸載的另一組命令:

insmod命令:

insmod [filename][module options…]

filename:模塊文件的文件路徑,配合modinfo -n 查看模塊文件路徑

rmmod命令:

rmmod [module_name(模塊名)]

ramdisk文件的管理:

不是直接生成的,而是由命令管理的

(1)mkinitrd命令: centos5 但6,7也有連接

為當前使用中的內核重新制作ramdisk文件

文件名:

centos5:initrd-2.6.32-504.30.3.el6.x86_64kdump.img

centos6,7:initramfs-2.6.32-504.30.3.el6.x86_64.img

命令格式:

mkinitrd [OPTION…] [<initrd-image>] <kernel-version>

–with=<module>:除了默認的模塊之外需要裝載至initramfs中的模塊,重新制作ramdisk的重要原因,添加新的模塊.

–preload=<module>:initramfs所提供的模塊需要預先裝載的模塊;

示例: mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)

(2)dracut命令 centos 6,7

較為底層的生成ramdisk文件的工具

#dracut  [OPTION…] [<initrd-image>] <kernel-version>

示例:dracut /boot/initramfs-$(uname -r).img $(uname -r)

內核信息輸出的偽文件系統:

/proc/:內核狀態和統計信息的輸出接口.可以通過各種文件系統直接管理.同時,還提供一個配置接口,/proc/sys;

參數:

只讀:信息輸出;/proc下以數字命名的目錄,只是用來輸出某進程的相關信息./例如:/proc/#/*

可寫:可接受用戶指定一個"新值"來實現對內核某功能或特性的配置;寫權限只有管理員擁有./proc/sys/

專門用來修改用于支持修改其值的參數,從而能夠讓我們實現配置內核參數的

偽文件系統的參數與/proc/sys/目錄下的每個文件有映射關系,都相對與/proc/sys/目錄而言,每個參數對應著我們所看到的/proc/sys/目錄下的每個文件, 文件路徑中的斜杠分隔符替換成點號,就成為參數名;

示例:net/ipv4/ip_forward相當于net.ipv4.ip_forward

修改方式:

(1)sysclt命令

專用于查看或設定/proc/sys/目錄下參數的值

命令使用格式:

sysclt [options] [variable[=value]]

查看:

#sysclt -a 查看全部信息

#sysclt variable 指定參數名稱 variable為文件目錄的簡裝路徑,以點分隔

修改其值:

#sysclt -w variable=value

(2)文件系統命令(cat,echo)

偽文件系統,不能使用文本編輯器去直接編輯,而應該使用重定向的方式覆蓋原值

查看:

#cat /proc/sys/PATH/TO/SOME_KERNEL_FILE

設定:使用覆蓋重定向修改內核參數

echo "node1" > /proc/sys/kernel/hostname

注意:上述兩種方式的設定僅當前內核有效,內核或系統重啟,配置失效

(3)配置文件

有可能是兩種文件,

centos 5,6: /etc/sysctl.conf

centos7:    /etc/sysctl.d/*.conf 分隔成多段配置

修改配置文件,不會立即生效,下次啟動系統

立即有效:重讀此配置文件,通知讓sysctl命令重讀此文件,并根據此文件的設定,來修改內核參數相關值即可

sysctl -p [/PATH/TO/CONFLG_FILE] 從指定文件中加載內核參數的相關設定,默認讀取/etc/sysctl.conf,可指定其他文件,但最好在/etc/sysctl.d/目錄下.

內核參數:

1.net.ipv4.ip_forward,核心路由轉發功能

2./proc/sys/vm/drop_caches:回收內存

0:

1:

2:

3./proc/sys/kernel.hostname:主機名

4./proc/sys/net/ipv4/icmp_exho_ignore_all

忽略別人ping自己,自己可以ping 別人

/sys/目錄:

掛載的是sysfs:輸出內核識別出的各硬件設備的相關屬性信息,也有內核對硬件特性的可設定參數;對此些參數的修改,即可定制硬件設備工作特性;

[root@Wencx ~]# ls /sys

block  bus  class  dev  devices  firmware  fs  hypervisor  kernel  module  power

塊設備,總線,

    不同目錄,通過不同視角對各設備劃分的類別;根據總線劃分,根據類別劃分等等,另外也會根據某些特殊內容做些不同類的輸出,或者說很多文件,很多設備所輸出的位置不止一個目錄,但是在多個目錄下指向的同一個文件或設備.對一個linux主機來講,每一個硬件設備被訪問就要有設備文件,設備文件在/dev/目錄下,內核怎么知道不同用戶會有哪些硬件設備呢?事先不得而知.那應該準備怎樣的設備文件來讓內核識別呢?不知道的情況下,只能全部列出所有的設備文件,linux內核2.4以后在/dev/目錄下有兩萬多個設備文件,無法預測用戶用到哪些設備,所以把用戶但凡用到的全創建出來,那么有兩個問題?一.用戶使用的很少,大多數文件浪費,雖不占用磁盤空間,但文件數量過大,二,沒辦法通過設備文件判斷某個設備的存在./sys/目錄在linux2.6內核引入后,使得我們能夠按需創建設備文件,意思是說,每一次當內核系統完成自身初始化的時候,它會自動探測識別出每一個硬件設備信息,而后在把設備信息在系統啟動完后,在內核初始化完后,在根文件系統掛載后,在重新探測輸出到/sys/目錄下,有多少硬件都在/sys/目錄下顯示.但是有些設備沒有設備文件,就會臨時讀取/sys/目錄下的設備信息,給它按需創建設備文件.對/dev/目錄來說至關重要.

    udev:通過讀取/sys/目錄下的硬件設備信息按需為各硬件設備創建設備文件.是用戶空間程序,不能直接跟硬件打交道,/sys/目錄的存在才讓udev讀取硬件設備信息.專用命令:devadmin,hotplug;

    當根文件掛載完成后,系統初始化已經結束,系統就不會輸出硬件信息./sys/目錄的存在就會強制內核重新輸出一遍內核信息,把內核中的各硬設備信息輸出至/sys/目錄下,而這時候udev就會通過讀取/sys/目錄下的硬件設備信息按需為各硬件設備創建設備文件.

    /dev/目錄下許多文件是Udev創建的,還有一些是內核創建的,比如說內核還要識別/sda硬盤,如果不能識別sda硬盤,標識為一個設備的話,怎么掛載設備?為了讓設備訪問正常,內核自動通過devtmpfs(設備臨時文件系統),為每個內核必須用到的設備創建一個設備文件,這些設備文件可以在根文件系統掛載以后,從內核直接移到/dev/目錄下,但不是完全移動,剩下的拷到udev,

    udev為設備創建設備文件時,會讀取其事先定義好的規則文件,一般在/etc/udev/rules.d目錄下,以及在/usr/lib/rules.d/目錄下;

    /etc/udev/rules.d/70-persistent-net.rules文件,更改網卡配置文件的定義,并更改

原創文章,作者:forest,如若轉載,請注明出處:http://www.www58058.com/46166

(0)
forestforest
上一篇 2016-09-13
下一篇 2016-09-13

相關推薦

  • class13 shell編程(五)軟件包管理(三)

    一、shell編程(五) 位置變量補充 shift (踢掉參數) shift                #! /bin/bashecho "1st arg …

    Linux干貨 2016-08-24
  • Linux用戶、組、權限管理

    Linux用戶與組管理 Linux系統上,用戶通過內核拷貝程序到內存中,從此發起進程。進程以發起者的身份進行,進程對文件的訪問權限,取決于發起進程的用戶的權限。而有些后臺進程或服務類進程以非管理員身份運行,為此也需要創建多個普通用戶,此類用戶不需登錄。 系統中,用戶類別分為管理員和普通用戶(系統用戶和登錄用戶),組類別分為基本組和附加組。管理系統上的用戶與組…

    Linux干貨 2016-12-07
  • 01day-計算機與操作系統基礎

    第1章 計算機基礎 1.1 什么是計算機 計算機是個籠統的概念,泛指一切計算功能的機器。這樣扯的話,以前的算盤也是計算機了。我們現在的計算機應該稱作電子計算機,我天朝人民稱為電腦。聽說谷歌在研究量子計算機,完全不懂是什么玩意。 一不小心在百度百科看到還有光子計算機,生物計算機,嚇我一跳,趕緊復制鏈接過來,自己慢慢看《百度百科—-計算機》 &nbs…

    Linux干貨 2016-06-29
  • 第二周作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 文件管理命令:cp、mv、rm (1)cp命令:copy     單源復制:cp [OPTION]… [-T] SOURCE DEST     多源復制:cp…

    Linux干貨 2016-12-10
  • shell腳本編寫規范

    1 腳本名以.sh結尾,名稱盡量見名之意,比如ClearLog.sh Clear_Log.sh clearlog.sh SerRestart.sh Ser_Restart.sh;2 盡量使用UTF-8編碼,注釋及輸出盡量使用英文;3 一般給到執行權限,但一些關于變量的配置文件不用加執行權限;4 執行的時候可以使用bash 執行,或者使用bash -x執行,可…

    Linux干貨 2017-04-16
  • vim編輯以及腳本編程練習

    vim編輯器的使用總結: vim在工作過程當中有三種模式:編輯模式、輸入模式、末行模式。 1、編輯模式:即命令模式,鍵盤操作常被理解為編輯命令; 2、輸入模式:在文本文件當中進行輸入內容; 3、末行模式:vim內置的命令行接口,執行vim的內置命令。   vim的使用 打開文件 #vim[option]…[FILE] +#:打開文件后,直接讓光標處…

    Linux干貨 2017-10-29

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-20 09:48

    前面寫的比較簡單,后面對命令的總結很完整。實驗過程中復制bash和庫文件的腳本怎么沒有附加上來?我們應該盡量把整個實驗流程完整的寫下來哦。

欧美性久久久久