1)实验平台:正点原子STM32MP157开发板
2)购买链接:https://item.taobao.com/item.htm?&id=629270721801
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-318813-1-1.html
4)正点原子官方B站:https://space.bilibili.com/394620890
5)正点原子STM32MP157技术交流群:691905614

第四章 开发环境搭建

要进行Linux驱动开发肯定要先搭建好开发环境,我们在开始学习STM32单片机的时候肯定需要安装一堆的软件,比如MDK、IAR、串口调试助手等等,这个就是STM32的开发环境搭建。同样的,要想在Ubuntu下进行Cortex-A(STM32MP157)开发也需要安装一些软件,也就是网上说的开发环境搭建,环境搭建好以后我们就可以进行开发了。环境搭建分为Ubuntu和Windows,因为我们最熟悉Windows,所以代码编写、查找资料啥的肯定是在Windows下进行的。但是Linux开发又必须在Ubuntu下进行,所以还需要搭建Ubuntu下的开发环境,主要是交叉编译器的安装,本章我们就分为Ubuntu和Windows,讲解这两种操作系统下的环境搭建。

4.1 Ubuntu和Windows文件互传
在开发的过程中会频繁的在Windows和Ubuntu下进行文件传输,比如在Windwos下进行代码编写,然后将编写好的代码拿到Ubuntu下进行编译。Windows和Ubuntu下的文件互传我们需要使用FTP服务,设置方法如下:
1、开启Ubuntu下的FTP服务
打开Ubuntu的终端窗口,然后执行如下命令来安装FTP服务:
sudo apt-get install vsftpd
等待软件自动安装,安装完成以后使用如下VI命令打开/etc/vsftpd.conf,命令如下:
sudo vi /etc/vsftpd.conf
打开以后vsftpd.conf文件以后找到如下两行:
local_enable=YES
write_enable=YES
确保上面两行前面没有“#”,有的话就取消掉,完成以后如图4.1.1所示:

图4.1.1 vsftpd.conf修改
修改完vsftpd.conf以后保存退出,使用如下命令重启FTP服务:
sudo /etc/init.d/vsftpd restart
2、Windows下FTP客户端安装
Windows下FTP客户端我们使用FileZilla,这是个免费的FTP客户端软件,可以在FileZilla官网下载,下载地址如下:https://www.filezilla.cn/download,下载界面如图4.1.2所示:

图4.1.2 FileZilla软件下载
如果是32位电脑就选择32位版本,64位电脑就选择64位版本,我们已经下载好了64位版本的FileZilla并放到开发板光盘中了,路径为:3、软件-> FileZilla_3.51.0_win64-setup.exe,双击安装即可。安装完成以后找到安装目录,找到图标,然后发送图标快捷方式到桌面,完成以后如图4.1.3所示:

图4.1.3 FileZilla图标
打开FileZilla软件,界面如图4.1.4所示:

图4.1.4 FileZilla软件界面
3、FileZilla软件设置
Ubuntu作为FTP服务器,FileZilla作为FTP客户端,客户端肯定要连接到服务器上,打开站点管理器,点击:文件->站点管理器,打开以后如图4.1.5所示:

图4.1.5 站点管理器
点击图4.1.5中的“新站点(N)”按钮来创建站点,新建站点以后就会在“我的站点”下出现新建的这个站点,站点的名称可以自行修改,比如我将新的站点命名为“Ubuntu”如图4.1.6所示:

图4.1.6 新建站点
选中新创建的“Ubuntu”站点,然后对站点的“常规”进行设置,设置如图4.1.7所示:

图4.1.7 站点设置
按照图4.1.7中设置好以后,点击“连接”按钮,第一次连接可能会弹出提示是否保存密码的对话框,点击确定即可。连接成功以后如图4.1.8所示:

