直入-------->>正題
編譯製作之前要準備好開發工具即 "Development Tools" "Development Libraries",前面都已做過介紹這裏就不多說了詳細瞭解請點擊這裏;這次實驗流程操作使用的是vm9虛擬機,所以大家在操作時速度建議不要過快,並且要多多sync(切記)
首先編譯紅帽2.6.38.5內核
- tar xf linux-2.6.38.5.tar.bz2 —C /usr/src/
- 創建一個鏈接
- ln -sv linux-2.6.38.5/ linux
- 配置內核提供./config文件(這裏提供了一個樣本,名稱是kernel-2.6.38.1-i686.cfg)
- cd linux
- 在直接將此樣本重命名爲./config
- mv kernel-2.6.38.1-i686.cfg ./config
- make menuconfig(根據自己的需要對驅動,文件系統及網絡做選擇性的配置,其中我在配置的時候直接把ext3做成了內核模塊)
- 開始編譯
- make SUBDIR=arch/
- 當編譯完成後,提供微型系統新內核 (編譯需要一段時間,這裏的順序只是爲了方便閱讀,自己操作時,可先做下面的步驟,等到編譯完成後再進行復制內核)
提供內核
準備grub
- 安裝grub:
- grub-install --root-directory=/mnt/ /dev/hda
- 配置grub.conf
- vim /mnt/boot/grub/grub.conf
- default=0
- timeout=5
- title My Linux (2.6.18)
- root(hd0,0)
- kernel /vmlinuz ro root=/dev/hda2
- initrd /initrd.gz
提供initrd即編譯使用Busybox
- 編譯前準備操作
- tar xf busybox-1.20.2.tar.bz2 -C /root/
- mkdir busybox-1.20.2/include/mtd
- cp /usr/src/linux/include/mtd/ubi-user.h busybox-1.20.2/include/mtd(複製2.6.38內核的頭文件)
- 編譯busybox
- cd busybox-1.20.2
- make menuconfig (這其中不需要更改太多,把編譯選項改一下即可,編譯成一個二進制文件方便 移植)
- make install
- cd _install/ (編譯完成後進入這個目錄)
- rm -rf linuxrc (刪除自動爲我們創建的鏈接文件)
- mkdir /tmp/initrd (自行創建一個目錄,把_install文件複製到這裏,一切配置在這裏更改)
- cp busybox-1.20.2/_install/* /tmp/initrd
- cd /tmp/initrd
- mkdir proc sys mnt/sysroot dev tmp lib/modules etc -pv (創建基本目錄)
- mknod dev/console c 5 1 (創建設備文件)
- mknod dev/null c 1 3
- 創建init腳本
- 完成的任務:
- 1、掛載proc文件系統,proc文件系統是用來輸出內核映像的
- 2、掛載sys文件系統(輸出硬件信息)
- 3、導入內核模塊,導入ext3內核模塊,否則無法訪問真正的文件系統(這裏的/dev/hda2格式化爲了ext3,如果是格式化成ext2就不要安裝這個模塊)
- 腳本內容如下:
- #!/bin/sh
- #
- echo "mounting proc and sys....."
- mount -t proc proc /proc
- mount -t sysfs sysfs /sys
- echo "Detect and export hardware infomation...." 動態創建設備文件的方式
- mdev -s
- echo "Mount real rootfs to /mnt/sysroot....."
- mount -t ext3 /dev/hda2 /mnt/sysroot 掛載真正的文件系統
- echo "Switch to real rootfs....."
- exec switch_root /mnt/sysroot /sbin/init 切換到/mnt/sysroot這個根上,然後執行/mnt/sysroot這個目錄下的/sbin/init命令
- chmod +x init
- 歸檔壓縮生成initrd文件
- find . | cpio -H newc --quiet -o | gzip -9 > /mnt/boot/initrd.gz
記得要sync哦!
/mnt/sysroot目錄下的文件準備(即根文件的準備)
- 複製busybox-1.20.2_install目錄下的所有文件,把這些文件當做真正的根
- cd /root/busybox-1.20.2/_install
- cp busybox-1.20.2/_install/* /mnt/sysroot/ -a
- cd /mnt/sysroot/
- rm -rf linuxrc
- 創建所需的目錄(在/mnt/sysboot目錄下)
- mkdir boot root etc/rc.d/init.d var/{log,lock,run} proc sys dev lib/modules tmp home mnt media usr/lib -pv
- 創建設備文件
- mknod dev/console c 5 1
- mknod dev/null c 1 3
- 編輯inittab配置文件
- vim /mnt/sysroot/etc/inittab 內容如下:
- ::sysinit:/etc/rc.d/rc.sysinit
- console::respawn:-/bin/sh
- ::ctrlaltdel:/sbin/reboot
- ::shutdown:/bin/umount -a -r
- 編輯rc.sysinit文件
- vim /mnt/sysroot/etc/rc.d/rc.sysinit 內容如下:
- #!/bin/sh
- echo -e "\tWelcome to \033[34mMy\033[0mLinux
- echo -e "Remounting the root filesystem ..."
- mount -t proc proc /proc
- mount -t sysfs sysfs /sys
- mount -o remount,rw /
- echo -e "Remounting the root filesystem......"
- mount -t ext3 -o remount,rw /dev/hda2 /
- echo -e "Detect and export hardward infomation......."
- mdev -s
- echo -e "Mounting the filesystem....."
- mount -a
- chmod +x /mnt/sysroot/etc/rc.d/rc.sysinit 添加執行權限
- 編輯配置/mnt/sysroot/etc/fstab
- vim /mnt/sysroot/etc/fstab 添加內容如下:
- /dev/hda2 / ext3 defaults 1 1
- /dev/hda1 /boot ext3 defaults 0 0
- proc /proc proc defaults 0 0
- sysfs /sys sysfs defaults 0 0
到這裏微linux系統就做好了,它完全的可以跑起來,就是功能有些欠缺
擴展微型linux功能
添加bash
- 使用bash;這裏首先需要複製一下bash命令即可,複製相關命令的腳本內容如下:
- #!/bin/bash
- #
- dest=/mnt/sysroot
- libcp() {
- libpath=${1%/*}
- [ ! -d $dest$libpath ] && mkdir -p $dest$libpath
- [ ! -e $dest${1} ] && cp $1 $dest$libpath && echo " copy lib $1 finished"
- }
- bincp() {
- cmdpath=${1%/*}
- [ ! -d $dest$cmdpath ] && mkdir -p $dest$cmdpath
- [ ! -e $dest${1} ] && cp $1 $dest$cmdpath
- for lib in `ldd $1 | grep -o "/.*lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`; do
- libcp $lib
- done
- }
- read -p " your command:" cmd
- until [ $cmd = 'q' ]; do
- ! which $cmd && echo "wrong command" && read -p "input again:" cmd && continue
- command=`which $cmd | grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"`
- bincp $command
- echo "copy $command finished."
- read -p "continue:" cmd
- done
更改inittab配置文件
- vim /mnt/sysroot/etc/inittab
- 把代碼console::respawn:-/bin/sh 修改爲console::respawn:-/bin/bash即可
- 到這裏bash就能夠啓動成功了
到這裏bash就能夠啓動成功了
實現用戶登陸功能流程介紹
- 首先要提供終端即編輯inittab文件內容,直接修改成以下即可
- ::sysinit:/etc/init.d/rc.sysinit
- ::respawn:/sbin/getty 9600 tty1
- ::respawn:/sbin/getty 9600 tty2
- ::respawn:/sbin/getty 9600 tty3
- ::respawn:/sbin/getty 9600 tty4
- ::respawn:/sbin/getty 9600 tty5
- ::respawn:/sbin/getty 9600 tty6
- ::ctrlaltdel:/sbin/reboot
- ::shutdown:/bin/umount -a -r
- 建立賬號(在這裏直接複製本機的root賬號的相關信息)
- grep -E "^root\> /etc/passwd > /mnt/sysroot/etc/passwd
- grep -E "^root\> /etc/shadow > /mnt/sysroot/etc/shadow
- grep -E "^root\> /etc/group> /mnt/sysroot/etc/group
到這裏我們就可以使用用戶來登陸了
添加一個主機名
- vim /mnt/sysroot/etc/hostname 自行創建一個hostname文件,添加一行代碼即可;如下:
- HOSTNAME=MyBusyboxlinux
- 加載HOSTNAME這變量需要編輯rc.sysinit腳本文件
- vim /mnt/sysroot/etc/rc.d/rc.sysinit 添加一下代碼即可:
- echo "Set the hostname"(添加主機名)
- [ -f /etc/hostname ] && . /etc/hostname
- [ -z "$HOSTNAME" -o "$HOSTNAME" = '(none)' ] && HOSTNAME=localhost
- hostname $HOSTNAME
提供用戶登陸界面的顯示信息
- vim mnt/sysroot/etc/issue 代碼如下:
- My Linux
- Kernel \r on an \m
爲微型系統提供IP地址
- 首先複製網卡模塊
- cp /usr/src/linux/drivers/net/pcnet32.ko /mnt/sysroot/lib/modules/
- 然後設置開機裝載網卡驅動
- vim /mnt/sysroot/etc/rc.d/rc.sysinit 編輯這個配置文件添加以下代碼
- echo "load ethernet card modules.."
- insmod /lib/modules/pcnet32.ko
這時候微型linux的IP地址就可以成功添加了
添加ssh功能
- 首先準備drophear(這裏準備的是最新版本dropbear-2013.56.tar.bz2)
- 解壓後進入目錄進行編譯
- tar xf dropbear-2013.56.tar.bz2
- cd dropbear-2013.56
- 開始編譯
- ./configure
- make
- make install
- 編譯完成後複製dropbear、dropbearkey、dbclient
- 我們這裏可以直接使用上述腳本進行復制,移植
- 指定允許的shell
- vim /mnt/sysroot/etc/shells 內容如下:
- /bin/sh
- /bin/bash
- /bin/ash
- /bin/hush
- 編輯/mnt/sysroot/etc/fstab配置文件添加僞文件系統 代碼如下:
- devpts /dev/pts devpts mode=620 defaults 0 0
- 創建目錄
- mkdir /mnt/sysroot/dev/pts
- 生成主機密鑰
- 首先創建主機密鑰默認目錄
- mkdir /mnt/sysroot/etc/dropbear
- 爲dropbear生成密鑰
- dropbearkey -t rsa -f /mnt/sysroot/etc/dropbear/dropbear_rsa_host_key -s 2048
- dropbearkey -t dss -f /mnt/sysroot/etc/dropbear/dropbear_dss_host_key
- 複製libnss(usr/lib目錄我們已經創建)複製命令如下:
- cp -d /lib/libness_files* /mnt/sysroot/lib/
- cp -d /usr/lib/libness3.so /usr/lib/libness_files.so /mnt/sysroot/usr/lib/
- 驗證:(查看是否複製成功)
- ls -l /mnt/sysroot/lib/
- ls -l /mnt/sysroot/usr/lib/
- 準備nsswitch.conf配置文件
- cp /etc/nsswitch.conf /mnt/sysroot/etc/
- vim /mnt/sysroot/etc/nsswitch.conf 添加一下四行代碼即可:
- passwd: files
- shadow: files
- group: files
- hosts: files dns
此時的微型系統已經具有IP地址、有虛擬終端、有主機名並且能夠實現ssh遠程登錄,整體的功能雖不是很強大,但是這個過程卻能讓我們更深刻的瞭解linux
這個流程的操作看起來是不是很簡單,不妨親手實驗一下,製作一個屬於自己的linux