一、 环境准备
需要下载相应的环境,以下提供了工具获取方法。建议源码编译安装,编译若少依赖就自行百度。官网都会有编译安装教程。
开发操作系统:
https://ubuntu.com/#download
linux源码获取:
kernel.org
busybox源码版本:
https://busybox.net/downloads/
qemu
https://www.qemu.org/
二、Linux源码编译
1.指定硬件体系架构。
目前使用的是x86,因为我的开发环境就是x86。如果你要编译arm的内核,则指定ARCH=arm且需要安装交叉编译器。
export ARCH=x86
2.配置board config,此处配置为 x86_64_defconfig。
make x86_64_defconfig
3.配置内核
此处可以有图形界面配置想要编译内核的模块
make menuconfig
这一步其实是对第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
三、buysbox编译并制作内核
1.解压buysbox源码
tar xvf busybox-xxxxx.tar.bz2
2.配置buysbox源码为静态编译
make menuconfig
Busybox Settings —>
Build Options —>
[*] Build BusyBox as a static binary (no shared libs)
3.编译和安装
make && make install
4.编译完成后的busybox就安装在源码根目录下的_install目录了,我们进入_install目录,补充一些必要的文件或目录,相关的shell命令如下:
cd _install
mkdir etc dev mnt
mkdir -p proc sys tmp
mkdir -p etc/init.d/
写fstab
vim etc/fstab
将下面信息写入
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
写rcS
vim etc/init.d/rcS
写入下面内容并保存
echo -e "Welcome to Linux"
/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
写inittab
vim 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
内核制作结束
四、制作根文件系统镜像文件
先回到busy-box的目录
cd ..
1.先制作一个空的镜像文件
2.然后把此镜像文件格式化为ext3格式
3.然后把此镜像文件挂载,并把根文件系统复制到挂载目录
4.卸载该镜像文件
5.打成gzip包
直接来个bash脚本
vim mkimg.sh
写入并保存
#!/bin/bash
rm -rf rootfs.ext3
rm -rf fs
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
执行
chmod 755 ./mkimg.sh
执行脚本
./mkimg.sh
就得到了文件系统镜像:rootfs.img.gz
五、qemu模拟器启动我们自己编译的内核和文件系统
下载qemu源码
解压进入目录
./configure --prefix=/opt/qemu
make
make install
启动内核
参数路径需要修改
/opt/qemu/bin/qemu-system-x86_64 -kernel /home/wdhh/linux-6.0-rc7/arch/x86_64/boot/bzImage -initrd /home/wdhh/busybox-1.35.0/rootfs.img.gz -append "root=/dev/ram init=/linuxrc" -serial file:output.txt
无图形界面的终端上可以使用
/opt/qemu/bin/qemu-system-x86_64 -kernel /home/wdhh/linux-6.0-rc7/arch/x86_64/boot/bzImage -initrd /home/wdhh/busybox-1.35.0/rootfs.img.gz -append "root=/dev/ram init=/linuxrc console=ttyS0" -serial mon:stdio -nographic
退出用
Ctrl - a x
大功造成哈哈哈哈哈哈