
开发环境搭建 要进行Linux驱动开发肯定要先搭建好开发环境,我们在开始学习STM32单片机的时候肯定需要安装一堆的软件,比如MDK、IAR、串口调试助手等等,这个就是STM32的开发环境搭建。同样的,要想在Ubuntu下进行Cortex-A(STM32MP157)开发也需要安装一些软件,也就是网上说的开发环境搭建,环境搭建好以后我们就可以进行开发了。环境搭建分为Ubuntu和Windows,因为我们最熟悉Windows,所以代码编写、查找资料啥的肯定是在Windows下进行的。但是Linux开发又必须在Ubuntu下进行,所以还需要搭建Ubuntu下的开发环境,主要是交叉编译器的安装,本章我们就分为Ubuntu和Windows,讲解这两种操作系统下的环境搭建。 0 t! x5 \" h1 i; O. ?: l9 y 4.1 Ubuntu和Windows文件互传) I: l: L; A+ h 在开发的过程中会频繁的在Windows和Ubuntu下进行文件传输,比如在Windwos下进行代码编写,然后将编写好的代码拿到Ubuntu下进行编译。Windows和Ubuntu下的文件互传我们需要使用FTP服务,设置方法如下: 1、开启Ubuntu下的FTP服务8 k1 p9 i! z1 M! A5 Z/ O 打开Ubuntu的终端窗口,然后执行如下命令来安装FTP服务: sudo apt-get install vsftpd2 p+ z0 D. q, s4 ]* \ 等待软件自动安装,安装完成以后使用如下VI命令打开/etc/vsftpd.conf,命令如下:' C1 R6 r! D5 J) y sudo vi /etc/vsftpd.conf; g9 Q' A a4 T. [ 打开以后vsftpd.conf文件以后找到如下两行: j2 X; e5 o1 N1 U. \" x/ X6 H local_enable=YES write_enable=YES9 F2 r5 ~! P$ f" g 确保上面两行前面没有“#”,有的话就取消掉,完成以后如图4.1.1所示:/ D5 _, Z* c0 |; A8 {7 z0 S ![]() 图4.1.1 vsftpd.conf修改6 ~& d2 y7 W# y6 ]- I9 t& X4 q 修改完vsftpd.conf以后保存退出,使用如下命令重启FTP服务:' ?3 A; S9 Z5 b0 k4 A sudo /etc/init.d/vsftpd restart: \! x% o( j- x: d& J 2、Windows下FTP客户端安装 Windows下FTP客户端我们使用FileZilla,这是个免费的FTP客户端软件,可以在FileZilla官网下载,下载地址如下:下载界面如图4.1.2所示: ![]() 图4.1.2 FileZilla软件下载 如果是32位电脑就选择32位版本,64位电脑就选择64位版本,我们已经下载好了64位版本的FileZilla并放到开发板光盘中了,路径为:3、软件-> FileZilla_3.51.0_win64-setup.exe,双击安装即可。安装完成以后找到安装目录,找到图标,然后发送图标快捷方式到桌面,完成以后如图4.1.3所示: ![]() |5 {2 D" s1 v, E0 I# K( `/ P 图4.1.3 FileZilla图标6 G- t; K# a; a$ ` 打开FileZilla软件,界面如图4.1.4所示: ![]() 图4.1.4 FileZilla软件界面 3、FileZilla软件设置 Ubuntu作为FTP服务器,FileZilla作为FTP客户端,客户端肯定要连接到服务器上,打开站点管理器,点击:文件->站点管理器,打开以后如图4.1.5所示:% q) s2 O5 W% Y $ g6 D* K- q# ^! V1 j. T ![]() 图4.1.5 站点管理器 A v: p- o( R* a8 I 点击图4.1.5中的“新站点(N)”按钮来创建站点,新建站点以后就会在“我的站点”下出现新建的这个站点,站点的名称可以自行修改,比如我将新的站点命名为“Ubuntu”如图4.1.6所示:1 V! ~- o I& U1 k9 R0 E ; u5 w6 f2 B+ a2 c ![]() - f6 j. K7 P, n( }6 O! d 图4.1.6 新建站点# ^5 i* }; f: r' b) z6 c 选中新创建的“Ubuntu”站点,然后对站点的“常规”进行设置,设置如图4.1.7所示:5 S1 x9 b$ F% D+ K6 ?+ p( W1 C ![]() 图4.1.7 站点设置9 w: f& \' m/ D0 T9 Z: J- A4 }8 m 按照图4.1.7中设置好以后,点击“连接”按钮,第一次连接可能会弹出提示是否保存密码的对话框,点击确定即可。连接成功以后如图4.1.8所示: ![]() 图4.1.8 连接成功 `- l; u1 q* ^6 L9 U0 r 连接成功以后如图4.1.8所示,其中左边就是Windows文件目录,右边是Ubuntu文件目录,默认进入用户根目录下(比如我电脑的“/home/zuozhongkai”)。但是注意观察在图4.1.8中Ubuntu文件目录下的中文目录都是乱码的,这是因为编码方式没有选对,先断开连接,点击:服务器(S)->断开连接,然后打开站点管理器,选中要设置的站点“Ubuntu”,选择“字符集”,设置如图4.1.9所示: ![]() y2 n8 e; O6 [2 g7 K+ R 图4.1.9 设置字符集 按照图4.1.9设置好字符集以后重新连接到FTP服务器上,重新链接到FTP服务器以后Ubuntu下的文件目录中文显示就正常了,如图4.1.10所示: 1 Q/ Y% _ p5 r ![]() ) b3 ]. ?1 Z+ {0 a; A1 i* Y/ G' K 图4.1.10 Ubuntu下文件目录中文显示正常 如果要将Windows下的文件或文件夹拷贝到Ubuntu中,只需要在图4.1.10中左侧的Windows区域选中要拷贝的文件或者文件夹,然后直接拖到右侧的Ubuntu中指定的目录即可。将Ubuntu中的文件或者文件夹拷贝到Windows中也是直接拖放。9 ^6 W3 [: Y, U$ I7 M 4.2 Ubuntu下NFS和SSH服务开启 F( t; S* V( a 4.2.1 NFS服务开启0 V2 ]0 l: t, n) O3 y 后面进行Linux驱动开发的时候需要NFS启动,因此要先安装并开启Ubuntu中的NFS服务,使用如下命令安装NFS服务: sudo apt-get install nfs-kernel-server rpcbind H0 X- Y2 L0 p9 m3 R4 {1 J9 i ] 等待安装完成,安装完成以后在用户根目录下创建一个名为“linux”的文件夹,以后所有的东西都放到这个“linux”文件夹里面,在“linux”文件夹里面新建一个名为“nfs”的文件夹,如图4.2.1所示: 9 [3 I8 B$ c( n5 Y) h ![]() $ W# g! Z' n# Q- b 图4.2.1 创建linux工作目录4 N3 j ?, Q' D7 g; ~ 图4.2.1中创建的nfs文件夹供nfs服务器使用,以后我们可以在开发板上通过网络文件系统来访问nfs文件夹,要先配置nfs,使用如下命令打开nfs配置文件/etc/exports:$ p+ o' j4 L5 q# r( ^) x sudo vi /etc/exports2 e' J9 _- l: U- Q1 O* G- S 打开/etc/exports以后在后面添加如下所示内容:/ @2 i& c1 M$ B4 ? /home/zuozhongkai/linux/nfs *(rw,sync,no_root_squash)! ^* B& M$ G4 Z2 P 添加完成以后的/etc/exports如图4.2.2所示: ![]() 图4.2.2 修改文件/etc/exports" ]; S, B5 |9 @' ]2 ~ 重启NFS服务,使用命令如下:7 @7 _! n) L& a- y) {- I0 H sudo /etc/init.d/nfs-kernel-server restart 4.2.2 SSH服务开启7 m% M% I! U- { J. y 开启Ubuntu的SSH服务以后我们就可以在Windwos下使用终端软件登陆到Ubuntu,比如使用SecureCRT,Ubuntu下使用如下命令开启SSH服务:9 t# l4 ]" V( @9 O6 s3 Z$ X$ C5 D sudo apt-get install openssh-server 上述命令安装ssh服务,ssh的配置文件为/etc/ssh/sshd_config,使用默认配置即可。$ }4 [) s; W6 x 4.3 Ubuntu交叉编译工具链安装% _) ]6 g, Y+ f! s 4.3.1 交叉编译器安装% G4 t% ~- v* n" @- @5 ` ARM裸机、Uboot移植、Linux移植这些都需要在Ubuntu下进行编译,编译就需要编译器,我们在第三章“Linux C编程入门”里面已经讲解了如何在Liux进行C语言开发,里面使用GCC编译器进行代码编译,但是Ubuntu自带的gcc编译器是针对X86架构的!而我们现在要编译的是ARM架构的代码,所以我们需要一个在X86架构的PC上运行,可以编译ARM架构代码的GCC编译器,这个编译器就叫做交叉编译器,总结一下交叉编译器就是:( C/ ?; Y& e+ u 1、它肯定是一个GCC编译器。 2、这个GCC编译器是运行在X86架构的PC上的。 3、这个GCC编译器是编译ARM架构代码的,也就是编译出来的可执行文件是在ARM芯片上运行的。 交叉编译器中“交叉”的意思就是在一个架构上编译另外一个架构的代码,相当于两种架构“交叉”起来了。 交叉编译器有很多种,ST也有推荐的通用交叉编译器,如图4.3.1所示: 7 K, ^) }& ?# N. F ![]() 图4.3.1 ST推荐的通用交叉编译器 从图4.3.1可以看出,ST推荐了两款通用交叉编译器,一个是ARM官方出品的:gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf,一个是linaro出品的:gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz,本教程我们使用ARM官方出品的交叉编译器。* s4 E1 ^( ^# a- b0 g 首先是下载ARM官方出品的交叉编译器,图4.3.1中也给出了交叉编译器的下载链接:编译器下载地址如下:打开以后如图4.3.2所示: ) q. H- E/ e1 Y1 V) l. [ ![]() ) j9 O {% J% N 图4.3.1.2 ARM官方交叉比编译器下载界面 图4.3.1.2中的gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz是在64位Ubuntu下使用的交叉编译器。交叉编译器我们已经下载好放到了开发板光盘中,路径:开发板光盘5、开发工具1、交叉编译器gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz。& m7 @3 M7 s% F7 h/ U+ `1 S1 @$ E 注意!直接从ARM官方下载的交叉编译器在编译TF-A的时候会报错没有stm32wrapper4dbg这命令,后面会讲解如何解决这个问题。2 |; e. |' K3 ?5 T# ]6 V, G 我们要先将交叉编译工具拷贝到Ubuntu中,在4.2.1小节中我们在当前用户根目录下创建了一个名为“linux”的文件夹,在这个linux文件夹里面再创建一个名为“tool”的文件夹,用来存放一些开发工具。使用前面已经安装好的FileZilla将交叉编译器拷贝到Ubuntu中刚刚新建的“tool”文件夹中,操作如图4.3.1.3所示: ![]() & C" a) m) O7 J9 V& F0 w. A4 z* F 图4.3.1.3 拷贝交叉编译器 拷贝完成的话FileZilla会有提示,如图4.3.1.4: 6 x6 F5 B, |$ B( M$ d ![]() . \1 n. O9 E3 _1 H4 _4 c% p6 B# _ 图4.3.1.4 交叉编译器拷贝完成9 ~) H, V, f4 H8 H5 S' K 在Ubuntu中创建目录:/usr/local/arm,命令如下: sudo mkdir /usr/local/arm 创建完成以后将刚刚拷贝的交叉编译器复制到/usr/local/arm这个目录中,在终端使用命令“cd”进入到存放有交叉编译器的目录,比我前面将交叉编译器拷贝到了目录“/home/zuozhongkai/linux/tool”中,然后使用如下命令将交叉编译器复制到/usr/local/arm中:: i3 k8 ?4 B0 g6 K sudo cp gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz /usr/local/arm/ -f" s& Z D9 n* z2 S 拷贝完成以后在/usr/local/arm目录中对交叉编译工具进行解压,解压命令如下: sudo tar -vxf gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz& A0 j# ~0 ^* m 等待解压完成,解压完成以后会生成一个名为“gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf”的文件夹,这个文件夹里面就是我们的交叉编译工具链。 修改环境变量,使用打开/etc/profile文件,命令如下:4 j: H7 I/ v6 D' ~+ ^& s+ w$ _ sudo vi /etc/profile 打开/etc/profile以后,在最后面输入如下所示内容:/ E h; S' r5 ]$ m export PATH=$PATH:/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin3 s; n( S2 d b$ u+ C 添加完成以后的/etc/profile如图4.3.1.5所示:% J# t1 Z w4 [2 Y- c ; t& p7 o, U( z/ I" i ![]() , a, T# w! H4 M% H 图4.3.1.5 添加环境变量# N! V( [( }" b, e 修改好以后就保存退出,重启Ubuntu系统,交叉编译工具链(编译器)就安装成功了。 4.3.2 安装相关库: K; U- }% t+ R9 X 在使用交叉编译器之前还需要安装一下其它的库,命令如下:8 i% Q: R: G& J+ T4 X9 x# C$ `6 V sudo apt-get update //先更新,否则安装库可能会出错 sudo apt-get install lsb-core lib32stdc++6 //安装库6 Y) S" L/ E; B4 Y: O# O6 ] 等待这些库安装完成。 4.3.3 交叉编译器验证 首先查看一下交叉编译工具的版本号,输入如下命令: arm-none-linux-gnueabihf-gcc -v0 z. P- K8 L6 C( l7 i5 K* s 如果交叉编译器安装正确的话就会显示版本号,如图4.3.3.1所示:8 c5 y+ o+ o# j ![]() 图4.3.3.1 交叉编译器版本查询 从图4.3.3.1中可以看出当前交叉编译器的版本号为9.2.1,说明交叉编译工具链安装成功。第三章“Linux C编程入门”中使用Ubuntu自带的GCC编译器,我们用的是命令“gcc”。要使用刚刚安装的交叉编译器的时候使用的命令是“arm-none-linux-gnueabihf-gcc”,“arm-none-linux-gnueabihf-gcc”的含义如下:: B+ ], o3 T6 j+ X, ] L 1、arm表示这是编译arm架构代码的编译器。- X( x4 L2 ]: b/ X' W+ \% f' @: y6 t 2、none表示厂商,一般半导体厂商会修改通用的交叉编译器,此处就是半导体厂商的名字,ARM自己做的交叉编译这里为none,表示没有厂商。7 ], b, R- V6 m9 t! D% y1 X 3、linux表示运行在linux环境下。4 ~3 r5 v0 g! w: E# d6 I 4、gnueabihf表示嵌入式二进制接口,后面的hf是hard float的缩写,也就是硬件浮点,说明此交叉编译工具链支持硬件浮点。 5、gcc表示是gcc工具。7 x2 ~! q& l6 L3 H2 N 4.4 Visual Studio Code软件的安装和使用 4.4.1 Visual Studio Code的安装 Visual Stuio Code是一个编辑器,可以用来编写代码,Visual Studio Sode本教程以后就简称为VSCode,VSCode是微软出的一款免费编辑器。VSCode有Windows、Linux和macOS三个版本的,是一个跨平台的编辑器。VSCode下载地址是:https://code.visualstudio.com/,下载界面如图4.5.1.1所示:1 z7 J4 _; w0 a( p% u" p 8 p' Q' m8 R5 A) h6 D: r ![]() 图4.5.1.1 VSCode下载界面 在图4.5.1.1中下载自己想要的版本,本教程需要Windows和Linux这两个版本,所以下载这两个即可,我们已经下载好并放入了开发板光盘中,路径为:3、软件->Visual Studio Code。 1、Windows版本安装' t5 u6 s# r6 _: `3 B1 O* G+ w0 ? Windows版本的安装和容易,和其他Windows一样,双击.exe安装包,然后一路“下一步”即可,安装完成以后在桌面上就会有VSCode的图标,如图4.5.1.2所示: + z5 _( m V9 u/ `( j8 B ![]() 图4.5.1.2 VSCode图标$ {4 n1 R0 A& t, }* f8 o 双击图4.5.1.2打开VSCode,默认界面如图4.5.1.3所示: ![]() 图4.5.1.3 VSCode默认界面1 E) t e$ Z" S8 s# z" M* R) o+ o- ] 2、Linux版本安装6 |: _; a9 X2 W0 [& m 我们有时候也需要在Ubuntu下阅读代码,所以还需要在Ubuntu下安装VSCode。Linux下的VSCode安装包我们也放到了开发板光盘中, 将开发板光盘中的.deb软件包拷贝到Ubuntu系统中,然后使用如下命令安装: sudo dpkg -i code_1.50.1-1602600906_amd64.deb" F* M9 e* ] C7 ^ 等待安装完成,如图4.5.1.4所示:2 ^5 F& M6 S$ q t! O; z/ q 6 T( g, v; K( U8 l% B: O* d/ c ![]() * u8 z, `7 o6 n6 q, i 图4.5.1.4 VSCode安装过程 安装完成以后搜索“Visual Studio Code”就可以找到,如图4.5.1.5所示: ![]() 图4.5.1.5 Visual Studio Code" T6 r& K0 ~" c* h: W& c% g2 w2 e 每次打开VSCode都要搜索,太麻烦了,我们可以将图标添加到Ubuntu桌面上,安装的所有软件图标都在目录/usr/share/applications中,如图4.5.1.6所示: ! V; w8 ^0 D" z: }2 Z ![]() ) B( B6 J8 P4 Z3 V 图4.5.1.6 软件图标 在图4.5.1.6中找到Visual Studio Code的图标,然后点击鼠标右键,选择复制到->桌面,如图4.5.1.7所示:3 x* y; U( H; x4 e! K7 _ - z. _8 T2 R, T7 V) P ![]() 图4.5.1.7 复制图标到桌面+ u- ?6 I. R( I; B7 }# d 按照图4.5.1.7所示方法将VSCode图标复制到桌面,第一次双击的时候会提示“未信任的应用程序启动器”,如图4.5.1.8所示: / \. R) ~' {8 Q- w ![]() ?9 h, V* B- X 图4.5.1.8 “未信任的应用程序启动”对话框% A2 p" G3 g& X5 O+ t% M0 O 点击图4.5.1.8中的“Trust and Launch”,选择信任即可。以后就可以直接双击图标打开VSCode,Ubuntu下的VSCode打开以后如图4.5.1.9所示:5 E$ W2 m) B: h ![]() 图4.5.1.9 Linux下的VSCode 可以看出Linux下的VSCode和Windows下的基本是一样的,所以使用方法也是一样的。7 K3 v! |' ~4 J2 V 4.5.2 Visual Studio Code插件的安装1 H+ q O" k @# u! e VSCode支持多种语言,比如C/C++、Python、C#等等,本教程我们主要用来编写C/C++程序的,所以需要安装C/C++的扩展包,扩展包安装很简单,如图4.5.2.1所示:' F4 s- x6 ^1 W3 ^2 j) M( M7 r5 X* ^ , i! v) k" K5 S ![]() / s3 ]4 L9 S. x' s 图4.5.2.1 VSCode插件安装 我们需要按照的插件有下面几个: 1)、C/C++,这个肯定是必须的。7 ?. x3 f% v3 n! M: s 2)、C/C++ Snippets,即C/C++重用代码块。2 |9 {+ j# I }# f 3)、C/C++ Advanced Lint,即C/C++静态检测 。4 ] p, x: h, `$ s; |# ^& u 4)、Code Runner,即代码运行。 5)、Include AutoComplete,即自动头文件包含。$ X4 e5 R5 [3 I# C 6)、Rainbow Brackets,彩虹花括号,有助于阅读代码。 7)、One Dark Pro,VSCode的主题。. ]7 H3 F, ^& [+ R 8)、GBKtoUTF8,将GBK转换为UTF8。0 i2 G1 f& K% f 9)、ARM,即支持ARM汇编语法高亮显示。5 _% F/ d7 X9 P5 R7 n 10)、Chinese(Simplified),即中文环境。 11)、vscode-icons,VSCode图标插件,主要是资源管理器下各个文件夹的图标。, B: I* o# X1 R1 m# N0 N& R 12)、compareit,比较插件,可以用于比较两个文件的差异。 13)、DeviceTree,设备树语法插件。 14)、TabNine,一款AI自动补全插件,强烈推荐,谁用谁知道!$ C; k/ {; d/ F" h 安装完成以后重新打开VSCode,如果要查看已经安装好的插件,可以按照图4.5.2.2所示方法查看: ![]() * B5 {$ j7 h; o& F0 o( E. \/ A 图4.5.2.2 显示已安装的插件 由于我们已经安装了中文插件,因此重新打开VSCode以后就会是中文界面了,如图4.5.2.3所示: ! n3 R8 K" J, o% {+ T6 x ![]() 图4.5.2.3 VSCode中文环境 F- `5 m$ e, B7 W/ f0 }, O 4.5.3 Visual Studio Code新建工程 新建一个文件夹用于存放工程,比如我新建了文件夹目录为E:\VScode_Program\1_test,路径尽量不要有中文和空格打开VSCode。然后在VSCode上点击文件->打开文件夹…,选刚刚创建的“1_test”文件夹,打开以后如图4.5.3.1所示: ![]() 图4.5.3.1 打开的文件夹 从图4.5.3.1可以看出此时的文件夹“1_TEST”是空的,点击文件->将工作区另存为…,打开工作区命名对话框,输入要保存的工作区路径和工作区名字,如图4.5.3.2所示:" K2 g( h( ]; S5 r" I 3 H6 _- d9 I7 f3 {" V( r5 [0 v ![]() 图4.5.3.2 工作区保存设置- m# J& s' f9 `: S2 X/ u 工作区保存成功以后,点击图4.5.3.1中的“新建文件”按钮创建main.c和main.h这两个文件,创建成功以后VSCode如图4.5.3.3所示:; U G3 x9 q6 E- R+ B7 N9 I! \7 f ![]() - F3 J- X9 |6 a; x1 @ 图4.5.3.2 新建文件以后的VSCode6 }' a y& \, n/ i, c 从图4.5.3.2可以看出,此时“实验1 TEST”中有.vscode文件夹、main.c和main.h,这三个文件和文件夹同样会出现在“实验1 test”文件夹中,如图4.5.3.3所示: ; A1 x+ Z# V! _" ^" e/ T0 f# K ![]() 2 N% g: y- C! X- A, |: ^ 图4.5.3.3 实验文件夹: C/ x& S! `* N 在main.h中输入如下所示内容:: j: q, ^" H2 E! u* z' u( W5 a 示例代码4.5.3.1 main.h文件代码
代码编辑完成以后VSCode界面如图4.5.3.4所示:; d# v0 K* Z2 P" g ![]() 8 L# z: c9 T9 u4 { 图4.5.3.4 代码编辑完成以后的界面4 V, J7 W. R* e6 j 从图4.5.3.4可以看出,VSCode的编辑的代码高亮很漂亮,阅读起来很舒服。但是此时提示找不到“stdio.h”这个头文件,如图4.5.3.5所示错误提示:; E% l" w# l" S6 J 在这里插入图片描述. U p7 W, F, ~ z$ ~; R; l 0 _" K4 [! h3 ]" D* r+ m% V ![]() 图4.5.3.5 头文件找不到。 图4.5.3.5中提示找不到“main.h”,同样的在main.h文件中会提示找不到“stdio.h”。这是因为我们没有添加头文件路径。按下“Ctrl+Shift+P”打开搜索框,然后输入“Edit configurations”,选择“C/C++:Edit configurations…”,如图4.5.3.6所示: ![]() + j$ {# Y( \4 F- J3 i4 M; B 图4.5.3.6 打开C/C++编辑配置文件8 n+ n5 o; g0 `% f- G+ c C/C++的配置文件是个json文件,名为:c_cpp_properties.json,此文件默认内容如图4.5.3.7所示: ![]() 图4.5.3.7 文件c_cpp_properties.json内容 ]2 G# S7 @, j7 j$ H4 O1 j' t c_cpp_properties.json中的变量“includePath”用于指定工程中的头文件路径,但是“stdio.h”是C语言库文件,而VSCode只是个编辑器,没有编译器,所以肯定是没有stdio.h的,除非我们自行安装一个编译器,比如CygWin,然后在includePath中添加编译器的头文件。这里我们就不添加了,因为我们不会使用VSCode来编译程序,这里主要知道如何指定头文件路径就可以了,后面有实际需要的时候再来讲。 我们在VScode上打开一个新文件的话会覆盖掉以前的文件,这是因为VSCode默认开启了预览模式,预览模式下单击左侧的文件就会覆盖掉当前的打开的文件。如果不想覆盖的话采用双击打开即可,或者设置VSCode关闭预览模式,设置如图4.5.3.8所示: ![]() 图4.5.3.8 取消预览. J" ~! a/ [5 f6 u) L 我们在编写代码的时候有时候会在右下角有如图4.5.3.9所示的警告提示:& S: ^3 L& n4 I( p% S# E0 \' \" G( ? ![]() 7 p" V. c5 Z/ t/ ~6 d7 s" f 图4.5.3.9 错误提示 这是因为插件C/C++ Lint打开了几个功能,我们将其关闭就可以了,顺便也可以学习一下VSCode插件配置方法,如图4.5.3.10所示:/ O9 S6 N& ?# o. a. d0 r+ h# l7 @ ![]() " S1 [; m+ N. L8 Z ![]() 1 C+ W, I% U0 {9 Y! V 图4.5.3.10 C/C++ Lint配置界面' L# {! [. k- {* K 在C/C++ Lint配置界面上找到CLang:Enable、Cppcheck:Enable、Flexlint:Enable这个三个,然后取消掉勾选即可,如图4.5.3.11所示:- h, N4 Q: Q8 y( }$ z; p & ?- Q2 L6 b! R2 ]6 c ![]() 图4.5.3.11 C/C++ Lint配置 按照图4.5.3.11所示取消这三个有关C/C++ Lint的配置以后就不会有图4.5.3.9所示的错误提示了。但是关闭Cppcheck:Enable以后VSCode就不能实时检查错误了,大家根据实际情况选择即可。" t" z, q2 S; S' g4 k4 W/ b5 \+ Q+ N0 N ———————————————— 版权声明:正点原子! W4 P5 [; L' z- J/ h) L ) [& l0 q9 o4 u" v! y |
基于STM32MP1和STM32MP2在嵌入式Linux平台上部署有效的安全保护机制
利用STM32MP1和STM32MP2为嵌入式Linux提供有效的安全措施:供当今决策者参考的3条宝贵经验
STM32MP1 WiFi连接
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【STM32MPU 安全启动】 TF-A BL2 TrustedBoot原理学习
《STM32MPU安全启动》学**结
《STM32MPU安全启动》学习笔记之optee 如何加载CORTEX-M核和使能校验
《STM32MPU安全启动》学习笔记之TF-A BL2校验optee和uboot的流程以及如何使能
《STM32MPU 安全启动》课程学习心得+开启一扇通往嵌入式系统安全领域深处的大门。
《STM32MPU安全启动》 课程学习心得