编译制作之前要准备好开发工具即 “Development Tools” “Development Libraries”,前面都已做过介绍这里就不多说了详细了解请点击这里 http://www.linuxidc.com/Linux/2013-05/84480.htm;这次实验流程操作使用的是vm9虚拟机,所以大家在操作时速度建议不要过快,并且要多多sync(切记)
实验中所有工具的下载地址 http://pan.baidu.com/share/link?shareid=569752&uk=487907638
busybox-1.20.2.tar 下载地址见 http://www.linuxidc.com/Linux/2011-08/40704.htm
首先编译红帽Linux2.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。