手动制作Linux,手动制作Linux

本文详细介绍了如何在Vmware虚拟机上手动构建一个微型Linux系统。首先,通过在宿主机上创建磁盘分区并安装GRUB。接着,进行内核编译,包括选择CPU类型、支持的文件系统、网络功能等,并安装BusyBox作为init程序。然后,配置系统初始化文件、rc.sysinit、fstab等,最后启动小型Linux系统。整个过程涉及硬件识别、编译选项设定、系统配置等多个环节。
摘要由CSDN通过智能技术生成

在Vmware虚拟机上手动制作微型Linux:

一、准备工作:编译内核前确认硬件设备准确信息:

1、在一台宿主机上新建一块磁盘,作为目标的微型Linux主机磁盘使用,之后在宿主机上编译内核后移植到目标主机。在宿主机端新添加的磁盘为/dev/sdb,创建两个分区,/dev/sdb1,50M,/dev/sdb2,512M格式化为ext4磁盘类型,挂载同时安装好grub。

# mkdir /mnt/{boot,sysroot}

# mount /dev/sdb1 /mnt/boot

# mount /dev/sdb2 /mnt/sysroot

# grub-install --root-directory=/mnt /dev/sdb

为目标主机的grub程序提供grub配置文件:

# vim /mnt/boot/grub/grub.conf

2eb522c96eb6f46b51d236fcd62f7462.png

使用静态编译的方式,将所需要的模块编译进内核,所以没有initrd文件。

1、查看CPU硬件信息:

58778ca224a322ccc3f83ee516752ef9.png

2、查看主板信息:

825b6f657f5843ce9407f2616dbf2247.png

747af9f066b5c8f6238dec85e28e9b96.png

注意PCI设备、桥芯片厂商类型,硬盘(SCSI storage信息)、USB控制器、Ethernet controller信息。

3、编译前准备好编译环境,安装“Development tools"和”Server Platform Development"两个开发包组。

# yum -y groupinstall "Development tools"

# yum -y groupinstall "Server Platform Development"

二、编译:

# make allnoconfig;除必选选项意外将所有编译选项都去除;

编译选项,要勾选成*,静态编译进内核:

# make menuconfig;启动编译选择界面

1、选择是否使用64位版本or32位版本:64位CPU的机型通常勾选。

2、定义当前编译系统的版本,可自定义:

fb6ba69a81efc21da1718b261e45d295.png

3、选择CPU类型,在选项上选择与目标主机CPU类型最接近的一项:

4e12609186f61699d4841b6f87ed8bb9.png

选择将对称多处理器支持和多核调度。

2e98f32e232d1bf4751645fd70c0ed46.png

4、选择是否允许以后为了扩展而加载模块,可以不选:

5、选择总线选项:开启选项即可,很重要,要勾选。

6、选择磁盘选项:首先在编译首页面要选择启用块层,然后在设备驱动中选择支持SCSI设备和SCSI磁盘,根据需要选择Fusion MPT设备选项。

14b15ce8d304b05acaf97a3d800ed2df.png

dc0294035e30bf431c427aee0ee5f85e.png

7、选择支持的文件系统:

d868e98ea9039bf8391fd73ad0c4e554.png

8、选择支持的可执行文件类型,是指支持的系统初始化文件的文件类型:

cf3c4b0dbd3e7542c3c3b3e42bed2151.png

9、添加键盘鼠标的驱动:

fc05a6f9bc0d508b57c0de52ff59c8a4.png

现在鼠标键盘大多是USB口类型,需要开启USB支持,将所需要的类型添加进选项。

e7d8c5d3aa3091ea400fccb7257d2ba3.png

10、编译内核使内核识别的设备文件自动输出至/dev目录下,该选项在device driver中:

2cc237befa287bbb5fe8b86d98528169.png

11、选择使用网络功能:

ad083ca131170c2c337da5c6751e3dc2.png

在Device driver目录中,添加所需网卡设备驱动,里面对应的网卡设备很多,只选择机器识别的网卡型号,其他型号都可以不勾选:

eb50c41450f16643d6f1a00eaedd5402.png

# make bzImage && make install

核心编译安装完成后在编译的主目录下arch/x86/boot/会生成bzImage文件,将该内核文件复制到/mnt/boot目录下

# cp arch/x86/boot/bzImage /mnt/boot

