【北京迅为】《STM32MP157开发板使用手册》-第十九章 Yocto系统开发

news2024/9/25 15:26:16

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7+单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板+底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐用,可满足高速信号环境下使用。共240PIN,CPU功能全部引出:底板扩展接口丰富底板板载4G接口(选配)、千兆以太网、WIFI蓝牙模块HDMI、CAN、RS485、LVDS接口、温湿度传感器(选配)光环境传感器、六轴传感器、2路USB OTG、3路串口,CAMERA接口、ADC电位器、SPDIF、SDIO接口等


十九章 Yocto系统开发

嵌入式Linux解决方案应用范围广泛,灵活多变且经济高效,具有巨大的价值,这也致使方案开发人员必须构建定制Linux版本来满足其特定需求。

一直以来,开发人员不得不向各家芯片制造厂商寻求主板支持包(BSP)和工具。而且这些部件往往是基于不同制式开发的。虽然市面上有数百种可用的嵌入式Linux发行版,但每个版本都是高度定制的,这导致了大量的重复工作,很多开发人员创建了大同小异的Linux版本,再基于其开发自己的增值特性和功能。

Yocto是一个开源社区。它通过提供模板、工具和方法帮助开发者创建基于linux内核的定制系统,支持ARM,PPC,MIPS,x86(32&64bit)硬件体系架构。

Yocto Project为解决嵌入式Linux开发乱象迈出了一大步。芯片、操作系统和设备厂商之间的协作和战略规划有助于实现广泛而一致的行业支持。因此,操作系统厂商可以基于Yocto Project内核来开发商业操作系统和其他产品,而且芯片厂商也可以提供硬件BSP。

该项目有以下优势:

健壮的构建系统。Yocto Project支持从其他常用构建系统轻松迁移到Yocto Project的经过事实验证的环境,而且新的软件版本更新也十分容易。

灵活的定制能力。开发人员可以自由选择资源的使用,或者完善特定的组件(包括这些组件的特定版本)。

可简单地向商业操作系统迁移。Yocto Project的设计允许用户使用自主开发的操作系统或商业操作系统,在迁移时不会丢失优化或功能。此外,商业操作系统也可以使用Yocto Project作为上游资源,从而确保最大化代码重用。

综上所述,Yocto Project赋予开发人员一个极高的起点,帮助他们避免重复工作以及不必要的维护。事实上,Yocto Project是全球最大的开源项目之一,以此为基础而开发的通用创建系统,可帮助开发人员避免从零开始,转而把时间和资源集中于开发差异化Linux设备,从而实现投资回报最大化。

ST官方提供的构建链接为:

https://wiki.stmicroelectronics.cn/stm32mpu/index.php/STM32MP1_Distribution_Package

19.1编译环境搭建

注意事项:

1)ubuntu内存8G以上,越大越好,作者环境是16G。

2)保证硬盘剩余空间至少100G。

3)yocto构建时会在线下载很多文件,我们需要要保证ubuntu网络环境。

4)所有操作均在非root用户下执行

5)建议使用我们提供好的编译环境

使用命令安装其他软件包

sudo apt-get install git gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev libsdl1.2-dev xterm sed cvs subversion coreutils texi2html docbook-utils python-pysqlite2 help2man make gcc g++ desktop-file-utils libgl1-mesa-dev libglu1-mesa-dev mercurial autoconf automake groff curl lzop asciidoc python3-pip  python3-jinja2 pylint3 python3-git

安装其他依赖软件包,如下两个图所示:

19.2构建 Yocto 文件系统

拷贝“iTOP-STM32MP157开发板\iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\06_yocto文件系统\01_拉取好的layers源码”目录下的openstlinux-5.4-dunfell-mp1-20-11-12.tar.gz到虚拟机ubuntu目录下,如下图所示: 

 

使用命令

tar -vxf openstlinux-5.4-dunfell-mp1-20-11-12.tar.gz

对文件进行解压,解压完成如下图所示:

