ubuntu源码编译busybox与linux内核并使用qemu-system-x86_64模拟启动

busybox 1.35.0 https://busybox.net/downloads/busybox-1.35.0.tar.bz2

sudo apt install make gcc libncurses-dev

编译配置:在busybox解压之后的目录下运行make menuconfig

1、Settings->Build static libary

2、两个工具包可以不用编译:

  Coreutils->sync

Linux System Utilities -> nsenter

    3、修改一个源码(可选),主要是支持显示中文的。libbb/printable_string.c

    31、32两行注释、45行,注释 || c >= 0x7f 

    4、之后运行make进行编译:出现如下所示信息,表示编译成功。

    这里一些提示Library m is needed,can't exclude it等等,可以不用担心。

    接着执行make install会将编译结果安装到_install目录下,:

    5、根据编译好的busybox制作根文件系统。 

cd _install
mkdir etc proc sys mnt dev tmp
mkdir -p etc/init.d
cat >> etc/fstab<<EOF
proc    /proc   proc    defaults        0       0
tmpfs   /tmp    tmpfs   defaults        0       0
sysfs   /sys    sysfs   defaults        0       0
EOF
cat>>etc/init.d/rcS<<EOF
echo "Welcome to linux..."
EOF
chmod 755 etc/init.d/rcS 
cat>>etc/inittab<<EOF
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
EOF
chmod 755 etc/inittab
cd dev
sudo mknod console c 5 1
sudo mknod null c 1 3
sudo mknod tty1 c 4 1

cd ..
sudo rm -rf rootfs.ext4 fs
dd if=/dev/zero of=./rootfs.ext4 bs=1M count=32
mkfs.ext4 rootfs.ext4
mkdir fs
sudo mount -o loop rootfs.ext4 ./fs
sudo cp -rf ./_install/* ./fs
sudo umount ./fs
gzip --best -c rootfs.ext4 > rootfs.img.gz

   linux 5.18 https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.18.tar.xz

    准备依赖环境 

sudo apt install flex bison libelf-dev libssl-dev

make x86_64_defconfig

   运行截图:
     

make menuconfig

    修改Device Drivers->Block devices->Ram block device support      选中RAM block device support,注意要让前面的选项变为*,而不是M。 Default RAM disk size设置为65535。

     make 就可以了,(第一次编译过程比较漫长),不需要make install

     下面这一步不是必须的,如果执行make提示有报错xt_mark.h文件找不到,可以把系统上xt_mark.h头文件复制到对应的目录下。

     /usr/include/linux/netfilter/xt_mark.h文件要复制到 include/uapi/linux/netfilter/下

qemu

sudo apt install qemu-system-x86

    安装完qemu-system-x86之后,系统中自带了qemu-system-x86_64命令,接着,我们使用qemu-system-x86_64模拟linux系统。 

qemu-system-x86_64 -nographic \ 
-kernel linux-5.18/arch/x86_64/boot/bzImage \
-initrd busy-box-1.35.0/rootfs.img.gz \
-append "root=/dev/ram rw rootfstype=ext4 console=ttyS0 init=/linuxrc"

    linux启动之后,加载根文件系统,最后成功进入命令行。 

    需要注意的几个地方:

    1、linux编译需要设置支持ram启动。

    2、busybox编译之后,生成镜像,需要指定文件系统类型为ext4,虽然可以让系统支持ext3,但是这个需要设置,系统默认的是ext4。

    3、运行最后一步,qemu模拟启动,如果出现io-apic + timer doesn't work,可以考虑在qemu启动命令的append参数中增加noapic或者no-timer-check。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值