Linux内核源码+Busybox构建最小系统

Linux内核源码+Busybox构建最小系统

一、环境及准备

1.1 编译环境

  • 操作系统:Ubuntu20.04;
  • 编译工具:gcc 8,安装:sudo apt install gcc-8
  • Linux内核版本:5.13.9
  • busybox:1.34.0
  • qemu:sudo sudo apt install qemu

1.2 前置依赖安装

sudo apt-get install fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison

1.3 目录结构

解压。

二、编译Linux内核源码

进入Linux源码目录下。

2.1 设置

CPU架构

本文指定编译x86 64位CPU:

export ARCH=x86_64
交叉编译工具
export CROSS_COMPILE=x86_64-linux-gnu-

2.2 配置board-config

首先生成x86_64平台的默认选项并生成.config文件:

make  x86_64_defconfig

然后,基于生成的配置进行修改,主要修改两个地方:

1.支持ramdisk驱动

General setup  --->
       ----> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support

2.开启RAM block device support并设置默认RAM Disk大小

路径如下

Device Drivers  --->
       [*] Block devices  --->
               <*>   RAM block device support
        	   (16)    Default number of RAM disks
               (65536) Default RAM disk size (kbytes)

注意:这里的RAM block device support按一次空格时选中状态为M,此时一定要再按一次空格使其状态变为*****,否则最后启动系统后会报错

2.3 编译内核

# 根据CPU线程数设置
$ make -j 8

编译大概用时8分钟左右,完成后在源码目录arch/x86/boot/下生成bzImage文件,同时在arch/x86_64/boot/创建连接。

三、编译安装busybox源码

进入busybox解压目录。

3.1 设置CPU架构

# 设置CPU架构
$ export ARCH=x86_64

# 设置交叉编译工具链前缀
$ export CROSS_COMPILE=x86_64-linux-gnu-

3.2 配置静态编译

# 生成默认.config
$ make  defconfig

# 设置busybox选项
$ make menuconfig

在编译选项中开启静态编译:

Settings  ---> 
        --- Build Options  
        [*] Build static binary (no shared libs)

3.3 编译 & 安装

make -j 8 && make install

编译完成后,会在busybox源码目录下生成_install文件。

四、制作ramdisk根文件系统

4.1 补全根目录

五、qemu启动最小系统

回到~目录,使用qemu启动创建好的img,也可以编写启动脚本:

#! /bin/sh
qemu-system-x86_64 -kernel ./linux-5.13.9/arch/x86_64/boot/bzImage -initrd ./busybox-1.34.0/rootfs.img.gz -append "root=/dev/ram init=/linuxrcS" -serial file:output.txt

保存为bootMiniLinux文件并授予执行权限:

chmod 777 bootMiniLinux

执行该脚本即可启动:

./bootMiniLinux

TroubleShoot

1.kernel panic

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值