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

本文档详细介绍了如何使用busybox构建一个极简的Linux系统,包括挂载设备、编译busybox、制作initrd文件、安装grub、创建必要的文件系统、配置inittab和fstab,以及逐步扩展支持bash、root账号、主机名、网卡驱动和日志功能。通过这些步骤,你可以构建一个基本的自启动Linux环境。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值