基于busybox和LFS的linux系统定制

自从在大学知道了Linux这玩意是可以定制的之后,一直想做出一版属于自己的Linux系统。最近工作比较闲,终于塌下心来好好学习了一下。

目前来说,我接触的定制Linux的方法主要有两种:

1、以busybox为核心,通过构建initrd+busybox做出的fs+内核这三大块,构建Linux

2、采用更底层方式,基于源代码级,通过编译&构建自己的工具链+编译&构建自己的lfs+内核这三大块,构建Linux,其中最典型的就是我刚刚完成的LFS系统。

关于两种方法的优缺点呢,由于我接触的还比较肤浅,所以认识可能有些错误。

方法1在速度上要比2快得多,更适合于小型嵌入式Linux。而方法2由于采用了更底层更直接的方式,适合用来学习Linux的架构,也有很好的拓展性和自由性,对定制比较灵活,打好基础后续还可以继续BLFS。

先不管那么多,我只是想做个笔记而已,以免做完了,过了两月,怎么做的都忘干净了= =!

方法一:

需要准备工具:

宿主机一台,硬盘一块(学习时可以使用虚拟机的虚拟磁盘),纯洁的内核一份,busybox源代码一份

1、将硬盘分两个区,一个boot用,一个当根文件系统用,之后分别挂载至宿主机的/mnt/boot和/mnt/sysroot目录。

将grub安装到boot目录:grub-install --root-directory=/mnt /dev/sda

2、编译busybox,这玩意做的menuconfig跟内核很像呢,在里面选上下面这项,即编译出来的busybox不与宿主机共享库文件,之后make install:

Busybox Settings --> Build Options -->  Build BusyBox as a static binary (no shared libs)

3、制作initrd。initrd全称是init ram disk,在我理解就是在linux启动之前运行在ram中的临时根文件系统,用来挂载实际硬盘上的根文件系统。对于一些需要热关机的场合,initrd其实直接就可以当最终文件系统来使用。

制作方法是这样的,在宿主机/tmp目录下建一个initrd文件夹,将刚才busybox安装完毕出现的_install文件夹下内容全部拷贝到initrd文件夹下,此时其中已经包含了部分系统常用命令。

接下来建立系统常用的文件夹:mkdir -pv  proc  sys  etc tmp  dev  mnt/sysroot

创建两个必要的设备文件:

mknod  dev/console  c  5  1

mknod  dev/null  c  1  3

建立init脚本,实现initrd启动后对rootfs的切换

[[email protected] initrd]# vim  init

[[email protected] initrd]# cat init

#!/bin/sh

mount -t proc proc /proc

mount -t sysfs sysfs /sys

mdev -s

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

exec  switch_root  /mnt/sysroot  /sbin/init

#给此脚本执行权限:

chmod  +x  init

这里需要注意一下,由于各种可能原因,init脚本启动无法挂载rootfs,尤其是在mdev -s这步,这里有一个调试办法,直接在initrd中启动shell。

/sbin/getty -n -l /bin/sh 38400 tty1

exec /bin/sh

以上的代码可以酌情加载init脚本中某个位置。

好,到这里initrd就制作完毕了,把它打包,待用。

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

5、接下来制作真正的rootfs,其实方法原理跟制作initrd差不多了。以下为无脑转载:

#拷贝busybox中所有文件到/mnt/sysroot

