WSL相关问题与解决

Keywords: #技术 #WSL #linux
Table of Contents

WSL进行内核模块编程

[第一节] WSL2 内核编译/安装内核头文件/驱动调试_wsl2编译和安装内核以支持驱动编译_landaliming的博客-CSDN博客

  1. 查看当前系统的内核版本号

uname -r

5.4.72-microsoft-standard-WSL2

  1. 下载内核源码

去github下载对应的linux内核源码包

wget https://github.com/microsoft/WSL2-Linux-Kernel/archive/refs/tags/linux-msft-5.4.72.tar.gz

  1. 安装依赖库

先安装如下库,如果编译报错,再安装缺失的库

sudo apt-get install libelf-dev build-essential pkg-config
sudo apt-get install bison build-essential flex libssl-dev libelf-dev bc
  1. 编译安装
tar xvf WSL2-Linux-Kernel-linux-msft-5.4.72.tar.gz 
cd WSL2-Linux-Kernel-linux-msft-5.4.72/
zcat /proc/config.gz > .config
make -j $(nproc)
sudo make -j $(nproc) modules_install

安装后会看到 /lib/modules/5.4.72-microsoft-standard-WSL2 目录下相关文件指到了源码所在的目录

接着就可以进行内核的模块编程

WSL安装新的内核

为你的WSL 2编译一个最新的Linux内核吧!

进入内核源码文件,增加系统调用例程 或者 更改内核源码之后,重新编译成新的内核并安装

make KCONFIG_CONFIG=Microsoft/config-wsl -j 16

编译完成后的内核镜像存放为 arch/x86/boot/bzImage 文件,将其重命名为 kernel,并拷贝到win 10中

在C:\user[用户名]目录下,增加WSL配置文件,.wslconfig,在文件中指定内核路径为新生成的内核(win10路径)

[wsl2]
kernel=D:\\WSL\\kali-linux\\bzImage

在CMD中执行:

wsl --shutdown

关闭WSL,并重新启动,检查内核版本,发现内核已更新。

WSL与主机进行局域网通信

【精选】同一局域网下windows主机和wsl子系统相互网络服务访问_局域网访问wsl-CSDN博客

正常来说,WSL和主机之间的局域网通信,只能是单向的,主机可以ping通WSL,但是WSL却无法访问主机。

接下来是解决的办法

在WSL中,查询WSL的IP地址:

ip addr | grep eth0

WSL的网卡是eth0

python -m http.server 8080启动服务,在主机端是可以访问的

接着就是在Windows中操作。

以管理员打开powershell,输入指令:

New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow

同时在WSL中输入:

cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }'

这时候就出现了一个IP,这个就是主机的IP地址,通过这个地址可以访问主机

同样在主机上python -m http.server 8080 启动服务,在WSL端是可以访问到的

IP地址网关子网掩码
Windows172.19.240.1172.19.255.255255.255.240.0
WSL172.19.247.201172.19.255.255255.255.240.0