使用命令进入解压出来的openstlinux-5.4-dunfell-mp1-20-11-12目录,如下图所示: 

 

然后使用以下命令设置环境脚本,如下图所示:

DISTRO=openstlinux-weston MACHINE=stm32mp1 source layers/meta-st/scripts/envsetup.sh

设置过程中会弹出阅读界面,点击TAB按键选择EXIT(注意这里选择的是退出,不是选择接受,否则自己编译的QT程序可能会失败),如下图所示:

 

如下图完成会自动进入build-openstlinuxweston-stm32mp1目录如下如图所示: 

由于构建的过程之中会下载大量的文件压缩包,且大量的源码包都在国外,所以可能会报错且锁花费的时间过长,为了方便起见我们已经将所需下载的源码包打包,存放路径为“iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\06_yocto文件系统\02_下载文件”下的downloads.tar.gz文件。

首先将downloads.tar.gz拷贝到build-openstlinuxweston-stm32mp1目录下,拷贝完成如下图所示:

然后使用命令

tar -vxf downloads.tar.gz

对downloads.tar.gz文件进行解压缩,解压完成如下图所示:

 

然后我们使用命令“vim conf/local.conf”,进入local.conf文件夹,在文件最下方添加以下内容,添加完成如下图所示:

#check connectivity using google

CONNECTIVITY_CHECK_URIS = "https://www.google.com/"

#skip connectivity checks

CONNECTIVITY_CHECK_URIS = ""

 

最后使用命令

bitbake st-example-image-qtwayland

 开始进行系统的构建,如下图所示:

在构建的过程中,可能会出现报错,绝大部分都是网络问题,使用命令

bitbake st-example-image-qtwayland

重新开始构建即可。

编译完成如下如图所示:

 至此我们的yocto文件系统就编译完成了。编译完成后所生成的镜像文件保存在tmp-glibc/deploy/images/stm32mp1目录下,如下图所示:

每个镜像文件的介绍将在下一章节进行讲解。

但我们还需要构建交叉编译工具链,所以我们还需要在当前路径下使用以下命令,编译完成如下图所示(注意该工具链编译可能会卡在某一个地方,造成编译失败,可以直接使用我们提供好的交叉编译工具链,存放路径为“iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\06_yocto文件系统\03_交叉编译器”):

bitbake st-example-image-qtwayland -c populate_sdk

 

所生成的编译器配置脚本存放位置为tmp-glibc/deploy/sdk路径下,如下图所示:

 

将在22.4小节进行交叉编译器的使用。

19.3镜像介绍

编译完成后所生成的镜像文件保存在tmp-glibc/deploy/images/stm32mp1目录下,为了适配我们自己的开发板,关于tf-a、uboot和kernel我们对源码进行了部分的修改,所以在该目录下,我们需要的镜像只有文件系统相关的镜像以及其对应的烧写配置文件。存在作用的具体文件名称如下图所示(为了便于查看我这里用的是tar.xz格式的文件,但我们烧写的时候所需要的为ext4格式的镜像,镜像之间内容相同)。

st-image-bootfs-openstlinux-weston-stm32mp1.tar.xz  

st-image-vendorfs-openstlinux-weston-stm32mp1.tar.xz

st-example-image-qtwayland-openstlinux-weston-stm32mp1.tar.xz  

st-image-userfs-openstlinux-weston-stm32mp1.tar.xz

 

为了方便起见我们已经对上述文件进行了解压,并存在在了对应的目录下,首先st-image-bootfs-openstlinux-weston-stm32mp1.tar.xz解压完成如下图所示:

为了适配我们自己的开发板,我们对内核和设备树源码进行了修改,所以在此生成的镜像不匹配,我们使用内核编译章节制作的镜像即可。

然后是st-image-vendorfs-openstlinux-weston-stm32mp1.tar.xz文件,解压之后产生一个lib文件夹,文件内容如下图所示:

此分区存放第三方的版权信息,确保它们不会受到任何开源许可的污染,该lib文件中的库文件不可缺少,否则yocto桌面可能会无法正常启动。