图4.1.8 连接成功
连接成功以后如图4.1.8所示,其中左边就是Windows文件目录,右边是Ubuntu文件目录,默认进入用户根目录下(比如我电脑的“/home/zuozhongkai”)。但是注意观察在图4.1.8中Ubuntu文件目录下的中文目录都是乱码的,这是因为编码方式没有选对,先断开连接,点击:服务器(S)->断开连接,然后打开站点管理器,选中要设置的站点“Ubuntu”,选择“字符集”,设置如图4.1.9所示:

图4.1.9 设置字符集
按照图4.1.9设置好字符集以后重新连接到FTP服务器上,重新链接到FTP服务器以后Ubuntu下的文件目录中文显示就正常了,如图4.1.10所示:

图4.1.10 Ubuntu下文件目录中文显示正常
如果要将Windows下的文件或文件夹拷贝到Ubuntu中,只需要在图4.1.10中左侧的Windows区域选中要拷贝的文件或者文件夹,然后直接拖到右侧的Ubuntu中指定的目录即可。将Ubuntu中的文件或者文件夹拷贝到Windows中也是直接拖放。
4.2 Ubuntu下NFS和SSH服务开启
4.2.1 NFS服务开启
后面进行Linux驱动开发的时候需要NFS启动,因此要先安装并开启Ubuntu中的NFS服务,使用如下命令安装NFS服务:
sudo apt-get install nfs-kernel-server rpcbind
等待安装完成,安装完成以后在用户根目录下创建一个名为“linux”的文件夹,以后所有的东西都放到这个“linux”文件夹里面,在“linux”文件夹里面新建一个名为“nfs”的文件夹,如图4.2.1所示:

图4.2.1 创建linux工作目录
图4.2.1中创建的nfs文件夹供nfs服务器使用,以后我们可以在开发板上通过网络文件系统来访问nfs文件夹,要先配置nfs,使用如下命令打开nfs配置文件/etc/exports:
sudo vi /etc/exports
打开/etc/exports以后在后面添加如下所示内容:
/home/zuozhongkai/linux/nfs *(rw,sync,no_root_squash)
添加完成以后的/etc/exports如图4.2.2所示:

图4.2.2 修改文件/etc/exports
重启NFS服务,使用命令如下:
sudo /etc/init.d/nfs-kernel-server restart
4.2.2 SSH服务开启
开启Ubuntu的SSH服务以后我们就可以在Windwos下使用终端软件登陆到Ubuntu,比如使用SecureCRT,Ubuntu下使用如下命令开启SSH服务:
sudo apt-get install openssh-server
上述命令安装ssh服务,ssh的配置文件为/etc/ssh/sshd_config,使用默认配置即可。
4.3 Ubuntu交叉编译工具链安装
4.3.1 交叉编译器安装
ARM裸机、Uboot移植、Linux移植这些都需要在Ubuntu下进行编译,编译就需要编译器,我们在第三章“Linux C编程入门”里面已经讲解了如何在Liux进行C语言开发,里面使用GCC编译器进行代码编译,但是Ubuntu自带的gcc编译器是针对X86架构的!而我们现在要编译的是ARM架构的代码,所以我们需要一个在X86架构的PC上运行,可以编译ARM架构代码的GCC编译器,这个编译器就叫做交叉编译器,总结一下交叉编译器就是:
1、它肯定是一个GCC编译器。
2、这个GCC编译器是运行在X86架构的PC上的。
3、这个GCC编译器是编译ARM架构代码的,也就是编译出来的可执行文件是在ARM芯片上运行的。
交叉编译器中“交叉”的意思就是在一个架构上编译另外一个架构的代码,相当于两种架构“交叉”起来了。
交叉编译器有很多种,ST也有推荐的通用交叉编译器,如图4.3.1所示:

图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官方出品的交叉编译器。
首先是下载ARM官方出品的交叉编译器,图4.3.1中也给出了交叉编译器的下载链接:编译器下载地址如下:https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads,打开以后如图4.3.2所示:

