您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
Linux系统裁减之四 自定义内核及busybox完成系统定制-使用busybox定制mini系统
发布时间:2018-10-13 14:58:51编辑:雪饮阅读()
- <file systems> - 要挂载的分区或存储设备.
- <dir> - <file systems>的挂载位置。
- <type> - 要挂载设备或是分区的文件系统类型,支持许多种不同的文件系统:ext2, ext3, ext4, reiserfs, xfs, jfs, smbfs, iso9660, vfat, ntfs, swap 及 auto。 设置成auto类型,mount 命令会猜测使用的文件系统类型,对 CDROM 和 DVD 等移动设备是非常有用的。
- <options> - 挂载时使用的参数,注意有些mount 参数是特定文件系统才有的。一些比较常用的参数有:
- <dump> dump 工具通过它决定何时作备份. dump 会检查其内容,并用数字来决定是否对这个文件系统进行备份。 允许的数字是 0 和 1 。0 表示忽略, 1 则进行备份。大部分的用户是没有安装 dump 的 ,对他们而言 <dump> 应设为 0。
- <pass> fsck 读取 <pass> 的数值来决定需要检查的文件系统的检查顺序。允许的数字是0, 1, 和2。 根目录应当获得最高的优先权 1, 其它所有需要被检查的设备设置为 2. 0 表示设备不会被 fsck 所检查。
环境:
vmware10.0.7 build-2844087(使用兼容版本workstation9.0)
[红帽桌面Linux.5.8.for.x86].rhel-server-5.8-i386-dvd(ED2000.COM).iso
busybox-1.20.2.tar.bz2(链接:https://pan.baidu.com/s/18bgu5NR6SxpQfGAR2dRl8g 提取码:4qqr)
linux-2.6.38.5.tar.bz2(链接:https://pan.baidu.com/s/1k3NFnmn7nVcvPKvbI8LQLg 提取码:jg15)
(1)为redhat5.8宿主系统配置本地repo源
载入安装光盘,将光盘中Server目录拷贝到系统根目录
[root@localhost busybox-1.20.2]# vi /etc/yum.repos.d/Server.repo
[root@localhost busybox-1.20.2]# cat /etc/yum.repos.d/Server.repo
[Server]
name=Red Hat
baseurl= file:///Server
enable=1
gpgcheck=0
[root@localhost busybox-1.20.2]# yum repolist
Loaded plugins: katello, product-id, security, subscription-manager
Updating certificate-based repositories.
Unable to read consumer identity
Server | 1.5 kB 00:00
Server/primary | 920 kB 00:00
Server 3285/3285
repo id repo name status
Server Red Hat 3,285
repolist: 3,285
(2)安装gcc与curses系列依赖(busybox所需要的)
[root@localhost busybox-1.20.2]# yum install gcc
[root@localhost src]# yum install *curses*
(3)解压源码busybox-1.20.2.tar.bz2并进入解压后目录进行编译
[root@localhost ~]# cd /usr/local/src
[root@localhost src]# tar -xf busybox-1.20.2.tar.bz2 -C ./
[root@localhost src]# cd busybox-1.20.2
[root@localhost busybox-1.20.2]# make menuconfig
进入字符式菜单后依次进入:
Busybox Settings--> Build Options然后勾选[*] Build BusyBox as a static binary (no shared libs)
然后退出保存。
解析:
tar:
C:指定文件解压后所要释放的位置
z:若是使用gzip压过的,可指定该选项,否则就需要忽略该选项。
然后
[root@localhost busybox-1.20.2]# make install
(4)提取ubi-user.h补全busybox
由于(3)中make install报错了,是因为我们的内核版本不够高。
解压源码linux-2.6.38.5.tar.bz2并在其中提取ubi-user.h补全busybox
[root@localhost busybox-1.20.2]# cd /usr/local/src
[root@localhost src]# tar xf linux-2.6.38.5.tar.bz2 -C ./
[root@localhost src]# mkdir /usr/local/src/busybox-1.20.2/include/mtd
[root@localhost src]# cp /usr/local/src/linux-2.6.38.5/include/mtd/ubi-user.h /usr/local/src/busybox-1.20.2/include/mtd/
然后重新make install
(5)复制busybox编译安装后生成的_install并整合内核所需常用目录
cp /usr/local/src/busybox-1.20.2/_install /tmp/busybox -a
解析:cp -a:保留原文件属性进行复制
[root@localhost busybox-1.20.2]# cd /tmp/busybox
You have new mail in /var/spool/mail/root
[root@localhost busybox]# mkdir proc sys etc/init.d dev mnt/sysroot tmp lib/modules -pv
(6)为内核提供ext3文件系统支持
[root@localhost busybox]# modinfo ext3
filename: /lib/modules/2.6.18-308.el5/kernel/fs/ext3/ext3.ko
license: GPL
description: Second Extended Filesystem with journaling extensions
author: Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others
srcversion: 26DC008FC415305C5F65313
depends: jbd
vermagic: 2.6.18-308.el5 SMP mod_unload gcc-4.1
module_sig: 883f3504f2324332d3142b3e704051112141c09f45fe672e4db062f41923995d307c2a22213ac59609f5474bd4a6ca7665da553738c019557064a811c2
[root@localhost busybox]# modinfo jbd
filename: /lib/modules/2.6.18-308.el5/kernel/fs/jbd/jbd.ko
license: GPL
srcversion: 11842879E04FE2392B988CC
depends:
vermagic: 2.6.18-308.el5 SMP mod_unload gcc-4.1
module_sig: 883f3504f2324332d3142b3e704051112263609f7a68e7433c9b3b9465cadb5165e78eb997ad1309e22e1a42144eb69c67e660a3d2f4ba94e2f12f42
[root@localhost busybox]# cp /lib/modules/2.6.18-308.el5/kernel/fs/jbd/jbd.ko /tmp/busybox/lib/modules/
[root@localhost busybox]# cp /lib/modules/2.6.18-308.el5/kernel/fs/ext3/ext3.ko /tmp/busybox/lib/modules/
[root@localhost busybox]# vi /tmp/busybox/init
[root@localhost busybox]# cat /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
[root@localhost busybox]# chmod +x /tmp/busybox/init
解析:
mount :
这里用了3个值
-t:指定文件系统类型
后两个参数分别是device和dir
mdev -s:
扫描系统中所有硬件设备并自动装配
(7)创建根分区挂载目录与设备文件
[root@localhost busybox]# mkdir /tmp/busybox/mount/sysroot -pv
mkdir: created directory `/tmp/busybox/mount'
mkdir: created directory `/tmp/busybox/mount/sysroot'
[root@localhost busybox]# mknod /tmp/busybox/dev/console c 5 1
[root@localhost busybox]# mknod /tmp/busybox/dev/null c 1 3
解析:
mknod: mknod命令用于创建Linux中的字符设备文件和块设备文件。
设备文件分为两种
块设备文件:b表示
字符设备文件:c表示
51:主设备号为5,次设备号为1
5设备:
5 char 辅助 TTY 设备
0 = /dev/tty 当前 TTY 设备
1 = /dev/console 系统控制台(一般是/dev/tty0)
2 = /dev/ptmx 所有 Unix98 PTY master 的复用器
3 = /dev/ttyprintk 内核通过此设备使用printk发送内嵌的用户消息(依赖于CONFIG_TTY_PRINTK)
64 = /dev/cua0 对应于 ttyS0 的呼出(Callout)设备
...
255 = /dev/cua191 对应于 ttyS191 的呼出(Callout)设备
1设备:
1 char 内存设备
1 = /dev/mem 物理内存的全镜像。可以用来直接存取物理内存。
2 = /dev/kmem 内核看到的虚拟内存的全镜像。可以用来访问内核中的内容(查看内核变量或用作rootkit之类)。
3 = /dev/null 空设备。任何写入都将被直接丢弃(但返回"成功");任何读取都将得到EOF(文件结束标志)。
4 = /dev/port 存取I/O端口
5 = /dev/zero 零流源。任何写入都将被直接丢弃(但返回"成功");任何读取都将得到无限多的二进制零流。
7 = /dev/full 满设备。任何写入都将失败,并把errno设为ENOSPC(没有剩余空间);任何读取都将得到无限多的二进制零流。
这个设备通常被用来测试程序在遇到磁盘无剩余空间错误时的行为。
8 = /dev/random 真随机数发生器。以背景噪声数据或硬件随机数发生器作为熵池,读取时会返回小于熵池噪声总数的随机字节。
若熵池空了,读操作将会被阻塞,直到收集到了足够的环境噪声为止。建议用于需要生成高强度密钥的场合。
[注意]虽然允许写入,但企图通过写入此文件来"预存"随机数是徒劳的,因为写入的数据对输出并无影响。
9 = /dev/urandom 伪随机数发生器。更快,但是不够安全。仅用于对安全性要求不高的场合。
即使熵池空了,读操作也不会被阻塞,而是把已经产生的随机数做为种子来产生新的随机数。
[注意]虽然允许写入,但企图通过写入此文件来"预存"随机数是徒劳的,因为写入的数据对输出并无影响。
10 = /dev/aio 异步I/O通知接口
11 = /dev/kmsg 任何对该文件的写入都将作为printk的输出;而读取则得到printk的输出缓冲区内容。
(8)完成initrd与内核
[root@localhost busybox]# mkdir -p /mount/boot
[root@localhost busybox]# rm -rf /tmp/busybox/linuxrc
[root@localhost busybox]# find . | cpio -H newc --quiet -o | gzip -9 > /mount/boot/initrd.gz
[root@localhost busybox]# cp /boot/vmlinuz-2.6.18-308.el5 /mount/boot/vmlinuz
(9)安装grub
[root@localhost busybox]# grub-install --root-directory=/mount /dev/hda
Probing devices to guess BIOS drives. This may take a long time.
Installation finished. No error reported.
This is the contents of the device map /mount/boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.
(fd0) /dev/fd0
(hd0) /dev/hda
(hd1) /dev/hdb
[root@localhost busybox]# vi /mount/boot/grub/grub.conf
[root@localhost busybox]# cat /mount/boot/grub/grub.conf
default=0
timeout=5
title mageEdu linux (2.6.18)
root (hd0,0)
kernel /vmlinuz ro root=/dev/hda2
initrd /initrd.gz
(10)创建实际的sysroot
[root@localhost busybox]# cp /usr/local/src/busybox-1.20.2/_install/* /mount/sysroot/ -a
[root@localhost busybox]# rm -rf /mount/sysroot/linuxrc
[root@localhost busybox]# cd /mount/sysroot/
[root@localhost sysroot]# mkdir proc sys dev tmp var/{log,lock,run} lib/modules etc/rc.d/init.d root boot mnt media -pv
解析:
cp:
a:保留原文件属性、
(11)准备实际sysroot/etc 的inittab
[root@localhost sysroot]# vi /mount/sysroot/etc/inittab
[root@localhost sysroot]# cat /mount/sysroot/etc/inittab
::sysinit:/etc/rc.d/rc.sysinit
console::respawn:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
解析:这里并没有配置级别模式,这是busybox的inittab格式
(12)准备实际sysroot 的fstab
[root@localhost sysroot]# vi /mount/sysroot/etc/fstab
[root@localhost sysroot]# cat /mount/sysroot/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
解析:
· auto - 在启动时或键入了 mount -a 命令时自动挂载。
· noauto - 只在你的命令下被挂载。
· exec - 允许执行此分区的二进制文件。
· noexec - 不允许执行此文件系统上的二进制文件。
· ro - 以只读模式挂载文件系统。
· rw - 以读写模式挂载文件系统。
· user - 允许任意用户挂载此文件系统,若无显示定义,隐含启用 noexec, nosuid, nodev 参数。
· users - 允许所有 users 组中的用户挂载文件系统.
· nouser - 只能被 root 挂载。
· owner - 允许设备所有者挂载.
· sync - I/O 同步进行。
· async - I/O 异步进行。
· dev - 解析文件系统上的块特殊设备。
· nodev - 不解析文件系统上的块特殊设备。
· suid - 允许 suid 操作和设定 sgid 位。这一参数通常用于一些特殊任务,使一般用户运行程序时临时提升权限。
· nosuid - 禁止 suid 操作和设定 sgid 位。
· noatime - 不更新文件系统上 inode 访问记录,可以提升性能(参见 atime 参数)。
· nodiratime - 不更新文件系统上的目录 inode 访问记录,可以提升性能(参见 atime 参数)。
· relatime - 实时更新 inode access 记录。只有在记录中的访问时间早于当前访问才会被更新。(与 noatime 相似,但不会打断如 mutt 或其它程序探测文件在上次访问后是否被修改的进程。),可以提升性能(参见 atime 参数)。
· flush - vfat 的选项,更频繁的刷新数据,复制对话框或进度条在全部数据都写入后才消失。
· defaults - 使用文件系统的默认挂载参数,例如 ext4 的默认参数为:rw, suid, dev, exec, auto, nouser, async.
(13)创建实际的sysroot的设备文件
[root@localhost sysroot]# mknod /mount/sysroot/dev/cosole c 5 1
[root@localhost sysroot]# mknod /mount/sysroot/dev/null c 1 3
(14)创建实际的sysroot的sysinit文件
[root@localhost sysroot]# vi /mount/sysroot/etc/rc.d/rc.sysinit
[root@localhost sysroot]# cat /mount/sysroot/etc/rc.d/rc.sysinit
#!/bin/sh
echo -e "\tWelcome to \033[34mMageEdu \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
[root@localhost sysroot]# chmod +x /mount/sysroot/etc/rc.d/rc.sysinit
swapon -a
解析:
swapon:开启swap
a:所有swap设备
(15)使用新的虚拟机,挂载上面做好的ide磁盘进行测试
如下界面即表示成功
关键字词:linux,busybox
相关文章
- Linux系统裁减之四 自定义内核及busybox完成系统定制-
- bash脚本编程之十三(Linux系统裁减之三) 系统函数库
- bash脚本编程之十三(Linux系统裁减之三) 系统函数库-m
- bash脚本编程之十三(Linux系统裁减之三) 系统函数库-
- 马哥linux运维学习笔记-bash脚本编程之十二(Linux系统
- bash脚本编程之十二(Linux系统裁减之二) 系统函数库-
- bash脚本编程之十二(Linux系统裁减之二) 系统函数库-
- bash脚本编程之十二(Linux系统裁减之二) 系统函数库-
- bash脚本编程之十二(Linux系统裁减之二) 系统函数库-
- bash脚本编程之十二(Linux系统裁减之二) 系统函数库-