主机:Win11家庭版
Linux:Ubuntu22.04WSL
开发板:100ask-MP157-PRO
任务
一、NFS搭建
工欲善其事,必先利其器。一个便捷快捷的开发环境能够愈加便捷的进行开发与学习。
在学习中,主机上的Linux环境选用WSL,其缘由是启动快捷,而且功能比较齐全。而主机与开发板之间使用如SecureCRT之类的终端仿真工具进行设置。
对于WSL搭建NFS本身就是一件不容易的事情,WSL的网路设置很复杂,WSL2与Windows是不同网关的,但是对于Windows家庭版是少了好多开发插件的,例如Hyper-v虚拟机的网路管理等;WSL1与主机为相同ip,但在开发板挂载的时侯很难找到共享的位置。但借助WSL1的根目录在Windows系统中以目录的方式储存,并非像WSL2将系统使用虚拟驱动封装,则可以退而求其次在Windows中搭建NFS。haneWINNFS似乎不错,是收费软件。在此,发觉了这篇文章中在Windows搭建NFS的工具——WinNFSd。
Windows10WSL2搭建支持nfs的hi3518开发环境
在文章中使用WSL2,WSL会在/mnt/中挂载Windows中的硬碟,而作者将NFS搭建在/mnt/挂载的Windows硬碟中其本质也是在Windows中搭建的NFS。而WSL1的根目录在WIndows文件系统中,则环境与作者所做的相像。WinNFSd下载地址。
Releases·winnfsd/winnfsd·GitHubContributetowinnfsd/winnfsddevelopmentbycreatinganaccountonGitHub.
下载WinNFSd.exe文件即可运行。
常用的使用方法:
WinNFSd.exe [-log off] [alias path]
在Linux中挂载:
mount -t nfs -o nolock,vers=3 :
选做:编撰脚本Windows
WinNFSd设置了环境变量以便捷后续操作。
按照WinNFSd命令用例,编撰脚本代码:
@echo off
WinNFSd -log off d:homeproject /project
-logoff即关掉日志输出
这儿对Linux内的目录进行搭建,但是由于目录名称过长,挂载的时侯会很不便捷,因而起了别称(/project)。
开发板
编撰Shell脚本:
#!/bin/bash
mount -t nfs -o nolock,vers=3 :/project /mnt/nfs/
二、以SSH联接开发板
NFS是通过网路传输的,而仿真终端是通过并口传输的,这时侯想要使用开发板就须要联接并口线和网线两条线,十分特别不便捷,要是能联接才能愈加便捷就好了。
因而使用SSH联接开发板,SSH借助网路传输,即同时也能兼并NFS的挂载。因而静态设置主机和开发板网线端口的ip达到便捷联接的疗效。
对于Windows,对选中网路进行属性配置或网路适配器设置即可。
网路属性配置
网路适配器设置
对于该开发板,依据开发指南,须要到/etc/systemd/network下创建work文件进行配置:
[Match]
Name=eth0
[Network]
Address=10.1.1.3/24
Gateway=10.1.1.1
之后重启开发板即可。
互相ping通即可,即Linux/Windows与开发板互ping,由于WSL1与主机公用ip。
之后使用SSH联接:
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不需再要设置。
Linux环境变量随谈-CSDN博客文章浏览阅读108次。将环境变量写入/etc/bash.bashrc(全局)或则~/.bashrc(指定用户)中保证环境变量被加载生效。
——————————————————————————————————————————
出现”Kernelconfigurationisinvalid.”的错误,是由于该内核文件未指定具体的系统设置。因开发板为100ask-STM32MP157,则找到内核文件中./arch/arm/configs/100ask_stm32mp157_pro_defconfig进行设置。
sudo make ARCH=arm 100ask_stm32mp157_pro_defconfig
正题:如何晓得是这个路径的?由于没有指定ARCH参数时会指向x86linux 虚拟主机linux使用教程,旁边的配置基本就错了,之后报错在./arch/x86/configs/中找不到配置文件……
在期间可能会报错”flex:notfound.”,”bison:notfound.”这听说是一些例程,安装一下。
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(即当前系统)。
第二个问题linux安装sdk环境,在几次编译当中,都出现先了”compiler'arm-buildroot-linux-gnueabihf-gcc'notfound”或则是”unrecognizedargumentinoption‘-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即可。
——————————————————————————————————————————
最后打开工作区,可以看见左下角正在构建索引。
当进行驱动项目开发时linux安装sdk环境,在工作区中加入文件,而且”bear--make”生成compile_commands.json即可。
参考文章
Windows10WSL2搭建支持nfs的hi3518开发环境
makemenuconfig错误:/bin/sh:1:flex:notfound和/bin/sh:1:bison:notfound-CSDN博客
编译Android源码和Linux内核源码时侯遇见的一些错误