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

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

[复制链接]
STMCU小助手 发布时间:2022-9-27 15:17
开发环境搭建
$ E$ I* Y4 W2 j6 x/ ]" r" G要进行Linux驱动开发肯定要先搭建好开发环境,我们在开始学习STM32单片机的时候肯定需要安装一堆的软件,比如MDK、IAR、串口调试助手等等,这个就是STM32的开发环境搭建。同样的,要想在Ubuntu下进行Cortex-A(STM32MP157)开发也需要安装一些软件,也就是网上说的开发环境搭建,环境搭建好以后我们就可以进行开发了。环境搭建分为Ubuntu和Windows,因为我们最熟悉Windows,所以代码编写、查找资料啥的肯定是在Windows下进行的。但是Linux开发又必须在Ubuntu下进行,所以还需要搭建Ubuntu下的开发环境,主要是交叉编译器的安装,本章我们就分为Ubuntu和Windows,讲解这两种操作系统下的环境搭建。
  L4 `& P& n& Y; I8 ~0 t! x5 \" h1 i; O. ?: l9 y
4.1 Ubuntu和Windows文件互传) I: l: L; A+ h
在开发的过程中会频繁的在Windows和Ubuntu下进行文件传输,比如在Windwos下进行代码编写,然后将编写好的代码拿到Ubuntu下进行编译。Windows和Ubuntu下的文件互传我们需要使用FTP服务,设置方法如下:
) T5 a4 N+ \% Y& ?8 b& T1、开启Ubuntu下的FTP服务8 k1 p9 i! z1 M! A5 Z/ O
打开Ubuntu的终端窗口,然后执行如下命令来安装FTP服务:
  g- Z: j' t& o; Q; D/ j& Csudo 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
7 P8 o3 ]3 m/ ewrite_enable=YES9 F2 r5 ~! P$ f" g
确保上面两行前面没有“#”,有的话就取消掉,完成以后如图4.1.1所示:/ D5 _, Z* c0 |; A8 {7 z0 S

9 Q3 y: d% y& b* n9 N8 e! M6 V* ] 3bf98c0b08674716bb554a99535949af.png
6 p, ~6 k. p: f# e6 p
7 e2 }# {( V0 a- B* |6 p+ b图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客户端安装
2 L* L8 p3 O% q& w1 `Windows下FTP客户端我们使用FileZilla,这是个免费的FTP客户端软件,可以在FileZilla官网下载,下载地址如下:下载界面如图4.1.2所示:
6 S3 V! v& g9 H# Z  R3 _+ D( e
, w  Q0 o9 u* W! ]' r' B9 [ 4455a4a5cf0946a7ad676ac285c81caa.png 3 Y0 ^; c+ W: o, v/ z: V8 j+ C

, U* p/ G" C2 x$ p: V! V. s# L4 Q) e- `图4.1.2 FileZilla软件下载
6 ]) @  a& O3 t7 I5 M' g2 M如果是32位电脑就选择32位版本,64位电脑就选择64位版本,我们已经下载好了64位版本的FileZilla并放到开发板光盘中了,路径为:3、软件-> FileZilla_3.51.0_win64-setup.exe,双击安装即可。安装完成以后找到安装目录,找到图标,然后发送图标快捷方式到桌面,完成以后如图4.1.3所示:
* Z9 ^% q+ c% V; `, K$ a3 u7 }" e
/ h- {' m" c9 h& R" G9 K$ y+ @ deeef14041f848e8a3ba1cc3ab12b8cb.png   E: Y% ?$ t3 v. Z4 L: G+ x
  |5 {2 D" s1 v, E0 I# K( `/ P