cp -a busybox-1.20.2/_install/* /mnt/sysroot

#创建minilinux所需的目录

mkdir -pv /mnt/{boot/grub,sysroot/{boot,proc,sys,bin,sbin,lib/modules,usr/{bin,sbin,lib},var/{run,log,lock},etc/{init.d,rc.d},dev/pts,home,root,tmp}}

#创建两个必要的设备文件:

mknod  dev/console  c  5  1

mknod  dev/null  c  1  3

#配置init所需的inittab配置文件

cd  /mnt/sysroot

rm  -f  linuxrc

[[email protected] sysroot]# vim etc/inittab

[[email protected] sysroot]# cat etc/inittab

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

::respawn:/sbin/getty 9600 tty1

::respawn:/sbin/getty 9600 tty2

::respawn:/sbin/getty 9600 tty3

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

::ctrlaltdel:/sbin/reboot

#配置系统初始化脚本etc/rc.d/rc.sysinit

[[email protected] sysroot]# vim  etc/rc.d/rc.sysinit

[[email protected] sysroot]# cat etc/rc.d/rc.sysinit

#!/bin/sh

echo -e "\tWelcome to  \033[31mMageEdu\033[0m Linux"

echo -e "Remounting the root filesystem ..."

mount -t proc proc /proc

mount -t sysfs sysfs /sys

mount -o  remount,rw  /

echo -e "Creating the files of device ..."

mdev -s

echo -e "Mounting the filesystem ..."

mount -a

swapon -a

echo -e "Starting the log daemon ..."

syslogd

klogd

echo -e "Configuring loopback interface ..."

ifconfig  lo  127.0.0.1/24

ifconfig eth0 172.16.100.100/16

#而后让此脚本具有执行权限:

chmod +x  etc/rc.d/rc.sysinit

#为系统准备一个“文件系统表”配置文件etc/fstab

[[email protected] sysroot]# vim  etc/fstab

[[email protected] sysroot]# cat 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

————————————————————转载结束————————————————————————

需要注意的是,fstab这个文件十分重要,要配置符合成实际使用情况。

4、把纯洁的内核先给编译喽,可以精简部分选项.。第一次最好要做好完全准备,记得提前make mrproper。编译完成后,把编译好的bzImage文件拷到boot分区下。

5、现在既有了内核,又有了initrd,该配置grub.conf了,同样注意实际使用情况。

6、一定记得sync,之后新建一个虚拟机,用做好的硬盘应该就可以引导起来了。

关于busybox这个方法,网上有大量教程,很详细,思路都差不多,就说道这里。

方法二:

需要准备工具:

宿主机一台,硬盘一块(学习时可以使用虚拟机的虚拟磁盘),LFS-packeages,官方提供下载,我用的是stable7.3

其实关于这个方法,最好的还是去读官方教程,写的非常好,非常详细,也连带着许多知识点,我这就记录一个思路。

下面我说一下我的理解。

我们要做一个系统,最重要的一点是保证她的纯洁,即做完了的这个系统是个独立的系统,与宿主机毫无瓜葛,那么由于LFS是基于代码级的,所有程序都需要编译,这就意味着编译时依赖的编译器、glibc库等,是一个重点,也就是反复提到的工具链,如下。

宿主机工具链-》编译出LFS系统工具链-》进行自编译,形成独立-》构建rootfs

整个LFS的流程是这样的

1、还是将硬盘分区

2、新建一个用户,进入该目录,依附宿主机分别编译Binutils和Gcc,之后编译Glibc,接着,基于刚编译好的Glib重新编译Binutils和Gcc。其实工具链的布置就是这么个意思,摆脱了与宿主机的关系。当然,这三个是最基本的,除此之外,在布置工具链还需要大量的工具,而这些工具是基于这三个的。

3、下面chroot,进入纯净的LFS系统,从零开始。通过上面完成的工具链,一个一个安装需要的命令。

4、编译内核、配置fstab、配置grub,但是没有initrd。在网上查了一下原因,原来initrd存在的意义还可以缩小真正系统的内核大小,因为其中有一些系统启动时候需要的启动介质驱动、根文件系统驱动,所以一般发行版都有。但LFS一般只供单机使用,所以就没有这个步骤,当然想加也是可以加上的。

以上是一个初学者的(可能是漏洞百出、错误连篇的)笔记。

时间: 2024-10-19 06:51:01

基于busybox和LFS的linux系统定制的相关文章

基于PXE网络启动的Linux系统自动化安装

基于PXE网络启动的Linux系统自动化安装 ??在实际工作中,传统纯手动安装操作系统的方式是有一定的局限性的,例如:现在大多数的服务器都不自带光驱,若要安装系统需要外接光驱插入光盘,整个安装过程中需要人工交互确认,手动设置每一个安装设置项,人必须要在机器前值守,时间大多花费在安装的等待过程中.假如有一大批服务器需要安装操作系统,这种传统手动的方式去逐台安装系统的方式,效率是极其低下的,而且由于需要人工交互式配置系统的安装设置项,无法确保每一台机器的系统安装配置都是完全一致的,即无法做到完全的统

从开始到结束,手把手教你使用busybox构建类嵌入式Linux系统

概述: 本篇博客是一个自制类嵌入式Linux系统的制作手册,内容涵盖使用宿主机通过busybox实 现制作类嵌入式Linu系统的详细过程,一步一步教你如何制作属于你自己的linux系统,同时 帮助你更加清楚的了解linux系统的组成结构,本篇博客需要读者对linux系统的启动流程及ssh 远程连接有一定的了解,这部分很多博客都有介绍,这里就不说明了,不了解的读者可以先去 看看这方面的博客. 制作的整个过程比较漫长(主要是编译源码需要耗费大量时间,因此,在编译内核时,记 得另起虚拟终端先完成其它操

基于 cobbler 实现自动安装 linux 系统

使用 cobbler 实现自动安装 centos 6.7系统 1.yum install cobbler -y 安装 cobbler ,有依赖关系,会自动把 TFTP .HTTP 服务安装上:cobbler 是基于 epel 源,需要连网 2.yum install dhcp -y 安装 DHCP 服务 3.systemctl start httpd tftp cobblerd 启动 HTTP .TFTP.cibbler ,DHCP 的配置文件不配置的话,是无法启动服务的 4.systemctl

使用kernel编译+busybox定制Linux系统--实现ssh远程登录+web服务的迷你主机

在运维工作中很多时候我们需要裁剪Linux系统,减少系统性能的消耗,提升系统服务的性能,以往通过光盘安装的Linux都是比较臃肿的,但出现这样的需求后,我可以对Linux进行重新编译再busybox工具移植即可实现,接下来我们一步一步实现kernel编译+busybox定制Linux系统--实现ssh远程登录+web服务: 实现过程如下: 一.规划子主机的磁盘存储规划 1.添加一个大小为10G的硬盘 2.查询系统硬件信息参数: # lspci  00:00.0 Host bridge: Inte

Linux系统固化方法

1. 前言本次Linux系统固化实验的平台为广州创龙TL5728-IDK开发板开发板简介:? 基于TI AM5728浮点双DSPC66x+双ARMCortex-A15工业控制及高性能音视频处理器:? 强劲的视频编解码能力,支持1路1080P60或2路720P60或4路720P30视频硬件编解码,支持H.265视频软解码:? 双核PRU-ICSS工业实时控制子系统,支持EtherCAT.EtherNet/IP.PROFIBUS等工业协议:? 外设接口丰富,GPMC.USB 2.0.UART.SPI

Linux系统裁剪之四(自定义内核及busybox完成系统定制)

Linux系统裁剪之四(自定义内核及busybox完成系统定制) ·busybox busybox是一个二进制程序,可以模拟实现许许多多的Linux命令,busybox在编译安装完成之后会在我们系统的bin目录下生成一个名为busybox的二进制程序,其它的文件都是该二进制程序的软链接,几乎上百个命令都可以依靠这一个可执行程序来实现,还可以模拟几个shell,可以模拟实现我们Linux操作系统上bin和sbin目录下的很多命令,而且该文件所占的存储空间还非常的小,因此在一些存储设备容量非常小的环

手动订制一个基于BusyBox的微型Linux系统

前提: 1.一个作为宿主机的Linux:系统版本为Redhat Enterprise Linux 5.8: 2.busybox源码:版本为busybox-1.20.2.busbox将大量命令打包在一起 3.在宿主机上添加一块额外的硬盘作为新系统的存储盘,这里添加使用一块IDE接口的新硬盘: 4.通过https://busybox.net/和https://www.kernel.org/分别下载Linux内核源码和busybox源码 5.全部在vmware10.0下新建一个redhat5.8主机用

定制自己的linux系统

算是总结式文档,以备后忘 先说一下背景,一开始我就知道有这个任务,同时我自己也非常感兴趣,打算去研究研究 于是才同意接这个任务,但是我的原意是从头开始搭建系统,也就是lfs 但接到任务后,由于种种原因,lfs没有进行到底,中途变为在流行版本基础上进行定制 本篇文章基于ubuntu 14.04 LTS进行定制 接到公司新任务--定制一版linux系统 其实一开始接到的任务是裁剪linux内核 于是马不停蹄的查找相关资料,由于之前做过一些linux内核编译的事,所以也不是特别犯难,查找一下资料就开始

Linux kernel的定制与微型linux系统实现

友情提醒:本文实验环境 centos 6.6 x86_64 + vmware workstation 10 内容概括: 1)实验与实验环境介绍 2)Centos 6.6系统启动流程简介 3)启动分区设置 4)kernel的定制提供系统"大脑" 5)编译busybox提供系统"身体" 6)编译dropbear提供sshd服务 7)实验中用到的shell脚本 一.实验与实验环境介绍 通过vmware workstation10 软件,实现inux kernel的定制,并