准备工作:
##了解内核基本知识: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