使用busybox创建极简linux及相关扩展

busybox

一个二进制程序,模拟实现众多程序。

/bin/busybox


查看本机硬件设备信息:

#cat /proc/cpuinfo

#cat /proc/meminfo

#lsusb 显示usb接口信息。

#lspci 显示pci总线上的所有设备。

#hal-device 显示所有硬件的详细信息。

hardware abstract layer 硬件抽象层。



编译busybox:

#tar xf busybox.tar.bz2 

#cd busybox

#make menuconfig

Busybox Settings

Build Options

Build BusyBox as a static binary(no share libs)(NEW)

Installation Options("make install"behavior)

可以指定.install文件生成的地址。


#make install

若make install报错,则此内核版本缺少部分头文件,需要下载更新的内核。

#tar xf linux-xxx.tar.bz2 -C /usr/src

#cp -r /linux-xxx/include/mtd/ubi-user.h /root/busybox/include/mtd/


或只编译内核核心。

#make SUBDIR=arch/ 



使用busybox创建极小linux。

0.挂载相关设备:

#mount /dev/sdb1 /mnt/boot

#mount /dev/sdb2 /mnt/sysroot


1.编译busybox

#tar xf busybox.tar.bz2 

#cd busybox

#make menuconfig

Busybox Settings

Build Options

Build BusyBox as a static binary(no share libs)(NEW)

Installation Options("make install"behavior)

可以指定.install文件生成的地址。

#make install


3.制作initrd文件:

1.复制busybox目录下的_install内的全部内容:

#cp -a _install /tmp/busybox

#ls /tmp/busybox

bin linuxrc sbin usr

#rm linuxrc

2.创建相应目录:

#mkdir -p etc dev lib proc mnt/sysroot tmp


3.复制ext3需要的相关库。

#cp /lib/modules/KERNELVERSION/kernel/fs/jbd/jbd.ko /tmp/busybox/lib/modules/

#cp /lib/modules/KERNELVERSION/kernel/fs/ext3/ext3.ko /tmp/busybox/lib/modules/


4.创建init文件。

#vim /tmp/busybox/etc/rc.d/init

#!/bin/sh

mount -t proc proc /proc

mount -t sysfs sysfs /sys


insmod /lib/modules/jbd.ko

insmod /lib/modules/ext3.ko


mdev -s

mount -t ext3 /dev/sda2 /mnt/sysroot

exec switch_root /mnt/sysroot /sbin/init


#chmod +x init


5.创建2个必要的设备文件。

#mknod /tmp/busybox/dev/console c 5 1

#mknod /tmp/busybox/dev/null c 1 3


6.创建initrd文件:

#cd /tmp/busybox

#find . | cpio -H newc -o --quiet |gzip -9>  /mnt/boot/

initrd.gz


4.从当前系统复制vmlinux文件:

#cp /boot/vmlinux-xxx.el5 /mnt/boot/vmlinux


5.安装grub:

#grub-install --root-directory=/mnt/boot /dev/sdb


6.创建grub.conf文件:

#vim /mnt/boot/grub/grub.conf

default=0

timeout=3

title=my linux

root(hd0,0)

kernel /vmlinux ro root=/dev/hda2 quiet

initrd /initrd.gz


7.创建相关的文件系统:

#cd busybox

#cp _inistall /mnt/sysroot

#cd /mnt/sysroot

#rm linuxrc

#mkdir -pv lib/modules proc sys dev etc/rc.d/init.d root mnt media 

#mkdir -pv root tmp home var/{log,run,lock/subsys,tmp} usr/{bin,sbin,local} opt boot


8.创建inittab文件:

#cd /mnt/sysroot/etc

#vim inittab

::sysinit:/etc/rc.d/rc.sysinit

console::reapawn:-/bin/sh

::ctrlaltdel:/sbin/reboot

::shutdonw:/bin/umount -a -r


9.创建fstab文件

#vim fstab

sysfs /sys sysfs defaults 0 0

proc /porc proc defaults 0 0

/dev/hda1 /boot ext3 defaults 0 0

/dev/hda2 / ext3 defaaults 1 1


10.创建必要的设备文件:

#mknod /mnt/sysroot/dev/console c 5 1

#mknod /mnt/sysroot/dev/null c 1 3


11.创建rc.sysinit文件:

#vim /mnt/sysroot/etc/rc.d/rc.sysinit

#!/bin/sh

echo -e "\tWelcom to \e33[34mMY LINUX\033[0m"


echo -e "Remounting root ......[ \033[32mOK\033[0m ]"

mount -t proc proc /proc

mount -t sysfs sysfs /sys

mount -o remount,rw /


echo -e "Creating files of device ......[ \033[32mOK\033[0m ]"

mdev -s


echo -e "Mounting the filesystem ......[ \033[32mOK\033[0m ]"

mount -a

