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