歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Red hat Linux >> 基於BusyBox與紅帽2.6.38.5內核制作微型系統

基於BusyBox與紅帽2.6.38.5內核制作微型系統

日期:2017/3/3 16:36:23   编辑:Red hat Linux

編譯制作之前要准備好開發工具即 "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/

當編譯完成後,提供微型系統新內核 (編譯需要一段時間,這裡的順序只是為了方便閱讀,自己操作時,可先做下面的步驟,等到編譯完成後再進行復制內核)

提供內核

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

准備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

本文出自 “Fly*On*Sky” 博客,請務必保留此出處http://djy0000.blog.51cto.com/5816828/1168031

Copyright © Linux教程網 All Rights Reserved