编译Linux内核及最⼩⽂件系统并运⾏
(Linux+busybox+roootfs+qemu)
⽬录
开发环境:ubuntu 20.04
linux源码版本:linux-5.10.36
busybox源码版本:busybox-1.33.1
qemu-system-x86_64版本:2.0.2
1.下载linux并编译linux内核源码
linux源码下载地址:
mirrors./pub/linux/kernel/
我选择的版本是:5.10.36
/pub/linux/kernel/v5.x/linux-5.10.
下载到本地,解压,然后进⼊linux-5.10.36⽬录:
1.指定硬件体系架构。
为了减少安装编译器的过程,我在本例中使⽤的是x86,因为我的开发环境就是x86。如果你要编译arm的内核,则指定ARCH=arm且需要安装交叉编译器。
# export ARCH=x86
2.配置board config,此处配置为 x86_64_defconfig。好了,我们点好菜了,菜单就是x86_64_defconfig
# make x86_64_defconfig
3.配置内核
这⼀步其实是对第2步的菜单进⾏微调,我们需要内核⽀持ramdisk驱动,所以需要选中如下配置:
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)
4.编译内核
# make
编译成功后的内核位于:arch/x86_64/boot/bzImage
2.编译busybox
下载buysbox源码,下载地址:
busybox/downloads/
我使⽤的版本是busybox-1.33.1
1.解压buysbox源码
# tar xvf busybox-1.33.1.tar.bz2
2.配置buysbox源码
在这⾥我们把busybox配置为静态编译,这样busybox在运⾏的时候就不需要额外的动态链接库了。
# make menuconfig
Busybox Settings --->
Build Options --->
[*] Build BusyBox as a static binary (no shared libs)
3.编译和安装
#make && make install
4.编译完成后的busybox就安装在源码根⽬录下的_install⽬录了,我们进⼊_install⽬录,补充⼀些必要的⽂件或⽬录,相关的shell命令如下:
# 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
这样⼀个最⼩的、完整的可以被内核启动的⽂件系统就齐活啦。
3.制作⼀个最⼩的根⽂件系统
制作根⽂件系统镜像⽂件。
思路:
1.先制作⼀个空的镜像⽂件;
2.然后把此镜像⽂件格式化为ext3格式;
3.然后把此镜像⽂件挂载,并把根⽂件系统复制到挂载⽬录;
4.卸载该镜像⽂件。
5.打成gzip包。
#!/bin/bash
rm -3
rm -rf fs
dd if=/dev/zero of=./3 bs=1M count=32
<3
mkdir fs
linux内核文件放在哪mount -o 3 ./fs
cp -rf ./_install/* ./fs
umount ./fs
gzip --best -3 >
最终⽣成的⽂件系统镜像名字为:
准备好了内核和⽂件系统镜像,幸福的⼀刻马上来临了:
4.qemu启动编译好的内核和根⽂件系统
通过qemu模拟器启动我们⾃⼰编译的内核和⽂件系统:
# qemu-system-x86_64 \
-kernel ./linux-5.10.36/arch/x86_64/boot/bzImage \
-initrd ./busybox-1.33.1/ \
-append "root=/dev/ram init=/linuxrc" \
-
serial
这样⼀个完整的最⼩linux系统就起来啦:
好了,经过以上的步骤,你可以⾃⼰编译⼀个内核和⽂件系统。有了这样的基础,你在之后就可以⾃由地修改linux内核代码并run起来进⾏验证啦。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论