背景
windows中自带了ubuntu子系统,对于想学习和写linux驱动的同学来说,WSL2不能支持直接去编译驱动。原因,没有linux驱动编译依赖的源码和相关modules,在进一步的原因,WSL2没有提供源码。 (linux中存在源码时, /usr/src下是有对应的源码的)
操作
方案1
WSL2的安装、应用、内核模块编译安装_wsl2内核-CSDN博客
参考该帖子,可以完成源码的下载、编译、安装
这里不再演示。
写一个hello_world驱动,参考
Linux内核入门(二)Hello World 驱动程序_linux驱动hello world-CSDN博客
在编译linux驱动时,使用典型的makefile
make之后,发现环境上需要编译非常多的依赖KO
1、编译不方便,makefile也不是很通用,移植到其他嵌入式环境的时候,需要改动较多。
方案2
基于方案1,简单修改 (源码下载是一样的,主要是修改编译相关命令和Makefile文件)
一、编译源码
将编译的结果放到build文件中
sudo make KCONFIG_CONFIG=Microsoft/config-wsl -j$(nproc) O=build
sudo make KCONFIG_CONFIG=Microsoft/config-wsl modules_install -j$(nproc) O=build
sudo cp Microsoft/config-wsl build/.config
sudo make -j$(nproc) O=build
O=build : 将编译的结果与源码分开,build中全部为编译后的内容
二、修改makefile文件
指定KERN_DIR为源码编译后的路径
make没有任何问题。
移植到其他嵌入式环境上,只需要修改KERN_DIR路径, 配置CROSS_COMPILE