菜鸟学Linux 第036篇笔记  busybox+vmlinux

以下为制作Mini_linux

用busybox 和宿主机的vmlinuz 下一章节就是busybox + 自制kernel

软件源 www.busybox.net

内核编译:

busybox:

Kernel+rootfs()

kernel+initrd(ramdisk)

kernel+

busybox-->initrd

kernel+initrd(busybox)-->rootfs(busybox)

kernel

RHEL5.8 + busybox(initrd) + rootfs(busybox)

查看本机硬件属性

1. cat /proc/cpuinfo

2. lsusb

3. lspci

4. hal-device (Hardware abstract layer)

编译内核:

1. 配置

make menuconfig

make gconfig

make kconfig

make oldconfig

make config手动配置每一个条目

保存为.config文件

2.编译安装

make 

make modules_install

make install

模块安装位置: /lib/modules/Kernel_version/

如何实现部分编译

1、只编译某子目录下的相关代码

make dir/subdir

2、只编译部分模块

make M=drivers/net

3、只编译某一模块

make drivers/net/pcnet32.ko

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

make O=/root/kernel

如何编译busybox-->initrd:

1. 下载解压然后进入其目录执行make menuconfig

basybox settings-->build Options-->将库做成静态

installation Options

由于版本太旧可以需要新版本的内核的头文件 解压新版内核

找到kernel_file/include/mtd/ubi-user.h 复制到busybox/include/mtd/

busyboxy没有mtd目录手动创建一个就可以了

make install

编译完成在编译目录生成_install文件夹

cp _install /tmp/busybox -a

rm -rf linuxrc

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

添加ext3模块

cp /lib/modules/2.6.18-308.el5/kernel/fs/jbd/jbd.ko lib/modules/

cp /lib/modules/2.6.18-308.el5/kernel/fs/ext3/ext3.ko lib/modules/

2. 生成init配置文件

vim /tmp/busybox/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/hda2  /mnt/sysroot

exec  switch_root  /mnt/sysroot  /sbin/init

保存后加上执行权限chmod +x init

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

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

cp /boot/vmlinuz-2.6.18-308.el5 /mnt/boot/

生成grub.conf配置文件到/mnt/boot/grub/grub.conf添加内容

default=0

timeout=3

title my little linux

        root (hd0,0)

        kernel /vmlinuz ro root=/dev/hda2

        initrd /initrd.gz

3. 生成设备文件

mknod dev/null c 1 3

mknod dev/console c 5 1

以上所操作/mnt/boot所需要的所有文件都已经完成接下来制作根

1.  cp /root/busybox-1_20_2/_install/* /mnt/sysroot/ -a

rm -rf linuxrc

mkdir proc sys dev tmp lib/modules etc var/{log,lock,run} 

 etc/rc.d/init.d root boot mnt media -pv 此两行为一行命令

vim etc/inittab 添加如下内容

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

console::respawn:-/bin/sh

::ctrlaltdel:/sbin/reboot

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

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

2. 生成设备文件(注意此处生成的是在真正的根下,前边的是在initrd文件里的)

mknod dev/null c 1 3

mknod dev/console c 5 1

IDE:

/dev/hda1: ext3  /boot

/dev/hda2: ext3  /