Linux01-Linux自定义内核及busybox完成系统定制52

一、Busybox

    1、介绍:BusyBox 是一个集成了一百多个最常用linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例如grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士***。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了Android 系统的自带的shell。

    2、官网:http://www.busybox.net/

        它是一个二进制程序

二、查看硬件信息

    1、cat /proc/cpuinfo 查看cpu信息

    2、lsusb 列出本机USB信息

    3、lspci 列出pci总线的所有设备

    4、hal-device 硬件抽象层(Hardware Abstract Layer)

三、如何实现编译部分内核

    1、只编译某子目录下的相关代码:make dir/subdir (目录和子目录)

        make arch/ (不包括模块的内核核心)

    2、只编译部分模块:make M=drivers/net/

        make drivers/net/ (只编译和网络相关的信息)

    3、只编译某一模块:make drivers/net/pcnet32.ko

    4、将编译完成的结果放置于别的目录中:

        make O=/tmp/kernel 

    5、交叉编译:make ARCH=

四、如何编译安装Kernel+busybox系统

    1、首先安装图形开发库Development Libraries和Development Tools

        # yum groupinstall "Development Tools" "Development Libraries" 

    2、准备IDE硬盘的2个磁盘

        /dev/hda1:格式化为ext3-->挂载到/mnt/boot

        /dev/hda2:格式化为ext3-->挂载到/mnt/sysroot/

    3、下载busybox源码包busybox-1.20.2.tar.bz2

    4、解压缩tar xf busybox-1.20.2.tar.bz2

    5、编译busybox:

        cd busybox-1.20.2

        make menuconfig

        选择Busybox Settings-->Build Options-->Build BusyBox as a static binary (no shared libs)选中为*

        Busybox Settings-->Installation Options (”make install“ behavior)-->查看到安装busybox的位置

        保存退出;

    6、编译安装busybox

        cd busybox-1.20.2

        make install(编译过程可能会报错,因为最新的busybox需要最新内核的头文件,此时下载新内核linux-2.6.38.5.tar.bz2)

    7、下载的内核版本,解压缩

        tar xf linux-2.6.38.5.tar.bz2 -C /usr/src

    8、切换到新内核的头文件目录

        cd /usr/src/linux-2.6.38.5/include/mtd

    9、复制新内核的头文件ubi-user.h到/root/busybox-1.20.2/include/mtd目录下:

        mkdir /root/busybox-1.20.2/include/mtd

        cp /usr/src/linux-2.6.38.5/include/mtd/ubi-user.h /root/busybox-1.20.2/include/mtd

    10、重新编译安装busybox

        cd /root/busybox-1.20.2

        make install(编译完成后,会在/root/busybox-1.20.2下生成_install文件,即是busybox的安装位置)

    11、复制编译安装busybox配置文件_install,做为文件系统的一部分:

        cp _install /tmp/busybox -a

        cd /tmp/busybox

        删除链接文件:rm linuxrc

    12、创建必要的文件系统目录:

        mkdir proc etc dev lib/modules mnt/sysroot sys -pv 

    13、复制Busybox的ext3文件系统所需要的模块:

        modinfo ext3(查看ext3依赖文件路径)

        modinfo jbd(查看ext3依赖文件路径)

        cp /lib/modules/`uname -r`/kernel/fs/jbd/jbd.ko /tmp/busybox/lib/modules

        cp /lib/modules/`uname -r`/kernel/fs/ext3/ext3.ko /tmp/busybox/lib/modules

    14、编辑init脚本:

        vim /tmp/busybox/init

#!/bin/sh  -->目前busybox只有sh环境

#

mount -t proc proc /proc

mount -t sysfs sysfs /sys

insmod /lib/modules/jbd.ko

insmod /lib/modules/ext3.ko

mdev -s  -->扫描busybox的硬件设备,此时从/tmp/busybox/sbin/mdev可看出(RedHat中扫描设备的命令是udev)

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

exec switch_root /mnt/sysroot /sbin/init

        添加init脚本执行权限:chmod +x init

    15、创建2个必要的设备文件:

        mknod dev/console c 5 1

        mknod dev/null c 1 3 

    16、封装initrd文件到/dev/hda1:

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

    17、复制内核文件到/dev/hda1:

        cp /boot/vmlinuz-・uname -r・ /mnt/boot/vmlinuz

    18、安装grub到/dev/hda设备:

        grub-install --root-directory=/mnt /dev/hda

        ls /mnt/boot/

    19、编辑grub文件:

        vim /mnt/boot/grub/grub.conf

defualt=0

timeout=3

title MageEdu Linux

root(hda0,0)

kernel /vmlinuz ro root=/dev/hda2

initrd /initrd.gz

        查看grub文件:ls /mnt/boot/

    20、创建/dev/hda2所需要的sysroot文件:

        cd /root/busybox-1.20.2

        cp _install/* /mnt/sysroot/ -a

        cd /mnt/sysroot

        ls

        rm linuxrc

    21、创建/dev/hda2必要的根文件:

        mkdir proc sys dev tmp var/{log,lock,run} lib/modules etc/rc.d/init.d root boot mnt media -pv

        ls

        ls sbin/(查看sbin下是否有init等)

    22、在创建系统初始化配置文件inittab(busybox支持的文件系统的配置文件和RedHat有差异)

        vim etc/inittab

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

console::respawn:-/bin/sh

::ctlaltdel:/sbin/reboot

::shutdown:/bin/umount -a -r

    23、为系统准备“文件系统表”配置文件/etc/fstab

        vim etc/fstab

sysfs /sys sysfs defaults 0 0

proc /proc proc defaults 0 0

/dev/hda1 /boot ext3 defaults 0 0

/dev/hda2 / ext3 defaults 1 1

        同步到磁盘:sync

    24、为/dev/hda2文件系统创建2个设备(主次设备号是事先注册好的)

        mknoddev/console c 5 1 

        mknod dev/null c 1 3 

    25、建立/dev/hda2文件系统初始化脚本文件:

        vim etc/rc.d/rc.sysinit

#!/bin/sh

echo -e "\\tWelcome to \\033[34mMage \\033[0m Linux."


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

mount -t proc proc /proc

mount -t sysfs sysfs /sys

mount -o remount,rw /


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

mdev -s


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

mount -a 

swapon -a 

        添加脚本执行权限:chmod +x etc/rc.d/rc.sysinit

    26、sync(同步数据到磁盘)

    27、新建主机,挂载刚刚第一步我们添加的硬盘,开始启动系统(宿主机关机)。

    28、系统启动后,开始测试busybox封装的Linux小系统的功能:

        ls

        fdisk -l

        mkswap /dev/hda3

        swapon /dev/hda3

        free -m 等。

你可能感兴趣的:(busybox)