然后是st-example-image-qtwayland-openstlinux-weston-stm32mp1.tar.xz文件,该文件是文件系统镜像,解压之后文件内容如下图所示:

此分区存放第三方的版权信息,确保它们不会受到任何开源许可的污染,该lib文件中的库文件不可缺少,否则yocto桌面可能会无法正常启动。

然后是st-example-image-qtwayland-openstlinux-weston-stm32mp1.tar.xz文件,该文件是文件系统镜像,解压之后文件内容如下图所示:

 

最后是st-image-userfs-openstlinux-weston-stm32mp1.tar.xz文件,userfs用户自行使用的剩余空间,在这里ST官方为我们准备了一些默认例程,让我们可以进行初步的尝试,如下图所示:  

 

而我们本章节所应用的为这个demo文件夹内的桌面例程。稍后我们会进行演示。

19.4镜像烧写

为了方便起见我们已经将烧写文件存放在了“iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\06_yocto文件系统\04_烧写镜像文件\image”路径下。

19.4.1 文件系统内容的添加

可以直接烧写我们制作好的烧写镜像,本小节可以跳过。

由于我们需要自动装载一些ko驱动文件且让这些文件在开机之后自动装载,我们回到上一小节st-example-image-qtwayland-openstlinux-weston-stm32mp1.tar.xz解压出来的文件系统镜像目录下,如下图所示:

 

我们首先拷贝“iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\06_yocto文件系统\05_ko”路径下的ko文件夹到文件系统的usr目录下,拷贝完成如下图所示: 

然后将“iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\06_yocto文件系统\06_rc.local”路径下的rc.local文件拷贝到文件系统的etc目录下,然后使用命令“sudo chmod  777 rc.local”修改文件对应的权限,如下图所示: 

然后我们来制作镜像,如下图所示,是yocto系统文件 

使用命令“mkdir yocto创建一个文件夹yocto用来挂载之后要制作出来的 st-example-image-qtwayland-openstlinux-weston-stm32mp1.ext4文件系统镜像如下图所示:

然后使用命令

dd if=/dev/zero of=st-example-image-qtwayland-openstlinux-weston-stm32mp1.ext4 bs=1M count=600 

mkfs.ext4 -L rootfs st-example-image-qtwayland-openstlinux-weston-stm32mp1.ext4

建立一个大小为600M的ext4 磁盘,如下图所示:

接下来使用 mount 命令将  st-example-image-qtwayland-openstlinux-weston-stm32mp1.ext4 挂载到rootfs 目录下挂载要使用root用户如下图所示:

 mount ./st-example-image-qtwayland-openstlinux-weston-stm32mp1.ext4 yocto

 

然后拷贝我们制作的文件系统到rootfs 目录下,如下图所示:

