Linux嵌入式驱动环境搭建
主机:Win11 家庭版
Linux:Ubuntu 22.04 WSL
开发板:100ask-MP157-PRO
任务
一、 NFS搭建
工欲善其事,必先利其器。一个方便快捷的开发环境才能更加方便的进行开发与学习。
在学习中,主机上的Linux环境选用WSL,其原因是启动快捷,并且功能比较齐全。而主机与开发板之间使用如SecureCRT之类的终端仿真工具进行设置。
对于WSL搭建NFS本身就是一件不容易的事情,WSL的网络设置很复杂,WSL 2与Windows是不同网段的,并且对于Windows家庭版是少了很多开发插件的,比如Hyper-v虚拟机的网络管理等;WSL 1与主机为相同ip,但在开发板挂载的时候很难找到共享的位置。但利用WSL 1的根目录在Windows系统中以目录的形式存放,并非像WSL 2将系统使用虚拟驱动封装,则可以退而求其次在Windows中搭建NFS。haneWIN NFS虽然不错,是收费软件。在此,发现了这篇文章中在Windows搭建NFS的工具——WinNFSd。
Windows10 WSL2搭建支持nfs的hi3518开发环境
https://zhuanlan.zhihu.com/p/349253238?utm_id=0
在文章中使用WSL 2,WSL会在/mnt/中挂载Windows中的硬盘,而作者将NFS搭建在/mnt/挂载的Windows硬盘中其本质也是在Windows中搭建的NFS。而WSL 1的根目录在WIndows文件系统中,则环境与作者所做的相似。WinNFSd下载地址。
下载WinNFSd.exe文件即可运行。
常用的使用方式:
WinNFSd.exe [-log off] <export path> [alias path]
在Linux中挂载:
mount -t nfs -o nolock,vers=3 <ip>:<export/alias path> <mount path>
选做:编写脚本
Windows
WinNFSd设置了环境变量以方便后续操作。

根据WinNFSd命令用例,编写脚本代码:
@echo off
WinNFSd -log off d:\<WSL path>\home\<user>\project /project
-log off 即关闭日志输出
这里对Linux内的目录进行搭建,并且因为目录名称过长,挂载的时候会很不方便,因此起了别名(/project)。
开发板
编写Shell脚本:
#!/bin/bash
mount -t nfs -o nolock,vers=3 <ip>:/project /mnt/nfs/
二、 以SSH连接开发板
NFS是通过网络传输的,而仿真终端是通过串口传输的,这时候想要使用开发板就需要连接串口线和网线两条线,非常非常不方便,要是能连接能够更加方便就好了。
因此使用SSH连接开发板,SSH依靠网络传输,即同时也能兼并NFS的挂载。因此静态设置主机和开发板网线端口的ip达到方便连接的效果。
对于Windows,对选中网络进行属性配置或网络适配器设置即可。
对于该开发板,根据开发手册,需要到/etc/systemd/network下创建50-static.network文件进行配置:
[Match]
Name=eth0
[Network]
Address=10.1.1.3/24
Gateway=10.1.1.1
然后重启开发板即可。
相互ping通即可,即Linux/Windows与开发板互ping,因为WSL 1与主机公用ip。
然后使用SSH连接:
三、 内核源码查看
WSL需要安装的基础软件:网络工具net-tools,C语言库gcc,编译工具make,交叉编译gcc-arm-linux-gnueabihf等等。
至于ide,使用了VSCode,在主机上安装了VSCode,WSL也可以使用。
VSCode安装CLang支持浏览以及编写C语言程序。(目测微软官方的C/C++插件也可以)
整个流程:首先安装CLang,如何编译内核,编译内核的同时生成compile_commands.json给CLang索引。
首先建立工作区,将Linux内核和驱动程序文件包含在工作区内,进行编译。
————————————————————更新————————————————————
2024年5月12日
灰字部分是原稿,目前关于环境变量的问题所在以及解决办法已经整理出来了,完成配置后下面的 ARCH 以及 CROSS_COMPILE 不需再要设置。
——————————————————————————————————————————
出现 "Kernel configuration is invalid." 的错误,是因为该内核文件未指定具体的系统设置。因开发板为100ask-STM32MP157,则找到 内核文件中./arch/arm/configs/100ask_stm32mp157_pro_defconfig 进行设置。
sudo make ARCH=arm 100ask_stm32mp157_pro_defconfig
题外话:怎么知道是这个路径的?因为没有指定ARCH参数时会指向x86,后面的配置基本就错了,然后报错在./arch/x86/configs/中找不到配置文件……
在期间可能会报错 "flex: not found.","bison: not found." 这据说是一些解释器,安装一下。
sudo apt install flex bison
根据手册,下一步开始编译内核。
sudo make ARCH=arm CROSS_COMPILE=/opt/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/arm-buildroot-linux-gnueabihf- uImage LOADADDR=0xC2000040
在编译内核的同时要生成compile_commands.json,这里使用 bear 生成。高版本 bear 需要在指令前加入 "--"。
sudo apt install bear
sudo bear -- make ARCH=arm CROSS_COMPILE=/opt/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/arm-buildroot-linux-gnueabihf- uImage LOADADDR=0xC2000040
可能有人问:为什么要加ARCH定环境?为什么CROSS_COMPILE要写这么长一串?
第一个问题,Makefile当中说明了,若在交叉编译的情况下需要指定ARCH否则会像上面一样检测为x86(即当前系统)。
第二个问题,在几次编译当中,都出现先了 "compiler 'arm-buildroot-linux-gnueabihf-gcc' not found" 或者是 "unrecognized argument in option ‘-mabi=aapcs-linux’." 的错误。前者是因为找不到指令,需要像上述语言完全的路径;后者是编译器使用了非交叉编译的编译器,需要加入CROSS_COMPILE进行指定。倒也不是因为没有设置环境变量的问题,CROSS_COMPILE以及PATH都设置了,用交叉编译工具还是可以正常运行的,但就是这里的make总是会出错,也是没有办法的办法吧,给有需要的人一个方案,当然也欢迎指正,后续如果排查出问题所在我会及时修改。

查看 compile_commands.json ,把下方 "gcc" 全部 更改为交叉编译工具,不然构建了索引也用不了(有时候生成的就是交叉编译,有时候是gcc,一旦后面文件引用不上就先看这里的问题)
cat compile_commands.json
//下方为在vi中修改指令
:%s/\/[path & gcc compiler]/\/[path & cross compiler]
![]()
————————————————————更新————————————————————
2024年5月12日
完成环境变量的设置后指令应为:
su
make 100ask_stm32mp157_pro_defconfig
make uImage LOADADDR=0xC2000040
bear -- make uImage LOADADDR=0xC2000040
同时,compile_commands.json 中的gcc替换为工具链的交叉编译 arm-buildroot-linux-gnueabihf-gcc 即可。
——————————————————————————————————————————
最后打开工作区,可以看到左下角正在建立索引。

当进行驱动项目开发时,在工作区中加入文件,并且 "bear -- make" 生成 compile_commands.json 即可。
参考文章
Windows10 WSL2搭建支持nfs的hi3518开发环境
make menuconfig错误: /bin/sh: 1: flex: not found 和 /bin/sh: 1: bison: not found-CSDN博客
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐
https://blog.csdn.net/2301_78517819/article/details/138745815

所有评论(0)