图4.1.3 FileZilla图标6 G- t; K# a; a$ `
打开FileZilla软件,界面如图4.1.4所示:
( O' k- U$ F; d$ q) Q1 n
$ g& V, A8 a1 B. V" P& w e391b9a265f34c708ef0e5856830c3a8.png
1 {9 e  f9 z# d8 B9 u/ Z
1 t; }0 h) i% D0 ]0 m图4.1.4 FileZilla软件界面
! c& u! J7 s/ A* E3、FileZilla软件设置
7 k/ u) r' u$ \# e& s  WUbuntu作为FTP服务器,FileZilla作为FTP客户端,客户端肯定要连接到服务器上,打开站点管理器,点击:文件->站点管理器,打开以后如图4.1.5所示:% q) s2 O5 W% Y
$ g6 D* K- q# ^! V1 j. T
c813ba5d2c19411e90571822ad28cc6b.png
7 @- }7 J7 z' W2 V5 T2 h3 P
+ H' h* x1 E& ^- G4 w4 E3 i图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
7d1d70c5cf5a4e549d8fb213cea59c6a.png & K0 M$ a9 x- _' h
- 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

1 u, E& e9 Q: N1 R! C: O 77e77d5fba2a4bd18b142e670b23884c.png 2 F0 C8 k" b6 s7 E