cp -a rootfs/* ./yocto

 

拷贝完成后,使用命令“umount yocto/”,进行解除挂载,如下图所示:

至此我们的文件系统镜像就制作完成了,然后覆盖掉我们“iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\06_yocto文件系统\04_烧写镜像文件\image”路径下的st-example-image-qtwayland-openstlinux-weston-stm32mp1.ext4即可。

Yocto系统的镜像烧写和之前的QT系统存在区别,QT系统所使用的内核可以不用区分屏幕,而Yocto系统不同。所以我们在烧写镜像的时候需要修改对应的内核镜像,我们镜像存放路径为“iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\06_yocto文件系统\04_烧写镜像文件\不同屏幕的内核镜像”,如下图所示:

 

在这里rootfs.ext4为我们要烧写文件系统的镜像。而rootfs.tar.gz为我们文件系统的源码,之后对文件系统的修改都是通过rootfs.tar.gz源码文件来修改的,最后就是我们的不同屏幕的内核镜像,进入该文件如下图所示: 

这里只有四种屏幕的内核镜像,原因是这四种屏幕所使用的触摸驱动相同,而剩下的4.3寸屏幕和10.1寸屏幕所用到的驱动不同,故以上任何一个内核镜像都可以适配。而我们用到以上四种屏幕之后,需要拷贝对应目录下的bootfs.ext4内核镜像来替换烧写文件image目录下的bootfs.ext4文件。

然后我们可以根据烧写章节进行对应的烧写。

19.4.2 镜像的烧写

可以参考“第八章STM32MP157烧写系统”章节来进行镜像的烧写,烧写完成启动,在uboot倒计时的过程中点击任意键进入uboot命令行,如下图所示:

首先根据“8.7 设置屏幕参数”小节设置对应的屏幕参数,然后根据“8.8 设置系统启动参数”章节设置为yocto系统,在此使用4.3寸屏幕作为演示,具体命令如下图所示:

setenv lcdtype 4.3

setenv bootsystem yocto

saveenv

 

然后我们输入“reset”重启开发板,重启完成进入系统,如下图所示: 

 

然后我们要对屏幕进行校准,首先使用以下命令来显示当前的触摸设备,如下图所示:

weston-touch-calibrator

 

可以看到我们的触摸设备路径为/sys/devices/platform/soc/40013000.i2c/i2c-0/0-0048/input/input3/event2,然后我们使用命令

weston-touch-calibrator /sys/devices/platform/soc/40013000.i2c/i2c-0/0-0048/input/input3/event2

来对屏幕进行校准(这里要注意的是,每个触摸设备的路径不相同,要根据自己的情况来输入命令),输入命令之后,在屏幕上会出现十字准星,触摸屏幕校准即可。校准完成如下图所示:

 

19.5交叉编译器的使用

交叉编译器安装脚本存放路径为“iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\06_yocto文件系统\03_交叉编译器

在19.2章节中我们也构建了交叉编译器,我们首先来到编译器配置脚本存放位置tmp-glibc/deploy/sdk目录下,如下图所示:

然后我们使用以下命令,运行编译器设置脚本。如下图所示:

./st-example-image-qtwayland-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-snapshot.sh

 

中间需要自己根据终端提示来点击回车和输入Y,设置完成之后如下图所示: 

 

使用命令

ls /opt/st/stm32mp1/3.1-snapshot/

查找对应路径可以看到安装成功,如下图所示:

 然后我们使用以下命令设置对应的交叉编译环境,如下图所示:

 . /opt/st/stm32mp1/3.1-snapshot/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

 

完成后执行命令“echo $CC”,如下图所示,发现环境变量已改变,

1)交叉编译Qt程序

在这里我们以QT日历的例程来做相关的测试,例程存放路径为“iTOP-STM32MP157开发板网盘资料汇总\04_测试例程\02_QtE5.12应用例程\iTOP-STM32MP157-QtE5.12-QT日历_V1.0.zip”。解压之后,将QCalendar文件拷贝到ubuntu虚拟机上,拷贝完成如下图所示:

然后执行“qmake”生成Makefile,如下图所示:

然后执行“make”编译应用程序,如下图所示: 

 

编译完成如下图所示,其中QCalendar是我们要拷贝到开发板的可执行文件。

通过U盘或者其他方式将QCalendar拷贝到开发板,如下图所示: 

然后使用命令“./QCalendar”命令运行该QT程序,运行成功如下图所示:

2)交叉编译不带图形界面的应用程序

vim helloworld.c

#include <stdio.h>

int main()

{

        printf("hello world !!\r\n");

        return 0;

}

保存退出。完成后执行命令“echo $CC”,如下图所示,发现环境变量已改变,

 

执行命令

$CC -o helloworld helloworld.c

即可将helloworld.c编译成功

 

通过U盘或者其他方式将helloworld拷贝到开发板,然后使用命令“./helloworld”命令运行该程序,运行成功如下图所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2121404.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++——list的实现

目录 0.前言 1.节点类 2.迭代器类 ①普通迭代器 ②const迭代器 ③模板迭代器 3.list类 3.1 clear、析构函数、swap ①clear ② 析构函数 ③ swap 3.2构造函数 ①无参构造 ②赋值构造 3.3 迭代器 3.4插入函数 ①insert插入 ②头插 ③尾插 3.5 删除函数…

【分治】归并排序

【分治】归并排序 1. 排序数组1. 1题目来源1.2 题目描述1.3 题目解析 2. LCR 170. 交易逆序对的总数2. 1题目来源2.2 题目描述2.3 题目解析 3. 计算右侧小于当前元素的个数3. 1题目来源3.2 题目描述3.3 题目解析 1. 排序数组 1. 1题目来源 912. 排序数组 1.2 题目描述 给你…

JAVA毕业设计171—基于Java+Springboot+vue3+小程序的宠物店小程序系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue3小程序的宠物店小程序系统(源代码数据库)171 一、系统介绍 本项目前后端分离(可以改为ssm版本)&#xff0c;分为用户、店员、管理员三种角色 1、用户&…

存储课程学习笔记1_访问scsi磁盘读写测试(struct sg_io_hdr,ioctl,mmap)

创建虚拟机时&#xff0c;可以选择SCSI,STAT,NVME不同类型的磁盘。 0&#xff1a;总结 》了解内核提供的访问scsi的结构和方法 &#xff08;主要是sg_io_hdr_t 结构体和ioctl函数&#xff09;。 》需要读scsi协议文档&#xff0c;了解相关指令&#xff0c;只演示了16字节固定…

华为eNSP :WLAN的配置

一、WLAN的知识点&#xff1a; VLAN配置&#xff1a; VLAN&#xff1a;可以想象成一个大房子&#xff08;网络&#xff09;里划分的不同房间&#xff08;VLAN&#xff09;。每个房间可以有自己的功能&#xff0c;比如一个用于睡觉&#xff08;管理&#xff09;&#xff0c;另一…

软件工程知识点总结(5):详细设计

面向对象详细设计举例&#xff1a;接口描述、算法描述、数据描述 类的详细描述&#xff0c;内含数据、 方法及方法的参数返回值 public class User { private String userId; private String userName; private String password; private int type; public User(String userId…

基于APISIX实现API网关案例分享

一、APISIX介绍 1、定义 Apache APISIX 是一个动态、实时、高性能的云原生 API 网关。它构建于 NGINX + ngx_lua 的技术基础之上,充分利用了 LuaJIT 所提供的强大性能。 2、软件架构 2.1、架构图 APISIX 主要分为两个部分: APISIX 核心:包括 Lua 插件、多语言插件运行时…

ICM20948 DMP代码详解(12)

接前一篇文章&#xff1a;ICM20948 DMP代码详解&#xff08;11&#xff09; 上一回开始解析icm20948_sensor_setup函数的第2段代码也即inv_icm20948_init_matrix函数&#xff1a; /* Setup accel and gyro mounting matrix and associated angle for current board */inv_icm20…

