你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32MP1嵌入式Linux驱动开发指南V1.7-开发环境搭建

[复制链接]
STMCU小助手 发布时间:2022-9-27 15:17
开发环境搭建5 e1 U4 h' l3 g: f" C) w
要进行Linux驱动开发肯定要先搭建好开发环境,我们在开始学习STM32单片机的时候肯定需要安装一堆的软件,比如MDK、IAR、串口调试助手等等,这个就是STM32的开发环境搭建。同样的,要想在Ubuntu下进行Cortex-A(STM32MP157)开发也需要安装一些软件,也就是网上说的开发环境搭建,环境搭建好以后我们就可以进行开发了。环境搭建分为Ubuntu和Windows,因为我们最熟悉Windows,所以代码编写、查找资料啥的肯定是在Windows下进行的。但是Linux开发又必须在Ubuntu下进行,所以还需要搭建Ubuntu下的开发环境,主要是交叉编译器的安装,本章我们就分为Ubuntu和Windows,讲解这两种操作系统下的环境搭建。7 [$ O: \) y: H- M& u  n; z, W, b6 Y. q

  e' N" W% l! T. z* P) I3 C4.1 Ubuntu和Windows文件互传8 l7 i$ p8 v& ]4 c0 D9 j
在开发的过程中会频繁的在Windows和Ubuntu下进行文件传输,比如在Windwos下进行代码编写,然后将编写好的代码拿到Ubuntu下进行编译。Windows和Ubuntu下的文件互传我们需要使用FTP服务,设置方法如下:. k9 ?( G' Q8 A' G+ x7 y8 g; `
1、开启Ubuntu下的FTP服务2 v% v4 E# y9 H  d$ k
打开Ubuntu的终端窗口,然后执行如下命令来安装FTP服务:
( m* G! ?4 v! E4 f. [sudo apt-get install vsftpd
- d, a. x! Z) L0 N( n等待软件自动安装,安装完成以后使用如下VI命令打开/etc/vsftpd.conf,命令如下:
7 d3 A' K$ P0 \" J+ M( Z5 Tsudo vi /etc/vsftpd.conf5 P. c# w. `1 {3 ?" P. C4 o
打开以后vsftpd.conf文件以后找到如下两行:8 s, |, Z- D. L# e2 x" O
local_enable=YES1 G* e- j) Y* V' ]3 S
write_enable=YES4 t6 C1 N6 A! V9 G3 }
确保上面两行前面没有“#”,有的话就取消掉,完成以后如图4.1.1所示:
. s( r, p/ M$ q5 N. T$ A* \
0 L8 [) ?* e( C1 ` 3bf98c0b08674716bb554a99535949af.png ; m0 v" ^2 S/ _
8 i0 U' v' l, V8 y, J  E
图4.1.1 vsftpd.conf修改
# ^4 Z. k1 B8 Y) C* o. x修改完vsftpd.conf以后保存退出,使用如下命令重启FTP服务:
8 r" H% m8 z( H' U+ t  Csudo /etc/init.d/vsftpd restart
, t4 b/ h1 T" q% z, I7 d2、Windows下FTP客户端安装
2 @- C& B* r5 c) ~: N5 eWindows下FTP客户端我们使用FileZilla,这是个免费的FTP客户端软件,可以在FileZilla官网下载,下载地址如下:下载界面如图4.1.2所示:% T. Y; s' Q5 j7 o/ m# s
8 U: \4 n$ P$ R( D
4455a4a5cf0946a7ad676ac285c81caa.png " Y- C( }! G% s# ]1 k7 N, k2 ~
% m! d0 l: U+ \1 u8 q
图4.1.2 FileZilla软件下载( G, p) L1 u6 f& I; n# {6 G8 A; J
如果是32位电脑就选择32位版本,64位电脑就选择64位版本,我们已经下载好了64位版本的FileZilla并放到开发板光盘中了,路径为:3、软件-> FileZilla_3.51.0_win64-setup.exe,双击安装即可。安装完成以后找到安装目录,找到图标,然后发送图标快捷方式到桌面,完成以后如图4.1.3所示:
# Y# n* a6 @1 C% H4 K/ }" L& I% S0 h1 X7 e# Z! ~: H! V
deeef14041f848e8a3ba1cc3ab12b8cb.png / _" R" q0 z/ Z* W0 K5 `  }
) p+ J$ h! R2 R0 s4 m" J9 `. U
图4.1.3 FileZilla图标; C; K4 q7 M5 e6 Z5 [9 c
打开FileZilla软件,界面如图4.1.4所示:1 j% Z; g0 H1 P2 W
4 D* N. C4 g5 X* i+ W( ]5 B' X
e391b9a265f34c708ef0e5856830c3a8.png 2 d# @/ G  E# k8 Z& R

+ U6 C& _. H, b. u/ g. v图4.1.4 FileZilla软件界面
2 p3 _  G! O4 X6 v3 P6 F3、FileZilla软件设置/ ~% `* ^+ U+ g( Q: S
Ubuntu作为FTP服务器,FileZilla作为FTP客户端,客户端肯定要连接到服务器上,打开站点管理器,点击:文件->站点管理器,打开以后如图4.1.5所示:
, R) U' C3 a9 ^; ~8 X0 X/ O* S2 `& a9 U2 X* M: P
c813ba5d2c19411e90571822ad28cc6b.png
8 W% D* o7 G+ g" R7 M* E4 y; u; v
图4.1.5 站点管理器
: C6 h6 Z+ v' j' y& x点击图4.1.5中的“新站点(N)”按钮来创建站点,新建站点以后就会在“我的站点”下出现新建的这个站点,站点的名称可以自行修改,比如我将新的站点命名为“Ubuntu”如图4.1.6所示:5 w) l% k- ?( |% a8 O
+ r6 j6 }2 w2 Q& ?/ l
7d1d70c5cf5a4e549d8fb213cea59c6a.png 1 }( U% [7 `- @) c+ N& |: e

7 W$ \  @# w0 K图4.1.6 新建站点+ U4 u3 [: \$ T- J. e
选中新创建的“Ubuntu”站点,然后对站点的“常规”进行设置,设置如图4.1.7所示:
; u3 \! l* P& B* ~* C
- B. u; S  N3 n" m# i4 ~! H 77e77d5fba2a4bd18b142e670b23884c.png
- r# q* c; V6 k8 s1 n8 g: S' }. b4 l5 ]. X2 d
图4.1.7 站点设置
' J# n+ P% n' x( _按照图4.1.7中设置好以后,点击“连接”按钮,第一次连接可能会弹出提示是否保存密码的对话框,点击确定即可。连接成功以后如图4.1.8所示:. ^) _1 ]8 J0 {, K8 N

( i& A4 |/ e1 L* `' _. O 41491410d82044cf9e25c9770f4b2d1b.png # l" v" N6 m! S* e/ {7 ]/ C
7 y% W; F4 s+ T' x# ?0 D* q
图4.1.8 连接成功$ O8 n. E: g- y0 Z0 g$ _
连接成功以后如图4.1.8所示,其中左边就是Windows文件目录,右边是Ubuntu文件目录,默认进入用户根目录下(比如我电脑的“/home/zuozhongkai”)。但是注意观察在图4.1.8中Ubuntu文件目录下的中文目录都是乱码的,这是因为编码方式没有选对,先断开连接,点击:服务器(S)->断开连接,然后打开站点管理器,选中要设置的站点“Ubuntu”,选择“字符集”,设置如图4.1.9所示:
3 _9 m- K& s) E- y
1 ?* y( J/ K' ^8 O c28531b164964746b92476a3b8fb03df.png
( i, }! b) h8 O3 ?5 Q, r) K( W2 \' Z4 p) u7 M* F
图4.1.9 设置字符集# x) q% i- {# P, t+ q2 a6 v0 w; A
按照图4.1.9设置好字符集以后重新连接到FTP服务器上,重新链接到FTP服务器以后Ubuntu下的文件目录中文显示就正常了,如图4.1.10所示:
4 Q( ^! Y7 y1 b' W9 z
/ Q3 V! I) Y" o0 j- D4 u fc40b47ce5bb447cb8d33cf73c851467.png 2 b8 V5 w  ]7 a" V  R1 M
4 f  z  k/ D% R: o
图4.1.10 Ubuntu下文件目录中文显示正常% I$ f' w6 _, L% F8 K) A
如果要将Windows下的文件或文件夹拷贝到Ubuntu中,只需要在图4.1.10中左侧的Windows区域选中要拷贝的文件或者文件夹,然后直接拖到右侧的Ubuntu中指定的目录即可。将Ubuntu中的文件或者文件夹拷贝到Windows中也是直接拖放。
- `( \% N  c# B; v& _4.2 Ubuntu下NFS和SSH服务开启% b& [$ g9 s+ b* n' l# r) ?
4.2.1 NFS服务开启( H  S/ F% k1 E; x( u2 |
后面进行Linux驱动开发的时候需要NFS启动,因此要先安装并开启Ubuntu中的NFS服务,使用如下命令安装NFS服务:% y+ n+ C( P: o$ j  M( ^
sudo apt-get install nfs-kernel-server rpcbind) A2 |3 L+ R, r) ]1 d
等待安装完成,安装完成以后在用户根目录下创建一个名为“linux”的文件夹,以后所有的东西都放到这个“linux”文件夹里面,在“linux”文件夹里面新建一个名为“nfs”的文件夹,如图4.2.1所示:
5 G5 M4 |* R7 o1 i# ^+ V9 G' t/ s
0 S/ z% f' N( _& P5 Z6 F 6bb4375e403840dc921d825755ca6daa.png
  x! z% F9 Z9 h# x! }* ^( _/ N# z9 l3 ~6 R( X2 P& T% f+ ]* }
图4.2.1 创建linux工作目录
! d1 t7 N) o7 O7 U6 N. y/ E图4.2.1中创建的nfs文件夹供nfs服务器使用,以后我们可以在开发板上通过网络文件系统来访问nfs文件夹,要先配置nfs,使用如下命令打开nfs配置文件/etc/exports:2 J3 b0 @! _+ A3 j1 `/ @4 n" \- F
sudo vi /etc/exports' P# |& W* F2 L
打开/etc/exports以后在后面添加如下所示内容:
9 e" `; ^0 Z4 k5 f; T- V# |4 h/home/zuozhongkai/linux/nfs *(rw,sync,no_root_squash)/ d, r1 F# s4 X$ n4 _
添加完成以后的/etc/exports如图4.2.2所示:( K& z4 y8 n8 Z& u, o% e. F& v

" a. P9 f( b4 X/ j) c/ ]! _ 4324fcc80b154eb9b6f591643e88e1ba.png
  {( _. h! A: [4 h0 I% j6 Y; ?, v8 g9 G# n2 o! U/ ]
图4.2.2 修改文件/etc/exports6 b5 ?" B% G, g" s. K* a
重启NFS服务,使用命令如下:
- P$ c, a, J' B; o& b; V5 usudo /etc/init.d/nfs-kernel-server restart
0 e. y$ _% s1 N! M. |4.2.2 SSH服务开启/ C$ q; j9 S" N' b, l  Y3 M! G* t
开启Ubuntu的SSH服务以后我们就可以在Windwos下使用终端软件登陆到Ubuntu,比如使用SecureCRT,Ubuntu下使用如下命令开启SSH服务:* Q! K/ \0 N* C1 Q
sudo apt-get install openssh-server4 q2 |8 D" F! T" ?
上述命令安装ssh服务,ssh的配置文件为/etc/ssh/sshd_config,使用默认配置即可。+ s2 _  M/ |) o" _
4.3 Ubuntu交叉编译工具链安装7 E% t' h; X/ g) w$ V: ]8 ?6 r
4.3.1 交叉编译器安装
( g9 }( P6 u& x* C7 [; X% W! x* o  ]ARM裸机、Uboot移植、Linux移植这些都需要在Ubuntu下进行编译,编译就需要编译器,我们在第三章“Linux C编程入门”里面已经讲解了如何在Liux进行C语言开发,里面使用GCC编译器进行代码编译,但是Ubuntu自带的gcc编译器是针对X86架构的!而我们现在要编译的是ARM架构的代码,所以我们需要一个在X86架构的PC上运行,可以编译ARM架构代码的GCC编译器,这个编译器就叫做交叉编译器,总结一下交叉编译器就是:4 a4 s+ b( n$ k0 Y4 c3 Y) L
1、它肯定是一个GCC编译器。
. p7 W) d: Y4 K3 L' O) z. R2、这个GCC编译器是运行在X86架构的PC上的。. q3 {; w' j) C
3、这个GCC编译器是编译ARM架构代码的,也就是编译出来的可执行文件是在ARM芯片上运行的。( B2 ?$ z% j! i) ?' T. X+ X
交叉编译器中“交叉”的意思就是在一个架构上编译另外一个架构的代码,相当于两种架构“交叉”起来了。
6 O% o& J# n" G2 g/ g- f) i交叉编译器有很多种,ST也有推荐的通用交叉编译器,如图4.3.1所示:
4 [" j4 j# @( [3 C( y( U& P+ V
) H, y# z+ n0 V  v2 D" n' N b1d044dd741b4691b9713d417b941fb4.png 1 j2 ^4 g7 e' y# S$ [" Z

1 R7 Z4 w9 `  V! \7 P' x- P图4.3.1 ST推荐的通用交叉编译器( x4 N8 {/ |- m" V
从图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官方出品的交叉编译器。) F! L1 v0 E/ T& e( \/ B
首先是下载ARM官方出品的交叉编译器,图4.3.1中也给出了交叉编译器的下载链接:编译器下载地址如下:打开以后如图4.3.2所示:% G$ j2 {% m) k
1 x5 {$ {$ W6 o$ C9 t$ m
c6a749592712485e837a67302c35104b.png ) \4 t1 I; Y! X0 T2 _

0 ~: v+ G2 t) P& Z8 D' s3 I图4.3.1.2 ARM官方交叉比编译器下载界面" \/ L1 G2 i+ f* p% u) }+ {, ?3 @: W# O# `
图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。% S( `# q7 n- Q
注意!直接从ARM官方下载的交叉编译器在编译TF-A的时候会报错没有stm32wrapper4dbg这命令,后面会讲解如何解决这个问题。, \: A: N- h0 I& ?7 n
我们要先将交叉编译工具拷贝到Ubuntu中,在4.2.1小节中我们在当前用户根目录下创建了一个名为“linux”的文件夹,在这个linux文件夹里面再创建一个名为“tool”的文件夹,用来存放一些开发工具。使用前面已经安装好的FileZilla将交叉编译器拷贝到Ubuntu中刚刚新建的“tool”文件夹中,操作如图4.3.1.3所示:
) h5 J6 s6 y; @1 Q8 F  G3 E  K, k/ W# |, e& _; g
cefdfabb2dea48b498f739a7bad05f0c.png ; \1 T. x; J5 d4 L6 `
- O% ?% _# Q: D' E; ]% u
图4.3.1.3 拷贝交叉编译器* n% w4 z- k7 L% f
拷贝完成的话FileZilla会有提示,如图4.3.1.4:
  `" X! w- D/ ]: o
3 |% \/ M4 T* a+ a5 w; x# c 5c368d9b467241f698754e9890640d81.png # w. ]  n7 U1 P) y) l
% y8 P, d) B/ a- q9 I1 T6 A, L
图4.3.1.4 交叉编译器拷贝完成/ _! x- K  U: n; _1 g8 m7 ]
在Ubuntu中创建目录:/usr/local/arm,命令如下:2 R) n- b+ \$ [0 C) M
sudo mkdir /usr/local/arm, ~# o" v% Z' V! i) a5 l
创建完成以后将刚刚拷贝的交叉编译器复制到/usr/local/arm这个目录中,在终端使用命令“cd”进入到存放有交叉编译器的目录,比我前面将交叉编译器拷贝到了目录“/home/zuozhongkai/linux/tool”中,然后使用如下命令将交叉编译器复制到/usr/local/arm中:
% e2 M4 P7 {5 }* S+ Lsudo cp gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz /usr/local/arm/ -f
+ k. y: w+ ?- |- t9 K1 k拷贝完成以后在/usr/local/arm目录中对交叉编译工具进行解压,解压命令如下:7 i1 i! F5 C- E6 E1 d$ _
sudo tar -vxf gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz4 U" N2 x' \5 n6 S! K
等待解压完成,解压完成以后会生成一个名为“gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf”的文件夹,这个文件夹里面就是我们的交叉编译工具链。0 o- V7 T0 j% L% B
修改环境变量,使用打开/etc/profile文件,命令如下:
- a; I$ X$ [5 ^; E' G) rsudo vi /etc/profile
/ i! x( |1 A, [7 S( Q打开/etc/profile以后,在最后面输入如下所示内容:
- e$ M* C% H6 W) {( s* jexport PATH=$PATH:/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin) |5 p, c6 h6 Z4 {$ J& o6 b
添加完成以后的/etc/profile如图4.3.1.5所示:
& N+ C: n$ n7 m+ H% X
# P1 k. Z# M$ b7 T) G- } 27cd603908834aa7a8a17a5cbdadbc92.png
- g+ v1 u! @* L, m
* h! l9 p% B+ u图4.3.1.5 添加环境变量1 T- x* q( s4 i, n
修改好以后就保存退出,重启Ubuntu系统,交叉编译工具链(编译器)就安装成功了。5 ^: k# Z' ]/ L) S1 {  S
4.3.2 安装相关库5 A# m4 |. J5 e$ M- p
在使用交叉编译器之前还需要安装一下其它的库,命令如下:
2 F$ X. A8 B4 S; l0 {# T+ C' O* Bsudo apt-get update //先更新,否则安装库可能会出错7 c# m- Q' p0 ^
sudo apt-get install lsb-core lib32stdc++6 //安装库
" d* Z4 q  K* f等待这些库安装完成。& X7 G- {7 J. G* J1 q% K& _
4.3.3 交叉编译器验证4 g3 }% |- Q* j3 t
首先查看一下交叉编译工具的版本号,输入如下命令:. ~* G- f% Q* H" v. S
arm-none-linux-gnueabihf-gcc -v
9 e3 V) w( a, ^( X5 a- J0 b6 ~如果交叉编译器安装正确的话就会显示版本号,如图4.3.3.1所示:+ c/ ^; N6 s1 U" O0 H, W
1 V( l7 Z) F, [0 f- a9 @
281d1e1694304c1a850c814c649a885f.png
- N6 _8 g* H$ R+ @( d5 Z7 d6 c# i: I: m  }' `
图4.3.3.1 交叉编译器版本查询
4 A: i) z3 l7 W/ d1 O' Z' [从图4.3.3.1中可以看出当前交叉编译器的版本号为9.2.1,说明交叉编译工具链安装成功。第三章“Linux C编程入门”中使用Ubuntu自带的GCC编译器,我们用的是命令“gcc”。要使用刚刚安装的交叉编译器的时候使用的命令是“arm-none-linux-gnueabihf-gcc”,“arm-none-linux-gnueabihf-gcc”的含义如下:
' l2 C, ~* r) A2 W" M1、arm表示这是编译arm架构代码的编译器。( V( R* s) i8 J8 R: |, o) E
2、none表示厂商,一般半导体厂商会修改通用的交叉编译器,此处就是半导体厂商的名字,ARM自己做的交叉编译这里为none,表示没有厂商。' H2 j5 R) C' M0 c0 U6 a( [
3、linux表示运行在linux环境下。
6 D. m. w1 n0 f6 e7 `3 x" F4、gnueabihf表示嵌入式二进制接口,后面的hf是hard float的缩写,也就是硬件浮点,说明此交叉编译工具链支持硬件浮点。
9 v( Y3 h8 F6 A, F5 q6 ?8 J% n5、gcc表示是gcc工具。2 f8 F' d6 L6 D9 V" p0 h
4.4 Visual Studio Code软件的安装和使用
% u8 H$ Z4 Y% R0 u& v4.4.1 Visual Studio Code的安装) a% n# N2 ~7 ?+ C$ O, z9 K
Visual Stuio Code是一个编辑器,可以用来编写代码,Visual Studio Sode本教程以后就简称为VSCode,VSCode是微软出的一款免费编辑器。VSCode有Windows、Linux和macOS三个版本的,是一个跨平台的编辑器。VSCode下载地址是:https://code.visualstudio.com/,下载界面如图4.5.1.1所示:
8 A0 _& e% S8 p3 P" b, l/ \, t2 @( h/ X: t5 z
cee8a73ea841449f9acf7a543e41e917.png 9 s3 x; q, ?/ i( q$ J

8 ~" Y! o/ M5 [  a0 G- ]& j图4.5.1.1 VSCode下载界面+ a; B# `& X  ~6 K' ~6 S& q+ A3 x
在图4.5.1.1中下载自己想要的版本,本教程需要Windows和Linux这两个版本,所以下载这两个即可,我们已经下载好并放入了开发板光盘中,路径为:3、软件->Visual Studio Code。
  F. V! N2 F% s1 }) A1 @# W; ], u1、Windows版本安装  C  W% o) S( `3 l
Windows版本的安装和容易,和其他Windows一样,双击.exe安装包,然后一路“下一步”即可,安装完成以后在桌面上就会有VSCode的图标,如图4.5.1.2所示:; j) g4 `; s* a/ `/ F
, W+ l3 F! A' [! E; h; S. {5 D  g6 B
c690937ed2834cbd847a459baac830e6.png $ M. s* ?) [. r$ _0 r6 H- h7 F
% k6 m: I$ d3 Z
图4.5.1.2 VSCode图标" t1 ?( Y7 I" }! O1 [
双击图4.5.1.2打开VSCode,默认界面如图4.5.1.3所示:
9 H. Y3 m# w2 B6 E) g, [" n; r! ~" M
; L5 x5 Z' q% `+ z4 G) \8 [ 0c8b8c28c4734aecbcf592ef151becec.png
5 n( C; @9 v  ?  I8 C4 U2 F2 P7 B! S, g- G8 E
图4.5.1.3 VSCode默认界面9 E* h7 Z( e" q2 A$ t3 q( I
2、Linux版本安装
- R" J* A* J0 d( V/ |* R6 Q: W& A我们有时候也需要在Ubuntu下阅读代码,所以还需要在Ubuntu下安装VSCode。Linux下的VSCode安装包我们也放到了开发板光盘中, 将开发板光盘中的.deb软件包拷贝到Ubuntu系统中,然后使用如下命令安装:
3 f  N6 R5 T9 G  F4 Usudo dpkg -i code_1.50.1-1602600906_amd64.deb2 h+ s: t  G3 z- U' P! h
等待安装完成,如图4.5.1.4所示:4 f0 L/ X2 v$ ^0 i  X% O  u
! i3 C, C, y. X9 i: W5 ~
586b791b9b1c4e31afac7cc2d4fc4918.png : n6 z$ x2 `/ j8 Q9 }& i) T
- B8 U, ^0 \, A3 N2 p
图4.5.1.4 VSCode安装过程- F6 Q& p9 H1 I
安装完成以后搜索“Visual Studio Code”就可以找到,如图4.5.1.5所示:
4 u; s. t2 W( U& \5 A. Y4 G' ~/ W2 M3 ^2 \3 `
4e9168818cb44962bc813b36330a6e68.png " ~6 H9 m. Z! k' Y, n! S( w
! h+ }, D$ R' c( V/ v  s
图4.5.1.5 Visual Studio Code" q- i5 C. y6 _' A# ~
每次打开VSCode都要搜索,太麻烦了,我们可以将图标添加到Ubuntu桌面上,安装的所有软件图标都在目录/usr/share/applications中,如图4.5.1.6所示:# j- C8 o3 K# b

9 @+ b4 i5 L7 X+ Q& [; {; ^ 94cd05be2f5a4497b28e01b337d25b8e.png
4 Q8 \/ a+ G+ j# a5 y8 k$ e% U  ^2 Y) M
图4.5.1.6 软件图标: O4 A) u- {* q0 z* a0 n
在图4.5.1.6中找到Visual Studio Code的图标,然后点击鼠标右键,选择复制到->桌面,如图4.5.1.7所示:
- ?& D& \5 w! {, m# _( P8 L8 b5 q% M: a, J( w
5f026c7aa11d4034ac8c153be5a1c47c.png
& ?4 C+ G5 P8 P0 m# b( f
7 }8 V( L: |8 M1 v( a2 g# f# y# `图4.5.1.7 复制图标到桌面
+ s! T: j. Q! \3 j' a按照图4.5.1.7所示方法将VSCode图标复制到桌面,第一次双击的时候会提示“未信任的应用程序启动器”,如图4.5.1.8所示:% Z7 @( D: y; }: M
$ l5 s1 r" `4 [
3f4bd9ef371b4936a04b67ccc15c8e25.png & M0 k; |" W7 `9 I& d
. i8 R( y& \3 I+ o
图4.5.1.8 “未信任的应用程序启动”对话框9 y) B3 D% q6 Y/ ?0 H
点击图4.5.1.8中的“Trust and Launch”,选择信任即可。以后就可以直接双击图标打开VSCode,Ubuntu下的VSCode打开以后如图4.5.1.9所示:1 z! Z- O& v* j; h/ t3 r6 F

4 h% F, O: _7 d$ N; `# | d8aef56058974629b5639cfe61593c6f.png / G; e: q0 D8 R: B# J
. `3 i* l3 P0 T3 F% T; q3 V2 r, D) r8 e
图4.5.1.9 Linux下的VSCode3 u0 K% ~% K- g) o  k' p6 ?
可以看出Linux下的VSCode和Windows下的基本是一样的,所以使用方法也是一样的。
" `4 Z$ x; Z: b- ^1 H2 l4.5.2 Visual Studio Code插件的安装/ }) s( R) x. B* f1 \$ \5 r
VSCode支持多种语言,比如C/C++、Python、C#等等,本教程我们主要用来编写C/C++程序的,所以需要安装C/C++的扩展包,扩展包安装很简单,如图4.5.2.1所示:" Y( ]: d1 X4 J! o
5 S# d( E' ~3 D+ w
78a98ed77fe040bebb611dbcfbeaa8f3.png 6 r" {% q5 v& }1 u/ M/ [3 [
( Q5 c- C; |* z  O" X9 a; Z" I7 p
图4.5.2.1 VSCode插件安装
* V9 K. H, q3 K5 o9 N4 ~我们需要按照的插件有下面几个:) Y8 s+ Y2 C2 b) }, X1 {3 V
1)、C/C++,这个肯定是必须的。
- E$ p, B! w: A6 O* H- i2 N  x$ k2)、C/C++ Snippets,即C/C++重用代码块。
+ j0 [4 g- _' g2 h3)、C/C++ Advanced Lint,即C/C++静态检测 。
; v3 S/ W. b0 q' ~% x1 Z+ O$ u* T4)、Code Runner,即代码运行。
" a2 _5 }% w1 O* |0 \5)、Include AutoComplete,即自动头文件包含。4 b% K) ~: ?1 w# T& e3 `5 S
6)、Rainbow Brackets,彩虹花括号,有助于阅读代码。
9 ?; O# j6 `% W% P( b+ c7)、One Dark Pro,VSCode的主题。8 J# m1 w" e7 X+ i3 l! I  ]* N$ [
8)、GBKtoUTF8,将GBK转换为UTF8。3 W0 v# J3 R/ J, J0 l* V+ m/ }
9)、ARM,即支持ARM汇编语法高亮显示。
0 u& _$ P7 z1 N3 k, J5 M& N10)、Chinese(Simplified),即中文环境。
( E# [! ~: V! y" m9 p0 _; R) g- G( [11)、vscode-icons,VSCode图标插件,主要是资源管理器下各个文件夹的图标。, U1 h% j* p6 m
12)、compareit,比较插件,可以用于比较两个文件的差异。5 Z2 [! Q& D% @. O- R4 r$ U( i
13)、DeviceTree,设备树语法插件。
/ y( l% N' c& z2 [  Q7 B  Y14)、TabNine,一款AI自动补全插件,强烈推荐,谁用谁知道!
* e4 Q; B/ `- G安装完成以后重新打开VSCode,如果要查看已经安装好的插件,可以按照图4.5.2.2所示方法查看:
( V0 t! j: h" @! k$ Q( z; ?( J6 M  @2 ^8 X$ H
de74c3b17ff04d4898971eb5cfc7186a.png
& m0 f2 |/ d; Z# K8 w- c, }2 p# v! V0 u8 s' \$ ?; x+ Y
图4.5.2.2 显示已安装的插件
3 d3 c: H6 J4 M0 @1 ?由于我们已经安装了中文插件,因此重新打开VSCode以后就会是中文界面了,如图4.5.2.3所示:$ |( d+ q& _% p% C

6 b0 l' Y. I+ O$ v( `' } e81c75b1d99e4c5180f7997dc6d00540.png
3 k: T" O4 F  v$ P7 a, z" |" a! F( h7 r1 G' I5 A$ Q
图4.5.2.3 VSCode中文环境4 e' d9 h( m9 R
4.5.3 Visual Studio Code新建工程
0 h! }  k0 J3 w+ Z, y. L& U新建一个文件夹用于存放工程,比如我新建了文件夹目录为E:\VScode_Program\1_test,路径尽量不要有中文和空格打开VSCode。然后在VSCode上点击文件->打开文件夹…,选刚刚创建的“1_test”文件夹,打开以后如图4.5.3.1所示:: L: g  L5 r7 P  m( {: ~  p1 V

# x) ^1 o# U+ Q c4679466336a4c81b8784e79f0ba2471.png # }" g/ r! l! u8 N) p* k- {! Z

+ _$ u3 ]% a. {5 Y6 l图4.5.3.1 打开的文件夹
' F) i" l! A9 M  J0 J5 p3 L" j从图4.5.3.1可以看出此时的文件夹“1_TEST”是空的,点击文件->将工作区另存为…,打开工作区命名对话框,输入要保存的工作区路径和工作区名字,如图4.5.3.2所示:
2 F0 \2 ^' G% w( ]1 K1 j
; i) p' Y2 k: R* B) b 058cbd1610454111a8d42ffba12d375c.png 0 C6 w3 g' a* \. n% w+ P0 ^6 v

( y1 I4 s& e8 E: \图4.5.3.2 工作区保存设置2 q- H! n- R# O* [2 p6 z
工作区保存成功以后,点击图4.5.3.1中的“新建文件”按钮创建main.c和main.h这两个文件,创建成功以后VSCode如图4.5.3.3所示:7 _* Z1 x$ g6 `; ~9 M

# G! @1 d, k! @* G 5b5602e4eed24d04880a0b746a192ea6.png ) k5 W% e% e9 |% B& c1 Y7 |
6 G$ F. r0 |# y" v* c
图4.5.3.2 新建文件以后的VSCode) a- W2 c' b/ Z7 G& _- j. L
从图4.5.3.2可以看出,此时“实验1 TEST”中有.vscode文件夹、main.c和main.h,这三个文件和文件夹同样会出现在“实验1 test”文件夹中,如图4.5.3.3所示:
) N9 z, H* Q$ ^; Q5 Y( b2 ?' k# z: x# H2 \5 |, M
a8160c7dc3474e26b911fa6093cfb966.png
9 ?% N+ x5 `3 v. t
. \; P, T' h  s1 o+ i# k图4.5.3.3 实验文件夹, G2 [8 @, s% k' ?$ J
在main.h中输入如下所示内容:
' T  }" P. C7 Y* m1 K: h2 L" {示例代码4.5.3.1 main.h文件代码, A4 M, `2 e5 o1 [3 A# T
# |1 r2 |4 S9 p: \5 c" `$ d
  1. 1 #include <stdio.h>% p) w) u% Y0 X& h8 i4 }
  2. 2 , ?7 l* j9 q$ r5 c2 d
  3. 3 int add(int a, int b);  f9 Q+ \9 N! F# r$ l  j7 a
  4.         在main.c中输入如下所示内容:$ q3 H$ c1 N& ^5 S- e
  5. 示例代码4.5.3.2 main.c文件代码
    ! r% }) u: l: F4 [. O
  6. 1  #include <main.h>1 F3 T! c/ z! [' X5 n' b
  7. 2  
    * y* Q, p1 _7 y
  8. 3  int add(int a, int b)& k$ \, ?+ Y: k. S- ~
  9. 4  {
    8 X8 T0 d7 J/ }; S* j! T
  10. 5      return (a + b);
    ' w3 S5 c* b- f6 x" T6 p" }2 H' o
  11. 6  }
    - _6 x* o& k+ I, ~3 G
  12. 7  5 R1 M- ]1 T' K3 w+ F3 n( ]
  13. 8  int main(void)
    # x9 n* J6 w. F; q* L& M
  14. 9  {$ _! b2 U- U0 Y! j- e6 v5 J* i6 \3 d
  15. 10     int value = 0;, w0 f+ c3 n  Z' L: _6 h- i) P1 e5 O
  16. 11 2 d+ {: v5 L# p4 }' `' b; u
  17. 12     value = add(5, 6);% M0 T# \4 e4 V$ s
  18. 13     printf("5 + 6 = %d", value);
    0 l: @4 p9 Y9 A1 f
  19. 14     return 0;   
    1 }; l' y# P% L9 y
  20. 15 }