: A7 {1 i6 q% }% x9 i& z图4.1.7 站点设置9 w: f& \' m/ D0 T9 Z: J- A4 }8 m
按照图4.1.7中设置好以后,点击“连接”按钮,第一次连接可能会弹出提示是否保存密码的对话框,点击确定即可。连接成功以后如图4.1.8所示:
, b7 s& p! {+ C! T0 b* z1 d1 ?* e
! R. r  n6 v. f5 \% B9 H( } 41491410d82044cf9e25c9770f4b2d1b.png
6 d( [4 h1 W4 Q' T" C( H
0 R9 [( g4 ~$ z图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所示:
: I, k) T/ m. W' k
+ u5 ?. K3 [' l, m" q* M c28531b164964746b92476a3b8fb03df.png 2 P2 e$ r' o# x8 [4 o
  y2 n8 e; O6 [2 g7 K+ R
图4.1.9 设置字符集
1 x% W: f7 X0 O8 U按照图4.1.9设置好字符集以后重新连接到FTP服务器上,重新链接到FTP服务器以后Ubuntu下的文件目录中文显示就正常了,如图4.1.10所示:
- s, R4 @0 n8 _9 m1 Q/ Y% _  p5 r
fc40b47ce5bb447cb8d33cf73c851467.png ! s& `6 `, w4 H. v/ e) W
) b3 ]. ?1 Z+ {0 a; A1 i* Y/ G' K
图4.1.10 Ubuntu下文件目录中文显示正常
& `2 R" d8 ]+ Z! N9 ]4 i( p1 T4 v如果要将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服务:
2 _" h' H4 H  r+ }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所示:
& W0 ?% p) A- j9 [3 I8 B$ c( n5 Y) h
6bb4375e403840dc921d825755ca6daa.png
6 o0 s5 K# u9 B6 y$ 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所示:
" L/ M  d1 L2 k
0 h# ]# K5 V( e7 D, i6 f 4324fcc80b154eb9b6f591643e88e1ba.png
; J; b1 G# g- n) |) s) o* v
6 w2 n! g# W+ X图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
( e6 R6 F/ G2 t4 V: U4.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
4 U+ P& g* c! j  i' S上述命令安装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编译器。
; u6 @# ?2 }, d0 M$ H' ~& t2、这个GCC编译器是运行在X86架构的PC上的。
$ c2 M. z( b3 K$ H$ V3、这个GCC编译器是编译ARM架构代码的,也就是编译出来的可执行文件是在ARM芯片上运行的。
! b2 I1 x" R& C5 n0 C交叉编译器中“交叉”的意思就是在一个架构上编译另外一个架构的代码,相当于两种架构“交叉”起来了。
/ z4 U' A: |/ ~: A. R3 Z- i3 ^交叉编译器有很多种,ST也有推荐的通用交叉编译器,如图4.3.1所示:
4 {% n5 j- f. F5 K! P7 K, ^) }& ?# N. F
b1d044dd741b4691b9713d417b941fb4.png 7 Y& d! u4 m3 ~2 j' x6 D

  M( f- M: R. j5 {) H+ K4 g# s- Z图4.3.1 ST推荐的通用交叉编译器
( d6 W, ~$ Z4 E4 n( W* o从图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所示:
( t; B; U; J% S: _) r( M6 y7 r" Q) q. H- E/ e1 Y1 V) l. [
c6a749592712485e837a67302c35104b.png + d4 B9 h8 q: r* X4 |
) j9 O  {% J% N
图4.3.1.2 ARM官方交叉比编译器下载界面
9 S  i& b' ^/ c9 H' }: c8 G图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所示:
; E& |) ^* c8 _* n9 ~& b
4 L2 L' \* `+ S$ w1 P7 H cefdfabb2dea48b498f739a7bad05f0c.png 8 S: d( n: v& N: t9 [+ z/ {! s
& C" a) m) O7 J9 V& F0 w. A4 z* F
图4.3.1.3 拷贝交叉编译器
* @* o3 ^2 f. L& m; \, e; O8 E拷贝完成的话FileZilla会有提示,如图4.3.1.4:
* Q4 v+ P. Q6 i' i4 }6 x6 F5 B, |$ B( M$ d
5c368d9b467241f698754e9890640d81.png . ?; x' P0 Q# X
. \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,命令如下:
& w- h6 {3 J: J3 w+ N5 A" U% Msudo mkdir /usr/local/arm
+ }; s4 p) R0 F+ M  F) Q! g) T创建完成以后将刚刚拷贝的交叉编译器复制到/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目录中对交叉编译工具进行解压,解压命令如下:
: q* D3 @2 a( G3 N; X( u$ F8 fsudo 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”的文件夹,这个文件夹里面就是我们的交叉编译工具链。
+ z( L; Q" }; D$ x( G4 F6 E修改环境变量,使用打开/etc/profile文件,命令如下:4 j: H7 I/ v6 D' ~+ ^& s+ w$ _
sudo vi /etc/profile
' I/ z3 e  w- B3 V8 S打开/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
27cd603908834aa7a8a17a5cbdadbc92.png
4 G. d3 y+ u; N" x( r$ S, a, T# w! H4 M% H
图4.3.1.5 添加环境变量# N! V( [( }" b, e
修改好以后就保存退出,重启Ubuntu系统,交叉编译工具链(编译器)就安装成功了。
# |3 b9 F0 r/ e/ t; p* S4.3.2 安装相关库: K; U- }% t+ R9 X
在使用交叉编译器之前还需要安装一下其它的库,命令如下:8 i% Q: R: G& J+ T4 X9 x# C$ `6 V
sudo apt-get update //先更新,否则安装库可能会出错
3 }( F) @9 O! z( q1 p7 ^3 d+ a( xsudo apt-get install lsb-core lib32stdc++6 //安装库6 Y) S" L/ E; B4 Y: O# O6 ]
等待这些库安装完成。
7 {! z  x- {8 m- ?2 O# T4.3.3 交叉编译器验证
! M5 ?4 S9 p" s2 b( @6 z: u# b6 D首先查看一下交叉编译工具的版本号,输入如下命令:
& z: B/ C/ D. G/ harm-none-linux-gnueabihf-gcc -v0 z. P- K8 L6 C( l7 i5 K* s
如果交叉编译器安装正确的话就会显示版本号,如图4.3.3.1所示:8 c5 y+ o+ o# j

# V& x) C7 ^' t# m: R) k* U+ B# L 281d1e1694304c1a850c814c649a885f.png
  c+ z+ d6 l3 R
: p8 s" P2 R; u- }图4.3.3.1 交叉编译器版本查询
5 @; z  ~8 I& S' k% k从图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的缩写,也就是硬件浮点,说明此交叉编译工具链支持硬件浮点。
4 B5 ?& f  t8 y  t5、gcc表示是gcc工具。7 x2 ~! q& l6 L3 H2 N
4.4 Visual Studio Code软件的安装和使用
. S3 F1 S8 F+ L4.4.1 Visual Studio Code的安装
/ R3 K" F: q5 F' Z8 N  W9 D8 R! IVisual 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
cee8a73ea841449f9acf7a543e41e917.png & \; z$ J0 u7 ~9 Y( V. f

. S! _9 w2 Y$ x图4.5.1.1 VSCode下载界面
, C2 S5 i+ j( }% Z4 Z在图4.5.1.1中下载自己想要的版本,本教程需要Windows和Linux这两个版本,所以下载这两个即可,我们已经下载好并放入了开发板光盘中,路径为:3、软件->Visual Studio Code。
: g( u, F2 E9 [4 K" k3 r! W5 H1、Windows版本安装' t5 u6 s# r6 _: `3 B1 O* G+ w0 ?
Windows版本的安装和容易,和其他Windows一样,双击.exe安装包,然后一路“下一步”即可,安装完成以后在桌面上就会有VSCode的图标,如图4.5.1.2所示:
7 Z/ z% f1 Y4 H1 Q5 W  L+ z5 _( m  V9 u/ `( j8 B
c690937ed2834cbd847a459baac830e6.png
! h. s5 A8 J* q6 W
2 h# p( A' c' z* \8 c5 Y( w图4.5.1.2 VSCode图标$ {4 n1 R0 A& t, }* f8 o
双击图4.5.1.2打开VSCode,默认界面如图4.5.1.3所示:
7 {: X$ h0 J& [% q3 t) f
5 S! U  V) l9 v" h 0c8b8c28c4734aecbcf592ef151becec.png % U# S! _8 }. g8 m* h% \; c

5 D, L2 \( w7 B图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系统中,然后使用如下命令安装:
2 t4 a, E3 w& u8 t  bsudo 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
586b791b9b1c4e31afac7cc2d4fc4918.png & I& G, A7 D7 D/ v) m, q( @
* u8 z, `7 o6 n6 q, i
图4.5.1.4 VSCode安装过程
( Z8 z( z- G( z) Y安装完成以后搜索“Visual Studio Code”就可以找到,如图4.5.1.5所示:
1 _5 V5 i/ ]7 s1 _  l' o
* b# l/ i# ~  G) _$ Z 4e9168818cb44962bc813b36330a6e68.png $ [4 M, O* ~# u4 J: h

% o0 |0 L% e. b# I' b- [& g; E! G图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所示:
. I/ x# d9 n  V  d, J. }! V; w8 ^0 D" z: }2 Z
94cd05be2f5a4497b28e01b337d25b8e.png 0 I  A7 c% S$ K; C. ?
) B( B6 J8 P4 Z3 V
图4.5.1.6 软件图标
  H7 Y* `/ F) p9 N( B0 M6 p在图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
5f026c7aa11d4034ac8c153be5a1c47c.png 6 Z! Y3 \" V0 ~% J/ o  {' ~

) \* i, K& ~9 z1 \图4.5.1.7 复制图标到桌面+ u- ?6 I. R( I; B7 }# d
按照图4.5.1.7所示方法将VSCode图标复制到桌面,第一次双击的时候会提示“未信任的应用程序启动器”,如图4.5.1.8所示:
( v  @; K2 _. e, s1 p( R/ \. R) ~' {8 Q- w
3f4bd9ef371b4936a04b67ccc15c8e25.png
9 {! C- s4 \- v, q  ?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

6 _9 f; c8 W$ b- d, C# `) S, R d8aef56058974629b5639cfe61593c6f.png & {0 F- c! t4 G- S7 M

* X  n1 Q& Y& P2 L) t& n% n2 T图4.5.1.9 Linux下的VSCode
% u7 D4 t. @+ J可以看出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
78a98ed77fe040bebb611dbcfbeaa8f3.png ) f7 t# o1 u2 c; K7 L
/ s3 ]4 L9 S. x' s
图4.5.2.1 VSCode插件安装
+ ]# i" v. B# Q, V& N' M% r2 X我们需要按照的插件有下面几个:
+ l/ c  C) d0 ?& B9 c3 k1)、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,即代码运行。
/ g9 t" o; q/ z1 u8 ?; X5)、Include AutoComplete,即自动头文件包含。$ X4 e5 R5 [3 I# C
6)、Rainbow Brackets,彩虹花括号,有助于阅读代码。
( ^; z& b# ^( {# F7)、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),即中文环境。
8 f& }6 ?+ d2 A11)、vscode-icons,VSCode图标插件,主要是资源管理器下各个文件夹的图标。, B: I* o# X1 R1 m# N0 N& R
12)、compareit,比较插件,可以用于比较两个文件的差异。
- u+ e& Y4 M0 J+ w13)、DeviceTree,设备树语法插件。
7 u" ?( [$ f  T& I" |" b14)、TabNine,一款AI自动补全插件,强烈推荐,谁用谁知道!$ C; k/ {; d/ F" h
安装完成以后重新打开VSCode,如果要查看已经安装好的插件,可以按照图4.5.2.2所示方法查看:
$ F3 \/ u' G2 ^3 U$ v6 I
6 {1 V1 z: A0 O6 w/ _ de74c3b17ff04d4898971eb5cfc7186a.png ' P: x0 T8 @' n1 h* g# n) Y; G
* B5 {$ j7 h; o& F0 o( E. \/ A
图4.5.2.2 显示已安装的插件
) e0 u- _' a  X: c9 s: O2 V/ w由于我们已经安装了中文插件,因此重新打开VSCode以后就会是中文界面了,如图4.5.2.3所示:
7 y$ ~" k* ^: x. a" f% L! n3 R8 K" J, o% {+ T6 x
e81c75b1d99e4c5180f7997dc6d00540.png
0 Z6 p( E. V. V
" _4 l$ w* ~1 v图4.5.2.3 VSCode中文环境  F- `5 m$ e, B7 W/ f0 }, O
4.5.3 Visual Studio Code新建工程
3 s& {$ L" {( d; M' o6 T3 s$ m新建一个文件夹用于存放工程,比如我新建了文件夹目录为E:\VScode_Program\1_test,路径尽量不要有中文和空格打开VSCode。然后在VSCode上点击文件->打开文件夹…,选刚刚创建的“1_test”文件夹,打开以后如图4.5.3.1所示:
$ d) P1 V! X4 @
* A1 ^* ~6 x$ U3 l# `0 [ c4679466336a4c81b8784e79f0ba2471.png
7 V6 E/ W! ]5 G! L/ N) p
2 j# E6 h4 W0 ^' k0 j图4.5.3.1 打开的文件夹
' \5 `0 O9 x1 H: V从图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
058cbd1610454111a8d42ffba12d375c.png " e7 d2 Q: }( s3 T2 t& b1 \

9 d) V/ R' w& y3 C6 M0 }: `# B图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

9 B% r  s' x3 e* U$ I2 o 5b5602e4eed24d04880a0b746a192ea6.png
6 I0 }4 M8 O" v% M6 a6 X9 g- 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所示:
$ }5 y- ?# d$ p+ J. _$ b; A1 x+ Z# V! _" ^" e/ T0 f# K
a8160c7dc3474e26b911fa6093cfb966.png & q' B1 M* k3 k5 ]8 }3 W
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文件代码
. G( o6 M! Y$ }+ Y9 a3 S
- X2 q( H& o' V/ X' ~" D2 z4 _9 p
  1. 1 #include <stdio.h>+ Y# y6 u& i0 s3 w2 n+ e
  2. 2
    7 w' i- W0 e2 D
  3. 3 int add(int a, int b);# S3 \% ~6 F% d7 |! w7 \- `
  4.         在main.c中输入如下所示内容:. N7 C, u6 t# ^" b, M
  5. 示例代码4.5.3.2 main.c文件代码
    , c( c( k7 v4 {: Q0 G
  6. 1  #include <main.h>1 }* O# X7 q3 @/ i8 x. G
  7. 2    m% E  ^9 E4 }6 L& D) K$ c
  8. 3  int add(int a, int b)2 G- ]9 \8 Q+ V" ?) ]) y4 K# _( [: L2 m
  9. 4  {4 @' U+ U7 ?5 c; g2 {
  10. 5      return (a + b);" S$ l7 T7 R& w! f, b7 q4 V) M7 s, L
  11. 6  }
    , \- u% z0 ^% X- N2 _' @4 t* \
  12. 7  ! ]9 W: T; C' s. E( c" m
  13. 8  int main(void)8 Q: |  K# U1 t
  14. 9  {
    # X1 t( n' M1 ~# }" b+ i
  15. 10     int value = 0;4 i( ^+ j* x  U
  16. 11 / e  r3 [$ ]) S8 H/ U
  17. 12     value = add(5, 6);. V8 ?+ Q% U9 }9 o9 Q. B/ ]2 m
  18. 13     printf("5 + 6 = %d", value);
    / \8 V# B9 C7 ~) W& ]
  19. 14     return 0;    : }& U. G/ `; p7 V; \
  20. 15 }
复制代码
. Q: O( g1 t* t% G, E% S, j
代码编辑完成以后VSCode界面如图4.5.3.4所示:; d# v0 K* Z2 P" g

& S4 ~& w" o  o2 k# q- B 61825ab5de9148a09e5c5ca921f82c8d.png
  a. c. O# {4 y" A1 B8 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
ceff918976bc4f8cb4aaa33a6228fb89.png
0 s# p. F  G( S1 D+ X/ \
+ C, R: q3 V7 I, C1 k图4.5.3.5 头文件找不到。
) b9 o7 z, t) N, C. f图4.5.3.5中提示找不到“main.h”,同样的在main.h文件中会提示找不到“stdio.h”。这是因为我们没有添加头文件路径。按下“Ctrl+Shift+P”打开搜索框,然后输入“Edit configurations”,选择“C/C++:Edit configurations…”,如图4.5.3.6所示:
6 l! n  w$ y2 ^" e# y
5 b) m! d& J. P: M1 t- F! X af334d11d4374e239b4a7745749a9f53.png
  p- K9 v6 I) {+ 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所示:
- K4 k1 A5 z) S# Q& @; e
* B4 y- K8 A  q! @8 Y2 G+ @ 9f42010c06594011a46c1e31f73b0d47.png
& x" M" x, c, Q5 L& U& u
3 Y  M5 o. K; N: M. n4 l- w图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来编译程序,这里主要知道如何指定头文件路径就可以了,后面有实际需要的时候再来讲。
; t& p, `" v, p/ K% E我们在VScode上打开一个新文件的话会覆盖掉以前的文件,这是因为VSCode默认开启了预览模式,预览模式下单击左侧的文件就会覆盖掉当前的打开的文件。如果不想覆盖的话采用双击打开即可,或者设置VSCode关闭预览模式,设置如图4.5.3.8所示:
# D& q6 S4 H5 Y7 x: |
% z3 L; {5 |1 S( { e4da6e69c1834145969a744987fe6d43.png ) i+ P9 C. \0 ^# C7 E

$ A5 R0 \5 M5 Z; R5 J- |# \图4.5.3.8 取消预览. J" ~! a/ [5 f6 u) L
我们在编写代码的时候有时候会在右下角有如图4.5.3.9所示的警告提示:& S: ^3 L& n4 I( p% S# E0 \' \" G( ?

% ], ^& N5 v6 |) B* I; {( u 4bc272e9c4d54b988515adcb2e5e7eee.png 2 ]4 a4 _# M! ~: d% C2 o$ s
7 p" V. c5 Z/ t/ ~6 d7 s" f
图4.5.3.9 错误提示
3 t' p( O- v( Q6 U这是因为插件C/C++ Lint打开了几个功能,我们将其关闭就可以了,顺便也可以学习一下VSCode插件配置方法,如图4.5.3.10所示:/ O9 S6 N& ?# o. a. d0 r+ h# l7 @

5 H/ {1 A- p2 Q a0d45506ee08416284572985392f34ca.png 5 C! E+ N( G8 T8 i! c
" S1 [; m+ N. L8 Z
9ba8488de92145588d206fbd98772a47.png
( }/ m! U; C- D1 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
8958e3f967a04d8faa4ebd3d01bec2fb.png
/ @3 i: a  A3 X$ b4 J( l" W. o  S  q( p
' C$ ]- s; n  d: T( {0 t, I# h8 i图4.5.3.11 C/C++ Lint配置
$ A4 ^3 q- b* L3 h# z( C+ c1 X按照图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
————————————————
# V! y  Z$ R& ~7 s8 X版权声明:正点原子! W4 P5 [; L' z- J/ h) L
) [& l0 q9 o4 u" v! y

5 m% p# A+ M% V* Z
收藏 评论0 发布时间:2022-9-27 15:17

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版