图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。
注意!直接从ARM官方下载的交叉编译器在编译TF-A的时候会报错没有stm32wrapper4dbg这命令,后面会讲解如何解决这个问题。
我们要先将交叉编译工具拷贝到Ubuntu中,在4.2.1小节中我们在当前用户根目录下创建了一个名为“linux”的文件夹,在这个linux文件夹里面再创建一个名为“tool”的文件夹,用来存放一些开发工具。使用前面已经安装好的FileZilla将交叉编译器拷贝到Ubuntu中刚刚新建的“tool”文件夹中,操作如图4.3.1.3所示:

图4.3.1.3 拷贝交叉编译器
拷贝完成的话FileZilla会有提示,如图4.3.1.4:

图4.3.1.4 交叉编译器拷贝完成
在Ubuntu中创建目录:/usr/local/arm,命令如下:
sudo mkdir /usr/local/arm
创建完成以后将刚刚拷贝的交叉编译器复制到/usr/local/arm这个目录中,在终端使用命令“cd”进入到存放有交叉编译器的目录,比我前面将交叉编译器拷贝到了目录“/home/zuozhongkai/linux/tool”中,然后使用如下命令将交叉编译器复制到/usr/local/arm中:
sudo cp gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz /usr/local/arm/ -f
拷贝完成以后在/usr/local/arm目录中对交叉编译工具进行解压,解压命令如下:
sudo tar -vxf gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz
等待解压完成,解压完成以后会生成一个名为“gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf”的文件夹,这个文件夹里面就是我们的交叉编译工具链。
修改环境变量,使用打开/etc/profile文件,命令如下:
sudo vi /etc/profile
打开/etc/profile以后,在最后面输入如下所示内容:
export PATH=$PATH:/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin
添加完成以后的/etc/profile如图4.3.1.5所示:

图4.3.1.5 添加环境变量
修改好以后就保存退出,重启Ubuntu系统,交叉编译工具链(编译器)就安装成功了。
4.3.2 安装相关库
在使用交叉编译器之前还需要安装一下其它的库,命令如下:
sudo apt-get update //先更新,否则安装库可能会出错
sudo apt-get install lsb-core lib32stdc++6 //安装库
等待这些库安装完成。
4.3.3 交叉编译器验证
首先查看一下交叉编译工具的版本号,输入如下命令:
arm-none-linux-gnueabihf-gcc -v
如果交叉编译器安装正确的话就会显示版本号,如图4.3.3.1所示:

图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”的含义如下:
1、arm表示这是编译arm架构代码的编译器。
2、none表示厂商,一般半导体厂商会修改通用的交叉编译器,此处就是半导体厂商的名字,ARM自己做的交叉编译这里为none,表示没有厂商。
3、linux表示运行在linux环境下。
4、gnueabihf表示嵌入式二进制接口,后面的hf是hard float的缩写,也就是硬件浮点,说明此交叉编译工具链支持硬件浮点。
5、gcc表示是gcc工具。
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所示:

图4.5.1.1 VSCode下载界面
在图4.5.1.1中下载自己想要的版本,本教程需要Windows和Linux这两个版本,所以下载这两个即可,我们已经下载好并放入了开发板光盘中,路径为:3、软件->Visual Studio Code。
1、Windows版本安装
Windows版本的安装和容易,和其他Windows一样,双击.exe安装包,然后一路“下一步”即可,安装完成以后在桌面上就会有VSCode的图标,如图4.5.1.2所示:

图4.5.1.2 VSCode图标
双击图4.5.1.2打开VSCode,默认界面如图4.5.1.3所示:

图4.5.1.3 VSCode默认界面
2、Linux版本安装
我们有时候也需要在Ubuntu下阅读代码,所以还需要在Ubuntu下安装VSCode。Linux下的VSCode安装包我们也放到了开发板光盘中, 将开发板光盘中的.deb软件包拷贝到Ubuntu系统中,然后使用如下命令安装:
sudo dpkg -i code_1.50.1-1602600906_amd64.deb
等待安装完成,如图4.5.1.4所示:

图4.5.1.4 VSCode安装过程
安装完成以后搜索“Visual Studio Code”就可以找到,如图4.5.1.5所示:

图4.5.1.5 Visual Studio Code
每次打开VSCode都要搜索,太麻烦了,我们可以将图标添加到Ubuntu桌面上,安装的所有软件图标都在目录/usr/share/applications中,如图4.5.1.6所示:

图4.5.1.6 软件图标
在图4.5.1.6中找到Visual Studio Code的图标,然后点击鼠标右键,选择复制到->桌面,如图4.5.1.7所示:

图4.5.1.7 复制图标到桌面
按照图4.5.1.7所示方法将VSCode图标复制到桌面,第一次双击的时候会提示“未信任的应用程序启动器”,如图4.5.1.8所示:

图4.5.1.8 “未信任的应用程序启动”对话框
点击图4.5.1.8中的“Trust and Launch”,选择信任即可。以后就可以直接双击图标打开VSCode,Ubuntu下的VSCode打开以后如图4.5.1.9所示:

图4.5.1.9 Linux下的VSCode
可以看出Linux下的VSCode和Windows下的基本是一样的,所以使用方法也是一样的。
4.5.2 Visual Studio Code插件的安装
VSCode支持多种语言,比如C/C++、Python、C#等等,本教程我们主要用来编写C/C++程序的,所以需要安装C/C++的扩展包,扩展包安装很简单,如图4.5.2.1所示:

图4.5.2.1 VSCode插件安装
我们需要按照的插件有下面几个:
1)、C/C++,这个肯定是必须的。
2)、C/C++ Snippets,即C/C++重用代码块。
3)、C/C++ Advanced Lint,即C/C++静态检测 。
4)、Code Runner,即代码运行。
5)、Include AutoComplete,即自动头文件包含。
6)、Rainbow Brackets,彩虹花括号,有助于阅读代码。
7)、One Dark Pro,VSCode的主题。
8)、GBKtoUTF8,将GBK转换为UTF8。
9)、ARM,即支持ARM汇编语法高亮显示。
10)、Chinese(Simplified),即中文环境。
11)、vscode-icons,VSCode图标插件,主要是资源管理器下各个文件夹的图标。
12)、compareit,比较插件,可以用于比较两个文件的差异。
13)、DeviceTree,设备树语法插件。
14)、TabNine,一款AI自动补全插件,强烈推荐,谁用谁知道!
安装完成以后重新打开VSCode,如果要查看已经安装好的插件,可以按照图4.5.2.2所示方法查看:

图4.5.2.2 显示已安装的插件
由于我们已经安装了中文插件,因此重新打开VSCode以后就会是中文界面了,如图4.5.2.3所示:

图4.5.2.3 VSCode中文环境
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所示:

图4.5.3.2 工作区保存设置
工作区保存成功以后,点击图4.5.3.1中的“新建文件”按钮创建main.c和main.h这两个文件,创建成功以后VSCode如图4.5.3.3所示:

图4.5.3.2 新建文件以后的VSCode
从图4.5.3.2可以看出,此时“实验1 TEST”中有.vscode文件夹、main.c和main.h,这三个文件和文件夹同样会出现在“实验1 test”文件夹中,如图4.5.3.3所示:

图4.5.3.3 实验文件夹
在main.h中输入如下所示内容:
示例代码4.5.3.1 main.h文件代码

1 #include <stdio.h>
2
3 int add(int a, int b);在main.c中输入如下所示内容:
示例代码4.5.3.2 main.c文件代码
1  #include <main.h>
2
3  int add(int a, int b)
4  {5      return (a + b);
6  }
7
8  int main(void)
9  {10     int value = 0;
11
12     value = add(5, 6);
13     printf("5 + 6 = %d", value);
14     return 0;
15 }
代码编辑完成以后VSCode界面如图4.5.3.4所示:

图4.5.3.4 代码编辑完成以后的界面
从图4.5.3.4可以看出,VSCode的编辑的代码高亮很漂亮,阅读起来很舒服。但是此时提示找不到“stdio.h”这个头文件,如图4.5.3.5所示错误提示:
在这里插入图片描述

图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所示:

