WSL相关问题与解决
Table of Contents
WSL进行内核模块编程
[第一节] WSL2 内核编译/安装内核头文件/驱动调试_wsl2编译和安装内核以支持驱动编译_landaliming的博客-CSDN博客
- 查看当前系统的内核版本号
uname -r
5.4.72-microsoft-standard-WSL2
- 下载内核源码
去github下载对应的linux内核源码包
wget https://github.com/microsoft/WSL2-Linux-Kernel/archive/refs/tags/linux-msft-5.4.72.tar.gz
- 安装依赖库
先安装如下库,如果编译报错,再安装缺失的库
sudo apt-get install libelf-dev build-essential pkg-config
sudo apt-get install bison build-essential flex libssl-dev libelf-dev bc
- 编译安装
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安装新的内核
进入内核源码文件,增加系统调用例程 或者 更改内核源码之后,重新编译成新的内核并安装
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地址 | 网关 | 子网掩码 | |
---|---|---|---|
Windows | 172.19.240.1 | 172.19.255.255 | 255.255.240.0 |
WSL | 172.19.247.201 | 172.19.255.255 | 255.255.240.0 |