mac下用qemu编译执行linux/kernel

主要参考

使用 qemu 搭建内核开发环境 - 离小木 - 博客园

主要涉及以下几个点:

  • virtualbox6.1下运行ubuntu server 18.04,然后打开ssh server,用于mac主机访问。否则virtualbox那个屏幕不能自动缩放真是辣眼睛。因为需要一个linux来编译kernel,直接在mac上编译估计没那么容易。
sudo apt-get install openssh-server

主机配置port forwarding。

 

  • 在虚拟机上下载linux kernel进行编译。

我是通过wget在The Linux Kernel Archives上面下载5.10.88的源文件。下载之后主要通过以下几条命令,编译得到bzImage和*ko文件。

make x86_64_defconfig
make bzImage
make modules
  • 除了kernel之外,还需要根文件系统才能让qemu boot一个可以访问的linux。用以下命令制作根文件系统。第一条命令相当于创建了一个磁盘,mkfs将它格式化并建立ext4的文件系统。第三条命令将这个磁盘挂载到/home/tianyxu/img,这个img目录不能是mac-virtualbox的共享文件夹,否则会报类似以下错误。第四条命令就是将模块安装到磁盘上。
    mount: /media/sf_SharedFolder/testout: can't read superblock on /dev/loop0"
qemu-img create -f raw disk.raw 512M
mkfs -t ext4 ./disk.raw
sudo mount -o loop ./disk.raw /home/tianyxu/img
sudo make modules_install \ # 安装内核模块
INSTALL_MOD_PATH=/home/tianyxu/img  # 指定安装路径
  • 在mac和virtualbox下共享文件。

在mac和virtualbox之间共享文件可以通过virtualbox/linux界面的device->share folders进去设置。设置完成之后需要在linux上挂载相应的文件夹。我在mount的时候还遇到了一个问题。https://medium.com/macoclock/share-folder-between-macos-and-ubuntu-4ce84fb5c1ad

通过安装virtualbox-guest-utils解决sudo apt-get install virtualbox-guest-utils。

mount: wrong fs type, bad option, bad superblock …. or helper program, or other error

sudo mount -t vboxsf linux2001 /mnt/mac
  • 给根文件系统添加init程序。编译安装和配置busybox。init的程序主要有3种,sysv init,systemd,busybox。我们选用常用于嵌入式的busybox。用过以下几条命令在linux下配置和编译busybox。
make defconfig # use default config

make manuconfig # make a little change
Busybox Settings --->
       --- Build Options
       [*] Build BusyBox as a static binary (no shared libs)

make # compile busybox

make CONFIG_PREFIX=<path_to_disk_img_mount_point> install # install to the root fs
  • busybox init启动之后会扫描/etc/inittab配置文件。这个配置文件会定义相应的行为。如果没有这个文件,init会按如下定义工作。
::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
::restart:/sbin/init
tty2::askfirst:/bin/sh
tty3::askfirst:/bin/sh
tty4::askfirst:/bin/sh

 为了能正常在qemu下工作,我们删掉最后三行。并配置/etc/init.d/rcS为“#!/bin/sh”。

  • 之后就可以正常启动啦,但是文件系统是一个只读的系统。有待下一步探索。
tianyxu@TIANYXU-M-V83Z linux2001 % qemu-system-x86_64 \
-m 512M \
-smp 4 \
-kernel ./bzImage \
-drive format=raw,file=./disk.raw \
-append "init=/linuxrc root=/dev/sda"


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值