菜鸟学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 /