ubuntu 下如何编译linux 内核制作iso启动镜像?

准备工作:

##了解内核基本知识:https://zhuanlan.zhihu.com/p/555359377

安装必备

apt-get install gcc make ncurses-devel openssl-devel
apt-get install libncurses5-dev libncursesw5-dev flex bison libssl-dev libelf-dev bc

参考:https://zhuanlan.zhihu.com/p/535657060 升级gcc

yum install centos-release-scl
yum install devtoolset-8

参考:https://blog.youkuaiyun.com/qq_23922117/article/details/118308618?spm=1001.2014.3001.5501
参考: https://blog.youkuaiyun.com/qq_23922117/article/details/118338648
https://www.xiexianbin.cn/linux/kernel/build-kernel-and-busybox/index.html?to_index=1
https://blog.youkuaiyun.com/wdhh6/article/details/127104980

下载内核源码

linux-5.10.60

查下版本

gcc -v
gcc version 5.4.0 20160609

开始

tar zxvf linux-5.12.13.tar.gz
cd linux-5.12.13
make O=out_x86_64 x86_64_defconfig
make O=out_x86_64 menuconfig

make O=out_x86_64 bzImage -j4
General setup  --->
    ----> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
Device Drivers  --->
    [*] Block devices  --->
		<*>   RAM block device support
        (16)    Default number of RAM disks
        (65536) Default RAM disk size (kbytes)

(65536) Default RAM disk size (kbytes) 是关键啊。

busybox

2,Busybox
a,下载Busybox

下载地址: https://busybox.net/downloads/

下载的是busybox-1.33.1

b,配置busybox

make menuconfig
Busybox Settings  --->
    Build Options  --->
        [*] Build BusyBox as a static binary (no shared libs)

#编译
make -j4
 
make install
#安装,执行则会在busybox源码目录下生成_install文件夹

,制作文件系统
a,创建文件夹

mkdir rootfs
cp -fr ./busybox-1.33.1/_install/* ./rootfs/
cd rootfs/
mkdir dev etc lib64 mnt opt proc root sys tmp var home
sudo cp /lib/x86_64-linux-gnu/* ./rootfs/lib64/
sudo rm rootfs/lib64/*.a
sudo strip rootfs/lib64/*
sudo mknod rootfs/dev/tty1 c 4 1
sudo mknod rootfs/dev/tty2 c 4 2
sudo mknod rootfs/dev/tty3 c 4 3
sudo mknod rootfs/dev/tty4 c 4 4
sudo mknod rootfs/dev/console c 5 1
sudo mknod rootfs/dev/null c 1 3

配置rcS

mkdir ./rootfs/etc/init.d
vim ./rootfs/etc/init.d/rcS

添加如下内容,然后保存退出:

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
/bin/mount -a   #挂载fstab文件中所有指定的文件系统
echo /sbin/mdev>/proc/sys/kernel/hotplug
mdev -s                 #在/dev目录下建立必须的设备节点
/bin/hostname -F /etc/sysconfig/HOSTNAME

配置inittab

vim ./rootfs/etc/inittab

添加如下内容,然后保存退出:

::sysinit:/etc/init.d/rcS   #设置内核的热插拔,有mdev接收来自内核的消息并做出响应
::askfirst:-/bin/sh         #在串口启动一个登陆会话
::ctrlaltdel:/sbin/reboot   #作为init重启执行程序
::restart:/sbin/init
::showdown:/bin/mount       #告诉init在关机时运行umount命令卸载所有文件系统,如果卸载失败,以只读方式重新挂载

配置fstab

vim ./rootfs/etc/fstab

下面文件分隔符为tab,不是空格。

proc    /proc   proc    defaults    0   0
sysfs   /sys    sysfs   defaults    0   0
tmpfs   /tmp    tmpfs   defaults    0   0

配置profile
vim ./rootfs/etc/profile

添加如下内容,然后保存退出:

#/etc/profile:system-wide .profile file for the Bourne shells
#!/bin/sh
#vim:syntax=sh
#No core file by defaults
#ulimit -S -c 0>/dev/null 2>&1
USER="id -un"
LOGNAME=$USER
PS1='[root@tshark]#'
PATH=$PATH
HOSTNAME='/bin/hostname'
export USER LOGNAME PS1 PATH

制作文件系统

cd ./rootfs/
ln -sv bin/busybox init
find . | cpio -H newc -o | gzip -9 -n > ../initrd.gz

制作iso
a,建文件夹,并把bzImage和initrd.gz复制进去:

mkdir iso
cp linux-5.10.60/out_x86_64/arch/x86_64/boot/bzImage ./iso/
cp ./initrd.gz ./iso/

下载syslinux源码: syslinux-4.00-pre1.tar.bz2

https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/Testing/
我下载的是4.0,因为这个版本,我能编译成功,先安装一个依赖:

sudo apt install nasm
make -j4
cp ./syslinux-4.00-pre1/core/isolinux.bin ./iso/

编辑boot配置文件

cd ./iso/
vim isolinux.cfg
display miniLinux
prompt 1
default 1
 
# Boot other devices
label a
    localboot 0x00
 
# PC-DOS
label 1
    kernel bzImage
    append initrd=initrd.gz
sudo apt install genisoimage
mkisofs -o miniLinux.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ./iso

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值