swapon -a


#chmod +x /mnt/sysroot/etc/rc.d/rc.sysinit



扩展1:支持bash shell

#bash copylib.sh

bash


#vim /mnt/sysroot/etc/inittab

::sysinit:/etc/rc.d/rc.sysinit

console::reapawn:-/bin/bash 这里将/bin/sh改为/bin/bash

::ctrlaltdel:/sbin/reboot

::shutdonw:/bin/umount -a -r


#sync


扩展2:增加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/gorup


#vim /mnt/sysroot/passwd

root:x:0:0:root:/bin/bash 这里一定要指定为/bin/bash


#vim /mnt/sysroot/etc/inittab

::sysinit:/etc/rc.d/rc.sysinit

#console::reapawn:-/bin/bash


::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

::shutdonw:/bin/umount -a -r


#sync


扩展3:增加主机名:

#vim /mnt/sysroot/etc/hostname

HOSTANME=test.com

#vim /mnt/sysroot/etc/rc.d/rc.sysinit

#!/bin/sh

echo "setting hostname"

[-f /etc/hostname] && . /etc/hostname

[-z "$HOSTNAME" -o "$HOSTNAME" == '(none)'] && HOSTNAME=localhost

hostname $HOSTNAME



echo -e "\tWelcom to \e33[34mMY LINUX\033[0m"


echo -e "Remounting root ......[ \033[32mOK\033[0m ]"

mount -t proc proc /proc

mount -t sysfs sysfs /sys

mount -o remount,rw /


echo -e "Creating files of device ......[ \033[32mOK\033[0m ]"

mdev -s


echo -e "Mounting the filesystem ......[ \033[32mOK\033[0m ]"

mount -a

swapon -a


扩展4:增加网卡驱动并配置ip地址:

#copy /lib/modules/KERNELVERSION/kernel/drivers/net/mii.ko /mnt/sysroot/lib/modules


#copy /lib/modules/KERNELVERSION/kernel/drivers/net/penet32.ko /mnt/sysroot/lib/modules


#vim /mnt/sysroot/etc/rc.d/rc.sysinit

#!/bin/sh

echo "setting hostname"

[-f /etc/hostname] && . /etc/hostname

[-z "$HOSTNAME" -o "$HOSTNAME" == '(none)'] && HOSTNAME=localhost

hostname $HOSTNAME



echo -e "\tWelcom to \e33[34mMY LINUX\033[0m"


echo -e "Remounting root ......[ \033[32mOK\033[0m ]"

mount -t proc proc /proc

mount -t sysfs sysfs /sys

mount -o remount,rw /


echo -e "Creating files of device ......[ \033[32mOK\033[0m ]"

mdev -s


echo -e "Mounting the filesystem ......[ \033[32mOK\033[0m ]"

mount -a

swapon -a


echo "load ethernet ard module"

insmod /lib/modules/mii.ko

insmod /lib/modules/pcnet32.ko

ifconfig eth0 192.168.1.32/24

if lo 127.0.0.1/8


扩展5:增加日志功能

#vim /mnt/sysroot/etc/rc.d/rc.sysinit

#!/bin/sh

echo "setting hostname"

[-f /etc/hostname] && . /etc/hostname

[-z "$HOSTNAME" -o "$HOSTNAME" == '(none)'] && HOSTNAME=localhost

hostname $HOSTNAME



echo -e "\tWelcom to \e33[34mMY LINUX\033[0m"


echo -e "Remounting root ......[ \033[32mOK\033[0m ]"

mount -t proc proc /proc

mount -t sysfs sysfs /sys

mount -o remount,rw /


echo -e "Creating files of device ......[ \033[32mOK\033[0m ]"

mdev -s


echo -e "Mounting the filesystem ......[ \033[32mOK\033[0m ]"

mount -a

swapon -a


echo "Starting syslog  ......"

syslogd

klogd


echo "load ethernet ard module"

insmod /lib/modules/mii.ko

insmod /lib/modules/pcnet32.ko

ifconfig eth0 192.168.1.32/24

if lo 127.0.0.1/8


#vim /mnt/sysroot/etc/syslog.conf

*.info /var/log/message

auth.* /var/log/secure

#touch /var/log/secure

#chmod 600 /var/log/secure





#make arch/ 部分编译,只编译对应架构的内核核心。

生成的内核:arch/ARCH/boot/bzImage

然后将bzImage复制出来重命名为vmlinuz即可。


硬件驱动:

intird:

仅需要提供内核访问真正根文件系统所在设备所需要的驱动。存储设备和文件系统相关的模块。

rc.sysinit:

初始化其他硬件的驱动程序。


busybox:

不支持LEVEL。

/etc/inittab 格式和系统自带的文件也不相同。



内核:

make SUBDIR=arch/

make arc/x86


你可能感兴趣的:(linux,kernel,busybox)