自制小型linux系統
Linux開機流程
開機自檢:程序post
MBR引導:硬盤上的mbr 主引導記錄由bootloader 446字節(grub引導程序第一個階段讀內核)、分區表(64字節)、id標示magic(2字節)
GRUB菜單:在硬盤裡/boot/grub為grub第二個階段,引導到硬盤,選擇要加載的操作系統
加載內核(kernel):加載操作系統的內核並運行init進程
運行init進程:需要一個inittab
Inittab中各個級別的配置文件對應的初始化腳本rc.sysinit
Rc.sysinit腳本:(初始化腳本)
(功能:設置主機名、啟動網絡功能、設置時鐘、設置鍵盤)
選擇級別後傳一個數字傳給rc腳本進入/etc/rc0.d/* /etc/rc1.d/* /etc/rc2.d/* /etc/rc3.d/* /etc/rc4.d/* /etc/rc5.d/* /etc/rc6.d/*中執行相應腳本,帶k的按順序殺死帶s的按順序啟動。
執行開機腳本/etc/rc.d/rc.local
通過mingetty進程啟動一些終端也就是開機啦
通過宿主機來建立自制的linux小系統(我這裡用vm)
*創建一塊兒新的硬盤把硬盤掛到完整的宿主機上並對硬盤分區並從完整宿主機上整理相應的內核文件和應用文件,等一切所需准備完成時把硬盤移動到缺少硬盤的虛擬機上進行測試。
*對新的硬盤建立分區:先建立三個主分區sdb1:100m sdb2:1g sdb3:500m
建立完主分區後把sdb3類型改為82即swap分區
(圖為各個分區硬盤大小20G)
*對磁盤進行格式化mkfs –t ext3 /dev/sdb1 mkfs -t ext3 /dev/sdb2
/dev/sdb1作為引導分區/dev/sdb2作為根分區
*對磁盤進行掛載
*構建MBR:即構建grub,第一階段在mbr內部裡第二階段在硬盤裡(自動找到/mnt/boot、指向/dev/sdb而不是某個分區)

*找到boot目錄後自動創建grub

*Grub缺少一個菜單建立grub.conf文件(裡面是內核文件和一些驅動和一些開機默認項引導項)
*建立菜單前先把宿主機器的內核拷貝過來

*由於宿主機和新建硬盤的不同,有關驅動的initrd-2.6.18-164.e15.img內的信息也會不同,所以我們應該首先更改該文件的信息。

*展開後的文件裡的init文件在啟動中是會被執行的,應更改該文件的內部信息

*因為我們創建的新硬盤中swap分區並沒有格式化不能被應用所以把87行注釋掉,更改完成後對文件進行重新打包,並把打包後的文件拷到/mnt/boot/下

*前幾個階段結束後,寫一個grub菜單

*接下來是init進程:在新建硬盤sysroot目錄下創建所需要的目錄並把每個目錄的配置內容以及所要用的庫拷貝過去

*寫inittab:
*把宿主機/etc/inittab中的21 si::sysinit:/etc/rc.d/rc.sysint行拷貝到/mnt/sysroot/etc/inittab中
*在新建rc.d中沒有rc.Sysinit所以我們要自己創建,rc.sysinit是一個shell腳本
*由於要運行shell文件應加入bash的配置

*為了方便把庫加入到每個指令文件內,編寫一個cp.sh

基本指令鏈接庫導入之後就可以進入系統進行簡單操作

*在/mnt/sysroot/etc/inittab文件下修改內容實現init 0 init 6的應用

*Init 6

*啟動界面添加背景圖片/mnt/boot/grub/grub.conf文件下
圖片大小640*480 14位色 格式xmp.gz
安裝yum源 修改/etc/yum.repos.d/rhel-debuginfo.repo

安裝完成後在圖形化界面下運行gimp可以對圖片進行修改

*添加網絡功能
模塊:

*Eth0只是個別名,真正叫pcnet
*網卡pcnet32
*Mii被pcnet32所依賴
*Modinfo查看模塊兒詳細信息
*Rmmod模塊兒卸載
*Modprobe 名稱 加模塊兒(inmod 必須要加完整路徑)

*在新硬盤裡建放模塊兒的文件並把網絡模塊拷貝過去

*由於pcnet32依賴於mii所以要把mii拷貝過來

*調用模塊
*把要用的pcnet32.ko和mii.Ko模塊兒拷貝過來,,編輯rc.sysinit來調用模塊兒並未網卡配上地址

*已經實現網絡功能

*實現ftp功能: *安裝ftp服務

*加入vsftpd指令

*把宿主機內的vsftpd下的文件拷貝到新建硬盤相應位置去,在相對應的var目錄下建立ftp/pub

*因為ftp安裝完之後會形成一個ftp用戶,用來登錄ftp,需要把該ftp賬號拷貝過來

*由於登陸name與id需要一種nsswhich機制,機制需要nesswitch.conf文件,conf文件依賴於幾個鏈接庫,這裡我們只做個別鏈接庫的拷貝

*ftp需要有一個日志log目錄所以要麼創建log要麼禁用掉
進入/mnt/sysroot/etc/vsftd/vsftpd.conf把39和56有關log的句子禁用掉

*再把userlist那一行禁用掉

*手工創建一個/mnt/sysroot/etc/usr/share/empty目錄

*實現ftp
簡單功能已經能夠實現,如需更多功能還得大家自己慢慢研究學習!!!