复制代码

* m; x& f  e# X1 \. a. u) p) w代码编辑完成以后VSCode界面如图4.5.3.4所示:# Y# z" \7 Z$ O: W

7 y& Y- |) _2 b3 O 61825ab5de9148a09e5c5ca921f82c8d.png
2 }# e* O" `9 c; F8 z; g) R1 ~0 f9 |
) m) W. J5 x0 Q. {' J' k* ^7 m图4.5.3.4 代码编辑完成以后的界面3 D1 \- a6 P: J0 f; \: M
从图4.5.3.4可以看出,VSCode的编辑的代码高亮很漂亮,阅读起来很舒服。但是此时提示找不到“stdio.h”这个头文件,如图4.5.3.5所示错误提示:6 u, _- Y* d# Y6 t
在这里插入图片描述
) \2 N7 ~5 C  w" J+ O
* a' g# k4 ]: k. W; i/ D$ f0 r ceff918976bc4f8cb4aaa33a6228fb89.png
; ?' f, a; G: @7 Z: V
* ~9 Z. ^( a+ N+ K( M4 W/ K) \图4.5.3.5 头文件找不到。5 _6 G4 x4 x( l
图4.5.3.5中提示找不到“main.h”,同样的在main.h文件中会提示找不到“stdio.h”。这是因为我们没有添加头文件路径。按下“Ctrl+Shift+P”打开搜索框,然后输入“Edit configurations”,选择“C/C++:Edit configurations…”,如图4.5.3.6所示:' @0 \6 n$ S/ p$ @
2 v$ h+ C5 n, `3 p6 [9 V4 n9 Q- T
af334d11d4374e239b4a7745749a9f53.png # [! N1 T$ O( B; B7 e

" p- H8 H: f( D, w- ?图4.5.3.6 打开C/C++编辑配置文件
. W6 J: V& `/ i% O# P# ]C/C++的配置文件是个json文件,名为:c_cpp_properties.json,此文件默认内容如图4.5.3.7所示:; {8 _  @1 b( M/ a/ s
1 Y5 o& ^: A4 l3 V% v9 k0 ]
9f42010c06594011a46c1e31f73b0d47.png
( Z) Y; [9 D, T' O0 l- ?) z3 p% l$ A- |9 K% X5 c0 s! l% B. _
图4.5.3.7 文件c_cpp_properties.json内容$ x/ Q* J7 M2 G" o# n# y1 I( V  d
c_cpp_properties.json中的变量“includePath”用于指定工程中的头文件路径,但是“stdio.h”是C语言库文件,而VSCode只是个编辑器,没有编译器,所以肯定是没有stdio.h的,除非我们自行安装一个编译器,比如CygWin,然后在includePath中添加编译器的头文件。这里我们就不添加了,因为我们不会使用VSCode来编译程序,这里主要知道如何指定头文件路径就可以了,后面有实际需要的时候再来讲。
; _6 h, F# }0 C. Q' P我们在VScode上打开一个新文件的话会覆盖掉以前的文件,这是因为VSCode默认开启了预览模式,预览模式下单击左侧的文件就会覆盖掉当前的打开的文件。如果不想覆盖的话采用双击打开即可,或者设置VSCode关闭预览模式,设置如图4.5.3.8所示:; ^$ C7 g9 v3 v0 U5 E  u

2 F! e& d! I: W! k& U e4da6e69c1834145969a744987fe6d43.png / S2 }; J) x0 d( q- h( x( F: s

. Z& u5 _9 `  |7 W图4.5.3.8 取消预览
- S) A+ r+ s( W7 e: U& K我们在编写代码的时候有时候会在右下角有如图4.5.3.9所示的警告提示:
2 E+ x  R& _- \  W0 w, T8 {( A  i" z" W+ a* C* S; V0 r0 z" o4 x
4bc272e9c4d54b988515adcb2e5e7eee.png 5 F' {* x' n3 I$ k" I. }5 j

& [3 L: @; u% F1 P% O1 x1 l1 u图4.5.3.9 错误提示
1 s4 ]0 K* p" l; ^# ?1 S2 t这是因为插件C/C++ Lint打开了几个功能,我们将其关闭就可以了,顺便也可以学习一下VSCode插件配置方法,如图4.5.3.10所示:8 ]' h$ x3 g0 ~. C, X1 I9 ~7 R& W

8 S& P: _0 M  q2 U( N3 z) F4 Q a0d45506ee08416284572985392f34ca.png
/ x! y# N0 \' Z- ^1 ~; s& O4 z. n
% S) d# d( E. ?9 ?5 Z4 x) s7 O 9ba8488de92145588d206fbd98772a47.png + M6 a- w! ]) s9 w: N% \' b5 z
3 t" y1 }0 `9 Q  N1 D
图4.5.3.10 C/C++ Lint配置界面: @. A2 \7 l% e3 O5 |4 D
在C/C++ Lint配置界面上找到CLang:Enable、Cppcheck:Enable、Flexlint:Enable这个三个,然后取消掉勾选即可,如图4.5.3.11所示:
4 D: m( a* @& u' L$ p8 \* k/ m7 @/ ~
8958e3f967a04d8faa4ebd3d01bec2fb.png " v$ X% [2 ?3 W* U# T

% }6 ?5 h  x0 M% w- O6 a- t: R7 \! Q图4.5.3.11 C/C++ Lint配置
+ n# v+ K+ U" K1 p/ ~按照图4.5.3.11所示取消这三个有关C/C++ Lint的配置以后就不会有图4.5.3.9所示的错误提示了。但是关闭Cppcheck:Enable以后VSCode就不能实时检查错误了,大家根据实际情况选择即可。
2 X- Z1 y+ p+ A9 K) _————————————————
: a! ?8 T2 Y+ O3 b+ p2 G版权声明:正点原子
6 h! [( F$ x$ \- Q& y$ C& o$ b3 O8 Y+ i7 j4 X  H, v8 G, b

3 B$ t. _9 C2 W  w& s' u
赞 收藏 评论0 发布时间:2022-9-27 15:17

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版