上個星期,馬哥講了如何給小linux添加裝置模組,並實現登入介面,層級1,開關機等等。通過不斷的倒騰這個小Linux來更加深入的理解linux系統。
準備工作:1.您應當知道核心模組的概念,可以去我的文章瞭解下
啟動流程 http://blog.csdn.net/deansrk/article/details/6659421
核心模組 http://blog.csdn.net/deansrk/article/details/6666629
2.您應該瞭解linux的啟動流程與啟動層級的概念
##更新:一些核心模組相關命令介紹:
modinfo pcnet32
查看模組中對應的詳細資料和“依賴資訊”,“路徑”等
如果以後自己給小linux加模組,需要將依賴的模組也移植過去
/etc/modprobe.conf
系統開機時載入的所有模組,向模組中傳遞參數資訊,如何想開機的時候給模組傳遞資訊,可以編輯它
alias 別名
options 傳遞參數 (一般不需要手寫)
modprobe -r //卸載某個模組 只需要指定模組名字
//不加r ,載入某個移除模組
modprobe -r floppy //移除磁碟片
ls /lib/modules/`uname -r` // modproce在這裡找模組
insmod 插入模組
insmod /PATH/TO/MODULE_FILE 它必須指定模組全路徑
lsmod 顯示所有模組
rmmod 移除模組,不需要指定路徑
depmod 用於自動產生所有模組的依賴關係檔案和映射關係檔案
modules.dep map.dep
總之,如果想要深入理解Linux,那麼理論基礎必不可少,這樣在動手做的時候才知道自己每一步在做什麼
#####給小Linux添加網路功能
1.尋找pcnet32裝置對應的.ko檔案
[root@server56 ~]# modinfo pcnet32
filename: /lib/modules/2.6.18-164.el5/kernel/drivers/net/pcnet32.ko
2.切換到小linux系統lib目錄
cd /mnt/sysroot/lib
3.建立模組存放目錄
mkdr modules
4. 將mii.ko pcnet32.ko拷貝到這個目錄,以我的路徑為例,
#pcnet32是vm虛擬機器的網卡驅動
cp /lib/modules/2.6.18-164.el5/kernel/drivers/net/pcnet32.ko ./modules
5. 修改rc.sysinit,增加
[ -e /lib/modules/mii.ko ] && /sbin/insmod /lib/modules/mii.ko #用於啟動時載入這個模組
[ -e /lib/modules/pcnet32.ko ] && /sbin/insmod /lib/modlues/pcnet32.ko
echo "Load the ethernet card drivers ok"
echo "Set the address fo lo..."
/sbin/ifconfig lo 127.0.0.1/8
echo "Set the adress for eth0"
/sbin/ifconfig eth0 192.168.0.145/24
好啦,這樣小Linxu就具有網路功能了,你可以切到小linux裡試試
#############實現關機
實現關機簡單,只需要兩步:
1.編輯 /mnt/sysroot/etc/inittab添加下面這一行
l0:0:wait:/etc/rc.d/rc.shutdown
2.建立指令碼檔案/mnt/sysroot/etc/rc.d/rc.shutdown添加下面的內容
sync
sleep1
umount /dev/sda1 #如果有mtab檔案可以直接用umount -a來關閉,/etc/mtab檔案時用於記錄當前系統所有可以掛載的裝置
umount /dev/sda2
swapoff -a
exec /sbin/halt -p
ln -s bash sh #給bash 增加一個sh連結,啟動的時候如果不指定/bin/bash,則去找sh另外,關機時退出bash,也需要去找shell
#########實現層級 1
1.在小linux裡/etc/inittab裡增加
l1:1:wait:/sbin/init -t1 S
2.在啟動時,grub介面裡e編輯核心引導增加1 來啟動層級1
#########實現登入介面
條件:
1. 啟動至少一個終端
2. 列印登入提示給使用者
3. /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow
4. Login-->名稱服務開端/etc/nsswitch-->庫檔案
5. 取消rc.sysinit裡的/bin/bash
6. 移植mingetty
這裡要解釋下linux裡帳號密碼對應關係
1.linux裡定義帳號密碼轉化的工具:
名稱服務開關(name service):定義終端靠誰來尋找對應使用者的帳號和密碼
名稱解析: 當系統需要轉換帳號和密碼資訊時所調用的庫檔案
2.name service相關檔案
/usr/lib/libnss開頭的檔案:這些檔案的作用就是name service的轉換
libness_db.so 去資料庫中找
dns 去DNS伺服器找
files 去/etc/passwd找
winbinds 去winbinds伺服器找
在拷貝庫檔案的時候,當拷貝連結時拷貝的是連結指向的檔案,但是檔案名稱是連結的命令,
所以,如果拷貝的連結對應的還是連結,那拷貝的就不是我們想要的檔案,而是連結
cp命令擴充:
如果/lib/libm.so.1-->/lib/libm.so.2.3.1
cp -d (如果是連結,保持串連,如果是檔案,複製檔案)
列印終端步驟:
0.移植mingetty
1. 複製libnss檔案到小linux裡
[root@server69 LX]# cp -d /usr/lib/libnss3.so /mnt/sysroot/usr/lib/
[root@server69 LX]# cp -d /usr/lib/libnssckbi.so /mnt/sysroot/usr/lib/
[root@server69 LX]# cp -d /usr/lib/libnssutil3.so /mnt/sysroot/usr/lib/
[root@server69 LX]# cp -d /usr/lib/libnss_files.so /mnt/sysroot/usr/lib/
[root@server69 LX]# cp -d /usr/lib/libnss_compat.so /mnt/sysroot/usr/lib/
[root@server69 LX]# cp -d /lib/libnss_files* /mnt/sysroot/lib/
[root@server69 LX]# cp -d /lib/libnss_compat* /mnt/sysroot/lib/
2. 修改inittab增加列印終端
[root@server69 sysroot]# vim etc/inittab
#tty
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3. 去除rc.sysinit中的/bin/bash這一行
4. 添加login
1):http://u.115.com/file/dnhd3x9p
2)給它執行許可權
3)拷貝它的庫檔案
[root@server69 bin]# ldd /bin/login
linux-gate.so.1 => (0x00858000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x06cca000)
libpam.so.0 => /lib/libpam.so.0 (0x00dc2000)
libpam_misc.so.0 => /lib/libpam_misc.so.0 (0x002a2000)
libaudit.so.0 => /lib/libaudit.so.0 (0x00da5000)
libc.so.6 => /lib/libc.so.6 (0x002a7000)
libdl.so.2 => /lib/libdl.so.2 (0x003ef000)
/lib/ld-linux.so.2 (0x00284000)
[root@server69 bin]# cp -d /lib/libcrypt.so.1 ../lib
[root@server69 bin]# cp -d /lib/libcrypt-2.5.so ../lib
[root@server69 bin]# cp /lib/libm.so.6 ../lib
5.拷貝passwd shadow gshadow group到小linxu /etc裡
[root@server69 etc]# head -1 /etc/passwd > passwd
[root@server69 etc]# head -1 /etc/shadow > shadow
[root@server69 etc]# head -1 /etc/group > group
[root@server69 etc]# head -1 /etc/gshadow > gshadow
6.拷貝nsswitch.conf到小linux的/etc裡
[root@server69 etc]# cp /etc/nsswitch.conf .
下篇預告:打造自己的linux(四):百變神器-----BusyBox!