新闻中心 新闻
技术分享 | 带你从零开始搭建linux最小系统
新闻 2021-07-19 10:41:05

前言:

Linux操作系统运用十分广泛,但我们有时不需要运用所有组件,或者对处理机性能有要求,所以需要对Linux内核进行裁剪。


1.开发环境 

系统 ubantu18.04

linux内核源码 linux-4.9.229 

busybox版本 busybox-1.30.0

虚拟机 qemu 2.0.0


2.相关软件安装

这是一个shell文件也可以一行行复制执行(shell脚本)

微信图片_20210722103014.png


# download code 

curl https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.229.tar.xz -o kernel.tar.xz

export ARCH=x86

# unzip Kernel

tar xf kernel.tar.xz

cd linux-4.9.229

# install curses

sudo apt-get install libncurses5-dev

make x86_64_defconfig

#

cd ..

curlhttps://busybox.net/downloads/busybox-1.30.0.tar.bz2 -o busybox-1.30.0.tar.bz2

#

tar xf busybox-1.30.0.tar.bz2

1.png

cd linux-4.9.229

make menuconfig

#打开编译配置界面

2.png

左右按键选择 <select> <Exit> …等控制选项 上下选择编译选项 空格选择该选项是否运行 回车键确定操作

3.png

选择General setup --→

4.png

按空间建  [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support

5.png

如上设置

Device Drivers --->

[*] Block devices --->

<*>  RAM block device support

 (65536) Default RAM disk size (kbytes)



6.png

7.png

选择Save保存

make 编译

需要等一会

8.png系统编译后位于 arch/x86_64/boot/bzImage


接下来编译busybox

先  make menuconfig 然后设置为静态编译

Busybox Settings --->

Build Options --->

[*] Build BusyBox as a static binary (no shared libs)

9.png

#make && make install

编译和安装

编译后文件在 __install

10.png

创建一些必要的目录和路径

# mkdir etc dev mnt

# mkdir -p proc sys tmp mnt

# mkdir -p etc/init.d/

# vim etc/fstab

proc    /proc      proc     defaults    0    0

tmpfs    /tmp      tmpfs    defaults    0    0

sysfs    /sys      sysfs    defaults    0    0

# vim etc/init.d/rcS

echo -e "Welcome to tinyLinux"

/bin/mount -a

echo -e "Remounting the root filesystem"

mount -o remount,rw /

mkdir -p /dev/pts

mount -t devpts devpts /dev/pts

echo /sbin/mdev > /proc/sys/kernel/hotplug

mdev -s

# chmod 755 etc/init.d/rcS

# vim etc/inittab

::sysinit:/etc/init.d/rcS

::respawn:-/bin/sh

::askfirst:-/bin/sh

::cttlaltdel:/bin/umount -a -r

# chmod 755 etc/inittab

# cd dev

# mknod console c 5 1

# mknod null c 1 3

# mknod tty1 c 4 1

以上已经完成了所有linux最小系统所需要的东西


接下来是制作系统镜像

思路参考B站UP主 “简说Linux”

1.先制作一个空的镜像文件;

2.然后把此镜像文件格式化为ext3格式;

3.然后把此镜像文件挂载,并把根文件系统复制到挂载目录;

4.卸载该镜像文件。

5.打成gzip包。

#!/bin/bash

rm -rf rootfs.ext3

rm -rf fs

dd if=/dev/zero of=./rootfs.ext3 bs=1M count=32

mkfs.ext3 rootfs.ext3

mkdir fs

mount -o loop rootfs.ext3 ./fs

cp -rf ./_install/* ./fs

umount ./fs

gzip --best -c rootfs.ext3 > rootfs.img.gz

最终生成的文件系统镜像名字为:rootfs.img.gz

11.png

接下来用模拟器启动该镜像。

安装qemu

apt-install qemu

接下来启动镜像

# qemu-system-x86_64 \

-kernel ./linux-4.9.229/arch/x86_64/boot/bzImage \

-initrd ./busybox-1.30.0/rootfs.img.gz  \

-append "root=/dev/ram init=/linuxrc" \

-serial file:output.txt

打开虚拟机后输入ls测试执行成功  按alt+ctrl退出虚拟机输入

12.png

自此一个最小linux系统搭建完成。


结束语

现在我们完成了相当于“hello world”和点灯的操作,但内核开发还有很多的知识等待我们探索。


- End -

技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。


您的浏览器版本过低,建议下载更换以下浏览器:

官方店铺

 阿木实验室

联系电话

028-87872048

扫一扫,快速加入

硬件评测

群号652692981

课程学习

群号652692981