前端技术(七)——less 教程

一、less简介 1. less是什么&#xff1f; less是一种动态样式语言&#xff0c;属于css预处理器的范畴&#xff0c;它扩展了CSS语言&#xff0c;增加了变量、Mixin、函数等特性&#xff0c;使CSS 更易维护和扩展LESS 既可以在 客户端 上运行 &#xff0c;也可以借助Node.js在服…

关于武汉芯景科技有限公司的IIC缓冲器芯片XJ4307开发指南(兼容LTC4307)

一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、系统结构图 三、功能描述 1.总线超时&#xff0c;自动断开连接 当 SDAOUT 或 SCLOUT 为低电平时&#xff0c;将启动内部定时器。定时器仅在相应输入变为高电平时重置。如果在 30ms &#xff08;典型值&#xff09; 内没有变为高…

社交媒体的未来:Facebook如何通过AI技术引领潮流

在数字化时代的浪潮中&#xff0c;社交媒体平台不断演变&#xff0c;以适应用户需求和技术发展的变化。作为全球领先的社交媒体平台&#xff0c;Facebook在这一进程中扮演了重要角色。尤其是人工智能&#xff08;AI&#xff09;技术的应用&#xff0c;正在深刻地改变Facebook的…

Docker零基础入门

参考课程https://www.bilibili.com/video/BV1VC4y177re/?vd_source=b15169a302bee35f484245aecc69d4dd 参考书籍Docker 实践 - 面向 AI 开发人员的 Docker 实践 (dockerpractice.readthedocs.io) 1. 什么是Docker 1.1. Docker起源 随着计算机的发展,计算机上已经可以运行多…

