基於BusyBox與紅帽2.6.38.5內核完成的微型系統製作流程

直入-------->>正題

編譯製作之前要準備好開發工具即 "Development Tools" "Development Libraries",前面都已做過介紹這裏就不多說了詳細瞭解請點擊這裏;這次實驗流程操作使用的是vm9虛擬機,所以大家在操作時速度建議不要過快,並且要多多sync(切記)

實驗中所有工具的下載地址

首先編譯紅帽2.6.38.5內核

  1. tar xf linux-2.6.38.5.tar.bz2 —C /usr/src/ 
  2. 創建一個鏈接 
  3. ln -sv linux-2.6.38.5/ linux 
  4. 配置內核提供./config文件(這裏提供了一個樣本,名稱是kernel-2.6.38.1-i686.cfg) 
  5. cd linux 
  6. 在直接將此樣本重命名爲./config 
  7. mv kernel-2.6.38.1-i686.cfg ./config 
  8. make menuconfig(根據自己的需要對驅動,文件系統及網絡做選擇性的配置,其中我在配置的時候直接把ext3做成了內核模塊) 
  9. 開始編譯 
  10. make SUBDIR=arch/    
  11. 當編譯完成後,提供微型系統新內核 (編譯需要一段時間,這裏的順序只是爲了方便閱讀,自己操作時,可先做下面的步驟,等到編譯完成後再進行復制內核) 

提供內核

  1. cp /usr/src/linux/arch/x86/boot/bzImage /mnt/boot/vmlinz 

準備grub

  1. 安裝grub: 
  2. grub-install --root-directory=/mnt/ /dev/hda 
  3. 配置grub.conf 
  4. vim /mnt/boot/grub/grub.conf 
  5. default=0 
  6. timeout=5 
  7. title My Linux (2.6.18) 
  8.   root(hd0,0) 
  9.   kernel /vmlinuz ro root=/dev/hda2 
  10.   initrd /initrd.gz 

