使用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/


使用busybox创建系统内核。

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.创建initrd文件:

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

#!/bin/bash

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


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







本文出自 “小私的blog” 博客,请务必保留此出处http://ggvylf.blog.51cto.com/784661/1615046

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。