图4.5.3.6 打开C/C++编辑配置文件
C/C++的配置文件是个json文件,名为:c_cpp_properties.json,此文件默认内容如图4.5.3.7所示:

图4.5.3.7 文件c_cpp_properties.json内容
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 取消预览
我们在编写代码的时候有时候会在右下角有如图4.5.3.9所示的警告提示:

图4.5.3.9 错误提示
这是因为插件C/C++ Lint打开了几个功能,我们将其关闭就可以了,顺便也可以学习一下VSCode插件配置方法,如图4.5.3.10所示:

图4.5.3.10 C/C++ Lint配置界面
在C/C++ Lint配置界面上找到CLang:Enable、Cppcheck:Enable、Flexlint:Enable这个三个,然后取消掉勾选即可,如图4.5.3.11所示:

图4.5.3.11 C/C++ Lint配置
按照图4.5.3.11所示取消这三个有关C/C++ Lint的配置以后就不会有图4.5.3.9所示的错误提示了。但是关闭Cppcheck:Enable以后VSCode就不能实时检查错误了,大家根据实际情况选择即可。

【正点原子MP157连载】 第四章 开发环境搭建-摘自【正点原子】【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7相关推荐

  1. 【正点原子MP157连载】第二十三章 Linux设备树-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  2. 【正点原子MP157连载】第四十章 Linux I2C驱动实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  3. 【正点原子MP157连载】第二十五章 pinctrl和gpio子系统实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  4. 【正点原子MP157连载】第三十五章 设备树下的platform驱动编写-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  5. 【正点原子MP157连载】第二十二章 新字符设备驱动实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  6. 【正点原子MP157连载】第二十章 字符设备驱动开发-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  7. 【正点原子MP157连载】第二十八章 Linux并发与竞争实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  8. 【正点原子MP157连载】第四十三章 外置RTC芯片PCF8563实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  9. 【正点原子MP157连载】第二十四章 设备树下的LED驱动实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

最新文章

  1. Linux下磁盘分区工具cfdisk的使用
  2. centos7重新加载服务的命令_阿粉手把手教你在 CentOS7 下搭建 Jenkins
  3. 有道精品课python-有道精品课-Python小咖养成计划
  4. 使用SDL打造游戏世界之入门篇 - 6
  5. Chrome 静默打印及其它启动参数
  6. angular 点击事件阻止冒泡及默认行为
  7. 转 结构体中字节对齐问题(转载)
  8. 夺命雷公狗---DEDECMS----26dedecms面包屑导航的实现
  9. 巧用TensorFlow实现图像处理
  10. Java笔记-SSLSocket双向认证实例
  11. CSS 滤镜学习小结
  12. 计算机二级地15套题答案,计算机二级第15套答案解析.docx
  13. MySQL join 与where的执行顺序
  14. 如何使用EDI系统解决对接多工厂的问题?
  15. 客户端navicat安装教程
  16. 【ubuntu工具】ubuntu下文件对比软件meld
  17. 关于nubia z9 NX508J notification 不显示的问题
  18. 台式计算机为什么数字输入不了,电脑小键盘不能输入数字该怎么办?
  19. 集成学习算法策略 Boosting和Bagging
  20. 三,Linux SDIO驱动框架之扫卡流程

热门文章

  1. 带你了解Docker背后的守护进程
  2. 前端js——tab选项卡切换模板、例子(点击标签显示对应内容)
  3. 【云计算】制造业云计算应用趋势分析!
  4. Beyond Compare 4提示已经过了30天试用期
  5. Imported project refers to unknown jdks JavaSE-11报错版本不匹配问题
  6. vba word 查找_Word批量查找替换VBA代码
  7. [RK3399][Android7.1] 调试笔记 --- I2S1工作输出是12MHz问题
  8. 华硕灵耀X 14 2022和联想YOGA Pro14s的区别 选哪个好
  9. Android 源码 Camera2 预览流程分析四
  10. 易基因|文献解读:儿童发生β细胞自身免疫的早期DNA甲基化变化 | 糖尿病研究