- 作者: 陈孝松
- 主页: chenxiaosong.com
- 哔哩哔哩: 陈孝松
- 课程: chenxiaosong.com/courses
- 博客: chenxiaosong.com/blog
- 贡献: chenxiaosong.com/contributions
- 邮箱: chenxiaosong@chenxiaosong.com
- QQ交流群: 544216206, 点击查看群介绍
点击这里在哔哩哔哩bilibili在线观看配套的加餐视频(就是一些补充)。
下面介绍Linux内核编译环境和测试环境的搭建过程,当然我也为各位朋友准备好了已经安装好的虚拟机镜像,只需下载运行即可。
点击这里从百度网盘下载对应平台的虚拟机镜像,x86_64
(也就是你平时用来安装windows系统的电脑,或者2020年前的苹果电脑)选择ubuntu-x64_64.zip
,arm64
(2020年末之后的苹果电脑)选择ubuntu-aarch64.zip
。虚拟机运行后,登录界面的密码是1
。
安装Linux发行版,你可以选择以下几种方式:
- 在物理机上直接安装安装Linux发行版。这是工作时比较推荐的一种安装方法,可以最大程度的利用硬件资源。
- 在容器(如docker)中安装Linux发行版。这种方式也能最大程度的利用硬件资源,还能快速恢复开发环境。
- 在虚拟机上安装Linux发行版。在学习阶段推荐这种方式安装,因为一旦系统出现什么问题可以快速恢复。
虚拟机软件
接下来介绍几个常用的虚拟机软件。Windows系统推荐使用VirtualBox,arm64苹果系统推荐使用UTM。如果你在看VMware虚拟机相关的视频,请转为查看这个视频
- VirtualBox。首先在VirtualBox下载界面下载对应平台的安装包,比如如果要在Windows系统下安装VirtualBox,点击Windows hosts下载安装包。VirtualBox的安装过程很简单,只需根据安装提示操作即可。VirtualBox安装完成后,下载VirtualBox 7.0.14 Oracle VM VirtualBox Extension Pack安装插件。arm芯片的版本好像只有7.0.8版本才有。
- VMware。下载点击这篇文章,注册登录账号,下载时的信息填写类似
Address 1: 1ONE, City: SACRAMENTO, Postal code: 94203-0001, Country/Territory: United States, State or province: California
。安装过程很简单,只需根据提示操作即可。Linux下安装VMware时需要注意的是/tmp
目录的挂载不能在/etc/fstab
文件中指定noexec
,还需要安装gcc较新的版本(如VMware-Workstation-Full-17.5.1-23298084.x86_64.bundle
在ubuntu2204下安装时要安装gcc12,默认安装的是gcc11)。 - Virtual Machine Manager。这个虚拟机软件只用在Linux平台上,如果你物理机上安装的操作系统是Linux,那么使用这个软件运行虚拟机就比较合适。比如在Ubuntu上使用命令
sudo apt-get install qemu qemu-kvm virt-manager qemu-system -y
安装(需要重启才能以非root用户启动)。 - UTM。只针对苹果电脑系统,从github下载安装包。建议在配置比较高(尤其是内存)的苹果电脑上使用,如果配置比较低可能会遇到一些问题。从github上下载安装包。导入虚拟机时,选择"创建一个新虚拟机" -> “虚拟化” -> “其他” -> 打勾"Skip ISO boot",“Storage"选择小一点的容量(如
1G
),创建虚拟机后打开配置,“VirtIO驱动器” -> “删除”,然后再"新建” -> “导入”,可以选择vmdk
或qcow2
等格式,会统一转换成qcow2
格式,保存后生效。安装后的虚拟机文件在~/Library/Containers/com.utmapp.UTM/Data/Documents
目录下,默认Finder中不显示这个目录,可以在家目录下打开Show View Options -> Show Library Folder
。需要注意一下,网络如果选择共享网络
会出现不稳定断网的情况,建议选择桥接(高级)
,选择桥接
时如果宿主机的网络切换了(如连了另一个wifi)虚拟机中的网络也要断开重连一下。如果出现虚拟机网络经常断开的情况,可以尝试宿主机换一个稳定的网络。
配置虚拟机时,Windows系统cpu核数查看方法: 任务管理器->性能->CPU,苹果电脑cpu核数查看方法: sysctl hw.ncpu
或sysctl -n machdep.cpu.core_count
,Linux系统cpu核数查看方法lscpu
。
安装Ubuntu发行版
Linux发行版很多,我们选择一个使用人数相对较多的Ubuntu发行版。x86_64的ubuntu22.04,arm64的ubuntu22.04下载。x86_64的ubuntu20.04,arm64的ubuntu20.04
安装内核编译和测试所需软件:
sudo apt install git -y # 代码管理工具
sudo apt install build-essential -y # 编译所需的常用软件,如gcc等
sudo apt-get install qemu qemu-kvm qemu-system -y # qemu虚拟机相关软件
sudo apt-get install virt-manager -y # docker中不需要安装,虚拟机图形界面,会安装iptables,可能需要重启才能以非root用户启动virt-manager,当然对于内核开发来说安装这个软件是为了生成自动生成virbr0网络接口
sudo apt install flex bison bc kmod pahole -y # 内核编译所需软件
sudo apt-get install libelf-dev libssl-dev libncurses-dev -y # 内核源码编译依赖的库
sudo apt install zstd -y
交叉编译所需软件:
sudo apt-get install u-boot-tools -y
sudo apt install gcc-9-aarch64-linux-gnu -y # 指定版本的交叉编译软件
mv /usr/bin/aarch64-linux-gnu-gcc /usr/bin/aarch64-linux-gnu-gcc.bak # 原来指向其他版本
ln -s /usr/bin/aarch64-linux-gnu-gcc-9 /usr/bin/aarch64-linux-gnu-gcc # 指向特定版本
docker环境
除了在vmware虚拟机中搭建开发环境,还可以在docker中搭建开发环境。注意qemu的权限配置请参考后面的“qemu配置”相关的章节。
NAT模式
参考中文翻译QEMU Documentation/Networking/NAT。
qemu命令行的网络参数修改成(model
和macaddr
可以自己指定):
-net tap \
-net nic,model=virtio,macaddr=00:11:22:33:44:01 \
注意在虚拟机中,不要手动配置ip,要运行systemctl restart networking.service
自动获取ip地址。
桥接模式(TODO)
宿主机中桥接模式配置:
apt install bridge-utils -y # brctl命令
brctl addbr br0
brctl stp br0 on
brctl addif br0 eth0
# brctl delif br0 eth0
ip addr del dev eth0 172.17.0.2/16 # 清除ip
ifconfig br0 172.17.0.2/16 up # 或 ifconfig virbr0 172.17.0.2 netmask 172.17.0.1 up
route add default gw 172.17.0.1
sysctl net.ipv4.ip_forward=1 # 或 echo 1 > /proc/sys/net/ipv4/ip_forward
虚拟机中:
ip addr add 172.17.0.3/16 dev ens2
# ip addr del dev ens2 172.17.0.3/16 # 删除ip
ip link set dev ens2 up
# ip link set dev ens2 down
# 网关可不配置
# route del default dev ens2
# route add default gw 172.17.0.1 # ip route add default via 172.17.0.1 dev ens2
手动配置ip没法访问外网,暂时还不知道要怎么弄,如果有知道的朋友可以指导我一下。