Stable Diffusion绘画 | ControlNet应用-Inpaint(局部重绘):更完美的重绘

Inpaint(局部重绘) 相当于小号的AI版PS&#xff0c;不但可以进行局部画面的修改&#xff0c;还可以去除背景中多余的内容&#xff0c;或者是四周画面内容的扩充。 预处理器说明 Inpaint_Global_Harmonious&#xff1a;重绘-全局融合算法&#xff0c;会对整个图片的画面和色调…

【无标题】SAM(Segment Anything Model)

1.SAM是什么&#xff1f; SAM是基于NLP的一个基础模型&#xff0c;专注于提示分割任务&#xff0c;使用提升工程来适应不同的下游分割任务。 2.SAM有什么用&#xff1f; 1&#xff09;SAM 可以通过简单地单击或交互选择要包含或排除在对象中的点来分割对象。还可以通过使用多边…

成都爱尔综合眼病科李晓峰主任解析空调续命,干眼别忍!

高温酷暑&#xff0c;命都是空调给的。 凉风一直吹&#xff0c;根本不敢停。 热到大汗淋漓&#xff0c;身体缺水&#xff0c;眼睛也是。 屋外闷热湿度不低&#xff0c;屋内空调一开湿度“骤降”不够用。 房间被“除湿”&#xff0c;眼睛也不例外。 长时间吹空调&#xff0c…

基于C++实现(控制台)模拟网上购书订单管理系统

模拟网上购书订单管理系统&#xff08;大一小学期C大作业&#xff09; 一、任务 1. 基础任务 建立继承了Buyer类的三个子类作为顾客的三种类型&#xff0c;用于管理顾客对象&#xff1b;建立Book类&#xff0c;管理书本对象&#xff1b;根据不同类型的顾客&#xff0c;计算出…

全球主要指数年度收益率汇总

1 美国 1.1 道琼斯工业平均指数 DJIA 1.2 纳斯达克综合指数 IXIC 1.3 纳斯达克100指数 NDX 1.4 标准普尔500 INX 2 中国 2.1 国债指数 000021 2.2 上证综指 000001 2.3 深证成指 399001 2.4 创业板 399006 2.5 中小100 399005 2.6 上证50 000016 3 香港

智能可视耳勺怎么用?智能可视耳勺使用方法!

随着科技的进步&#xff0c;有很多人摒弃了传统挖耳勺&#xff0c;选择更加高效直观的智能可视耳勺&#xff0c;这是因为智能可视耳勺能更加直观地看到耳朵的内部&#xff0c;让掏耳过程清晰明了&#xff0c;精准掏出耳垢。 但市场有的智能可视耳勺鱼龙混杂&#xff0c;很多人在…

【解决】vue 弹窗后面页面可以滚动问题

做web端项目过程中&#xff0c;发现点击弹窗后&#xff0c;弹窗后面的页面还可以滚动。 复现如下&#xff1a; 【方法1】 step1&#xff1a;在弹框页面使用 mousewheel.prevent <divv-show"workShowMenu"mousewheel.prevent>// TO DO...弹框内容 </div&…

C盘清理 拯救你的C盘!C盘从此不再爆满~!

C盘清理&#xff0c;拯救你的C盘&#xff01;C盘从此不再爆满~&#xff01;C盘爆满是许多人经常遇到的问题&#xff0c;它可能导致系统运行缓慢甚至崩溃&#xff0c;对于这种情况&#xff0c;我们要从根源触发&#xff0c;彻底的清理干净C盘垃圾。 一般的C盘清理有下面几种方法…