12、为编译的系统提供init程序,这个程序是系统初始化必备的程序,可以在grub配置文件中选择手动指定启动的程序实现开机启动的第一个程序,通常默认为/sbin/init,而busybox可以实现相同的功能,可以用busybox来替换init程序。编译安装busybox,选择以静态编译的方式安装编译busybox:

实现静态编译busybox,需要提前解决依赖关系,安装glibc-static包:

# yum install -y glibc-static

# make menuconfig

9d4a4793cb78c39c2db307fe2090a7ec.png

# make && make install

busybox安装完成后在编译目录下生成_install目录将,该目录下的所有内容复制到/mnt/sysroot目录下

# cp -a _install/* /mnt/sysroot

三、编译安装后的配置操作:

1、系统运行所需要的应用程序由busybox提供工作完成后,后续需要完成系统的初始化工作,这个流程首先需要提供inittab文件,里面定义了系统初始化过程,使用busybox作为init程序后,busybox首先会读取这个文件内的定义,然后按照里面的内容对系统进行初始化工作,但这个文件是需要手动编辑提供的,否则系统无法引导:

# vim /mnt/sysroot/etc/inittab

508981efc7dda20952f71ffe522fa5ed.png

这个文件内的定义了系统初始化脚本的位置在/etc/rc.d/目录下的rc.sysinit,然后启动时会启动终端,定义按下ctrlaltdel键时系统的操作,以及关机时系统的操作等。

2、提供rc.sysinit脚本:

250c59c023f53935fc86b3e1e113be1e.png

3、提供文件系统配置文件/etc/fstab,在宿主机上编辑时,文件位置为/mnt/sysroot/etc/fstab

08a4f7f6d2e01bdbbdff9b948568d896.png

4、提供主机名的配置文件/mnt/sysroot/etc/sysconfig/network:

# mkdir /mnt/sysroot/etc/sysconfig

# vim /mnt/sysroot/etc/sysconfig/network

添加主机名称的定义即可

5、提供用户输入提示符的配置文件/mnt/sysroot/etc/profile,添加内容:

export PS1='[\u@\h \W]\$'

6、手动编辑passwd,group,shadow三个文件为目标的Linux主机提供用户账号:

# vim /mnt/sysroot/etc/passwd

fd09062a59985a216b098d80ab5a59de.png

# vim /mnt/sysroot/etc/group

2ba6bd97b4fd09e0b8afa6106ae283b3.png

用户的密码是由md5单向加密算法生成的,生成密码的方式:

# openssl passwd -1 -salt `openssl rand -hex 4`

编辑shadow文件将生成的密码复制在文件中:

# vim /mnt/sysroot/etc/shadow

6787b5a474b491bbccb0bcfb143ebf81.png

四、启动小型的Linux系统:

ceffac9a92faf6d29ca7fe44f45eba88.png

在终端登录:

fef82d704640c4ed5a729f0ca5c3e515.png

如果没有在rc.sysinit文件中定义加载HOSTNAME主机名的内容,那么启动终端的时候主机名的部分为none,所以在rc.sysinit中有source /etc/sysconfig/network的定义。而且,如果用户习惯用bash终端登录程序的话,那么主机名部分由于bash并不是在busybox中直接提供的,需要将bash移植到/bin/目录中,对应于宿主是/mnt/sysroot/bin/目录,同时还要复制对应的库文件到目标主机的/lib64目录下,但是登录后用户名部分是空的,因为bash程序需要借助nsswitch来实现用户名和密码的解析,所以如果要使用bash登录,需要移植nsswitch的应用程序和库文件及相应的工具文件到目标主机中。复制的过程中要注意保留原文件的属性信息。

# cp -a -d /lib64/libnss_files* /mnt/sysroot/lib64

# mkdir /mnt/sysroot/usr/lib64

# cp -a -d /usr/lib64/libnss3.so /mnt/sysroot/usr/lib64

# cp -a -d /usr/lib64/libnss_files.so /mnt/sysroot/usr/lib64

# cp -a -d /usr/lib64/libnsspem.so /usr/lib64/libnsssysinit.so /usr/lib64/libnssutil3.so /mnt/sysroot/usr/lib64

为nsswitch提供配置文件,从宿主机一端复制配置文件到目标主机的相应目录:

# cp /etc/nsswitch.conf /mnt/sysroot/etc

手动制作的小型Linux系统制作完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值