提供initrd即編譯使用Busybox

  1. 編譯前準備操作 
  2. tar xf busybox-1.20.2.tar.bz2 -C /root/ 
  3. mkdir busybox-1.20.2/include/mtd 
  4. cp /usr/src/linux/include/mtd/ubi-user.h busybox-1.20.2/include/mtd(複製2.6.38內核的頭文件) 
  5. 編譯busybox 
  6. cd  busybox-1.20.2 
  7. make menuconfig (這其中不需要更改太多,把編譯選項改一下即可,編譯成一個二進制文件方便 移植) 
  8. make install 
  9. cd _install/ (編譯完成後進入這個目錄) 
  10. rm -rf linuxrc  (刪除自動爲我們創建的鏈接文件) 
  11. mkdir /tmp/initrd (自行創建一個目錄,把_install文件複製到這裏,一切配置在這裏更改) 
  12. cp busybox-1.20.2/_install/* /tmp/initrd 
  13. cd /tmp/initrd 
  14. mkdir proc sys mnt/sysroot dev tmp lib/modules etc -pv (創建基本目錄) 
  15. mknod dev/console c 5 1                              (創建設備文件) 
  16. mknod dev/null c 1 3 
  17. 創建init腳本 
  18. 完成的任務: 
  19. 1、掛載proc文件系統,proc文件系統是用來輸出內核映像的 
  20. 2、掛載sys文件系統(輸出硬件信息) 
  21. 3、導入內核模塊,導入ext3內核模塊,否則無法訪問真正的文件系統(這裏的/dev/hda2格式化爲了ext3,如果是格式化成ext2就不要安裝這個模塊) 
  22. 腳本內容如下: 
  23. #!/bin/sh 
  24. echo "mounting proc and sys....." 
  25. mount -t proc proc /proc 
  26. mount -t sysfs sysfs /sys 
  27.  
  28. echo "Detect and export hardware infomation...." 動態創建設備文件的方式 
  29. mdev -s                                       
  30.  
  31. echo "Mount real rootfs to /mnt/sysroot....." 
  32. mount -t ext3 /dev/hda2 /mnt/sysroot         掛載真正的文件系統 
  33.  
  34. echo "Switch to real rootfs....." 
  35. exec switch_root /mnt/sysroot /sbin/init  切換到/mnt/sysroot這個根上,然後執行/mnt/sysroot這個目錄下的/sbin/init命令 
  36. chmod +x init 
  37. 歸檔壓縮生成initrd文件 
  38. find . | cpio -H newc --quiet -o | gzip -9 > /mnt/boot/initrd.gz 

記得要sync哦!

/mnt/sysroot目錄下的文件準備(即根文件的準備)

  1. 複製busybox-1.20.2_install目錄下的所有文件,把這些文件當做真正的根 
  2. cd /root/busybox-1.20.2/_install 
  3. cp busybox-1.20.2/_install/* /mnt/sysroot/ -a 
  4. cd /mnt/sysroot/ 
  5. rm -rf linuxrc 
  6. 創建所需的目錄(在/mnt/sysboot目錄下) 
  7. mkdir boot root etc/rc.d/init.d var/{log,lock,run} proc sys dev lib/modules tmp home mnt media usr/lib -pv 
  8. 創建設備文件 
  9. mknod dev/console c 5 1 
  10. mknod dev/null c 1 3 
  11. 編輯inittab配置文件 
  12. vim /mnt/sysroot/etc/inittab   內容如下: 
  13. ::sysinit:/etc/rc.d/rc.sysinit 
  14. console::respawn:-/bin/sh 
  15. ::ctrlaltdel:/sbin/reboot 
  16. ::shutdown:/bin/umount -a -r 
  17. 編輯rc.sysinit文件 
  18. vim /mnt/sysroot/etc/rc.d/rc.sysinit   內容如下: 
  19. #!/bin/sh 
  20. echo -e "\tWelcome to \033[34mMy\033[0mLinux 
  21.  
  22. echo -e "Remounting the root filesystem ..." 
  23. mount -t proc proc /proc 
  24. mount -t sysfs sysfs /sys 
  25. mount -o  remount,rw  / 
  26.  
  27. echo -e "Remounting the root filesystem......" 
  28. mount -t ext3 -o remount,rw /dev/hda2 / 
  29.  
  30. echo -e "Detect and export hardward infomation......." 
  31. mdev -s 
  32.  
  33. echo -e "Mounting the filesystem....." 
  34. mount -a 
  35. chmod +x /mnt/sysroot/etc/rc.d/rc.sysinit   添加執行權限 
  36.  
  37. 編輯配置/mnt/sysroot/etc/fstab 
  38. vim /mnt/sysroot/etc/fstab      添加內容如下: 
  39. /dev/hda2      /       ext3    defaults    1 1 
  40. /dev/hda1     /boot    ext3    defaults    0 0 
  41. proc          /proc    proc    defaults    0 0 
  42. sysfs         /sys     sysfs   defaults    0 0 

到這裏微linux系統就做好了,它完全的可以跑起來,就是功能有些欠缺

擴展微型linux功能

添加bash

  1. 使用bash;這裏首先需要複製一下bash命令即可,複製相關命令的腳本內容如下: 
  2. #!/bin/bash 
  3. dest=/mnt/sysroot 
  4. libcp() { 
  5. libpath=${1%/*} 
  6. [ ! -d $dest$libpath ] && mkdir -p $dest$libpath 
  7. [ ! -e $dest${1} ] && cp $1 $dest$libpath && echo " copy lib $1 finished" 
  8. bincp() { 
  9. cmdpath=${1%/*} 
  10. [ ! -d $dest$cmdpath ] && mkdir -p $dest$cmdpath 
  11. [ ! -e $dest${1} ] && cp $1 $dest$cmdpath 
  12. for lib in `ldd $1 | grep -o "/.*lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`; do 
  13. libcp $lib 
  14. done 
  15. read -p " your command:" cmd 
  16. until [ $cmd = 'q' ]; do 
  17. ! which $cmd && echo "wrong command" && read -p "input again:" cmd && continue 
  18. command=`which $cmd | grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"
  19. bincp $command 
  20. echo "copy $command finished." 
  21. read -p "continue:" cmd 
  22. done 

更改inittab配置文件

  1. vim /mnt/sysroot/etc/inittab 
  2. 把代碼console::respawn:-/bin/sh 修改爲console::respawn:-/bin/bash即可 
  3. 到這裏bash就能夠啓動成功了 

到這裏bash就能夠啓動成功了

實現用戶登陸功能流程介紹

  1. 首先要提供終端即編輯inittab文件內容,直接修改成以下即可 
  2. ::sysinit:/etc/init.d/rc.sysinit 
  3. ::respawn:/sbin/getty 9600 tty1 
  4. ::respawn:/sbin/getty 9600 tty2 
  5. ::respawn:/sbin/getty 9600 tty3 
  6. ::respawn:/sbin/getty 9600 tty4 
  7. ::respawn:/sbin/getty 9600 tty5 
  8. ::respawn:/sbin/getty 9600 tty6 
  9. ::ctrlaltdel:/sbin/reboot 
  10. ::shutdown:/bin/umount -a -r 
  11. 建立賬號(在這裏直接複製本機的root賬號的相關信息) 
  12. grep -E "^root\> /etc/passwd > /mnt/sysroot/etc/passwd 
  13. grep -E "^root\> /etc/shadow > /mnt/sysroot/etc/shadow 
  14. grep -E "^root\> /etc/group> /mnt/sysroot/etc/group 

到這裏我們就可以使用用戶來登陸了

添加一個主機名

  1. vim /mnt/sysroot/etc/hostname  自行創建一個hostname文件,添加一行代碼即可;如下: 
  2. HOSTNAME=MyBusyboxlinux 
  3. 加載HOSTNAME這變量需要編輯rc.sysinit腳本文件 
  4. vim /mnt/sysroot/etc/rc.d/rc.sysinit   添加一下代碼即可: 
  5. echo "Set the hostname"(添加主機名) 
  6. [ -f /etc/hostname ] && . /etc/hostname 
  7. [ -z "$HOSTNAME" -o "$HOSTNAME" = '(none)' ] && HOSTNAME=localhost 
  8. hostname $HOSTNAME 

提供用戶登陸界面的顯示信息

  1. vim mnt/sysroot/etc/issue  代碼如下: 
  2. My Linux 
  3. Kernel \r on an \m 

爲微型系統提供IP地址

  1. 首先複製網卡模塊 
  2. cp /usr/src/linux/drivers/net/pcnet32.ko /mnt/sysroot/lib/modules/ 
  3. 然後設置開機裝載網卡驅動 
  4. vim /mnt/sysroot/etc/rc.d/rc.sysinit 編輯這個配置文件添加以下代碼 
  5. echo "load ethernet card modules.." 
  6. insmod /lib/modules/pcnet32.ko 

這時候微型linux的IP地址就可以成功添加了

添加ssh功能

  1. 首先準備drophear(這裏準備的是最新版本dropbear-2013.56.tar.bz2) 
  2. 解壓後進入目錄進行編譯 
  3. tar xf dropbear-2013.56.tar.bz2 
  4. cd dropbear-2013.56 
  5. 開始編譯 
  6. ./configure  
  7. make 
  8. make install 
  9. 編譯完成後複製dropbear、dropbearkey、dbclient 
  10. 我們這裏可以直接使用上述腳本進行復制,移植 
  11. 指定允許的shell 
  12. vim /mnt/sysroot/etc/shells  內容如下: 
  13. /bin/sh 
  14. /bin/bash 
  15. /bin/ash 
  16. /bin/hush 
  17. 編輯/mnt/sysroot/etc/fstab配置文件添加僞文件系統 代碼如下: 
  18. devpts     /dev/pts       devpts    mode=620    defaults   0 0 
  19. 創建目錄 
  20. mkdir /mnt/sysroot/dev/pts 
  21. 生成主機密鑰 
  22. 首先創建主機密鑰默認目錄 
  23. mkdir /mnt/sysroot/etc/dropbear 
  24. 爲dropbear生成密鑰 
  25. dropbearkey -t rsa -f /mnt/sysroot/etc/dropbear/dropbear_rsa_host_key -s 2048 
  26. dropbearkey -t dss -f /mnt/sysroot/etc/dropbear/dropbear_dss_host_key  
  27. 複製libnss(usr/lib目錄我們已經創建)複製命令如下: 
  28. cp -d /lib/libness_files* /mnt/sysroot/lib/ 
  29. cp -d /usr/lib/libness3.so /usr/lib/libness_files.so /mnt/sysroot/usr/lib/ 
  30. 驗證:(查看是否複製成功) 
  31. ls -l /mnt/sysroot/lib/ 
  32. ls -l /mnt/sysroot/usr/lib/ 
  33. 準備nsswitch.conf配置文件 
  34. cp /etc/nsswitch.conf /mnt/sysroot/etc/ 
  35. vim /mnt/sysroot/etc/nsswitch.conf  添加一下四行代碼即可: 
  36. passwd:   files 
  37. shadow:    files 
  38. group:     files 
  39. hosts:     files dns 

此時的微型系統已經具有IP地址、有虛擬終端、有主機名並且能夠實現ssh遠程登錄,整體的功能雖不是很強大,但是這個過程卻能讓我們更深刻的瞭解linux

這個流程的操作看起來是不是很簡單,不妨親手實驗一下,製作一個屬於自己的linux

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章