虚拟机ubuntu18.04编译linux内核,busybox,制作最小系统

首先在分配系统内存建议不低于50g,默认20g编译后会停下来报错

先把一些包,依赖提前下好

sudo apt-get install  libncurses5-dev openssl libssl-dev libelf-dev zlibc minizip
sudo apt-get install build-essential openssl pkg-config libc6-dev bison flex libidn11-dev libidn11 dwarves lzop

将压缩包解压到指定路径

sudo tar -xavf linux-6.5.6.tar.xz -C /usr/src

cd /usr/src/linux-6.5.6 

清除编译过程产生的中间文件,将内核代码还原为刚解压的状态,最好每次编译前执行一下。

5.清除上次编译产生的中间文件。

sudo make mrproper
sudo make clean

6.配置编译参数,编译的内核模块选择。

sudo make menuconfig

出现.config文档后->save生成config文档,按 “下箭头” 到 Exit ,回车。

编辑.config文档

sudo gedit .config

CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem" 

改为 CONFIG_SYSTEM_TRUSTED_KEYS=""

CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem"

改为 CONFIG_SYSTEM_REVOCATION_KEYS=""

7.编译内核。2表示编译时用几个线程编译,最大不要超过CPU个数的两倍。也可直接使用sudo make编译。

sudo make -j2   

这个命令执行后需要很久很久很久,具体多久取决于电脑性能等。

8.安装内核模块,驱动等。

sudo make modules_install   
sudo make install

需要一点时间,但不会太久。 

9.接着依次输入命令。

sudo mkinitramfs /lib/modules/6.5.6 –o /boot/initrd.img-6.5.6-generic
sudo update-initramfs -c -k 6.5.6
sudo update-grub2

重启查看

sudo reboot

uname -a

2023-10-24改

sudo apt-get install curl

gedit start.sh

将下面内容粘贴进去

# download code 

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

# export ARCH=x86

# unzip Kernel

tar xf linux-4.9.229.tar.xz

cd linux-4.9.229

# install curses

sudo apt-get install libncurses5-dev

# make x86_64_defconfig

#

cd ..

curl https://busybox.net/downloads/busybox-1.30.0.tar.bz2 -o busybox-1.30.0.tar.bz2

#

tar xf busybox-1.30.0.tar.bz2
 

会得到两个文件夹

先编译linux-4.9.229内核

cd linux-4.9.229

进入root用户

sudo su

export ARCH=x86

make  x86_64_defconfig

make menuconfig

General setup  --->

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

    Device Drivers  --->

       [*] Block devices  --->

               <*>   RAM block device support

               (65536) Default RAM disk size (kbytes)

 make -j2

 编译成功后的内核位于:arch/x86_64/boot/bzImage

在这里我们把busybox配置为静态编译,这样busybox在运行的时候就不需要额外的动态链接库了。

make menuconfig 

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

 make && make install

 编译且安装

# mkdir etc dev mnt
# mkdir -p proc sys tmp mnt
# mkdir -p etc/init.d/
# gedit etc/fstab
proc        /proc           proc         defaults        0        0
tmpfs       /tmp            tmpfs      defaults        0        0
sysfs       /sys            sysfs        defaults        0        0
# gedit 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
# gedit etc/inittab
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::ctrlaltdel:/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

 这样一个最小的、完整的可以被内核启动的文件系统就齐活啦。

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

 sudo apt-get 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 console=ttyS0" -serial mon:stdio -nographic

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值