ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置

目录

前沿

Ubuntu 和 Windows 文件互传

Ubuntu 下 NFS 和 SSH 服务开启

 Ubuntu 交叉编译工具链安装

Source Insight 软件安装和使用

Visual Studio Code 软件的安装和使用


前沿

为什么我们要学习裸机开发呢?

        1、裸机开发是了解所使用的 CPU 最直接、最简单的方法,比如使用的 I.MX6U,跟STM32 一样,裸机开发是直接操作 CPU 的寄存器。Linux 驱动开发最终也是操作的寄存器,但是在操作寄存器之前要先编写一个符合 Linux 驱动的框架。同样一个点灯驱动,裸机可能只需要十几行代码,但是 Linux 下的驱动就需要几十行代码。
        2、大部分 Linux 驱动初学者都是从 STM32 转过来的,Linux 驱动开发和 STM32 开发区别很大,比如 Linux 没有 MDK、IAR 这样的集成开发环境,需要我们自己在 Ubuntu 下搭建交叉编译环境。
        3、裸机开发是连接 Cortex-M(如 STM32)单片机和 Cortex-A(如 I.MX6U)处理器的桥梁。

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

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

确保上面两行前面没有“#”,有的话就取消掉,完成以后如图 下所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第1张图片

修改完 vsftpd.conf 以后保存退出,使用如下命令重启 FTP 服务: 

sudo /etc/init.d/vsftpd restart

2、Windows下FTP客户端安装

Windows 下 FTP 客户端我们使用 FileZilla,这是个免费的 FTP 客户端软件,可以在 FileZilla
官网下载,下载地址如下:https://www.filezilla.cn/download,下载界面如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第2张图片

 打开 FileZilla 软件,界面如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第3张图片

 3、FileZilla 软件设置

        Ubuntu 作为 FTP 服务器,FileZilla 作为 FTP 客户端,客户端肯定要连接到服务器上,打开站点管理器,点击:文件->站点管理器,打开以后如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第4张图片

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

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第5张图片

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

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第6张图片

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

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第7张图片

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

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第8张图片

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

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第9张图片

         如果要将 Windows 下的文件或文件夹拷贝到 Ubuntu 中,只需要在上图中左侧的Windows 区域选中要拷贝的文件或者文件夹,然后直接拖到右侧的 Ubuntu 中指定的目录即可。将 Ubuntu 中的文件或者文件夹拷贝到 Windows 中也是直接拖放。

Ubuntu 下 NFS 和 SSH 服务开启

1.NFS 服务开启

        后面进行 Linux 驱动开发的时候需要 NFS 启动,因此要先安装并开启 Ubuntu 中的 NFS服务,使用如下命令安装 NFS 服务:

sudo apt-get install nfs-kernel-server rpcbind

        等待安装完成,安装完成以后在用户根目录下创建一个名为“linux”的文件夹,以后所有的东西都放到这个“linux”文件夹里面,在“linux”文件夹里面新建一个名为“nfs”的文件夹,如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第10张图片

        上图中创建的 nfs 文件夹供 nfs 服务器使用,以后我们可以在开发板上通过网络文件系统来访问 nfs 文件夹,要先配置 nfs,使用如下命令打开 nfs 配置文件/etc/exports:

sudo vi/etc/exports

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第11张图片

 重启 NFS 服务,使用命令如下:

sudo /etc/init.d/nfs-kernel-server restart

SSH 服务开启

        开启 Ubuntu 的 SSH 服务以后我们就可以在 Windwos 下使用终端软件登陆到 Ubuntu,比如使用 SecureCRT,Ubuntu 下使用如下命令开启 SSH 服务:

sudo apt-get install openssh-server

        上述命令安装 ssh 服务,ssh 的配置文件为/etc/ssh/sshd_config,使用默认配置即可。

 Ubuntu 交叉编译工具链安装

1.交叉编译器安装

        ARM 裸机、Uboot 移植、Linux 移植这些都需要在 Ubuntu 下进行编译,编译就需要编译器,我们在前边文章Ubuntu下Linux C编程里面已经介绍了如何在 Liux 进行 C 语言开发,里面使用 GCC 编译器进行代码编译,但是 Ubuntu 自带的 gcc 编译器是针对 X86 架构的!而我们现在要编译的是 ARM 架构的代码,所以我们需要一个在 X86 架构的 PC 上运行,可以编译 ARM 架构代码的 GCC 编译器,这个编译器就叫做交叉编译器,总结一下交叉编译器就是:

  • 它肯定是一个 GCC 编译器。
  • 这个 GCC 编译器是运行在 X86 架构的 PC 上的。
  • 这个 GCC 编译器是编译 ARM 架构代码的,也就是编译出来的可执行文件是在 ARM 芯片上运行的。

        交叉编译器中“交叉”的意思就是在一个架构上编译另外一个架构的代码,相当于两种架构“交叉”起来了。

        交叉编译器有很多种,我们使用 Linaro 出品的交叉编译器,Linaro 是一间非营利性质的开放源代码软件工程公司,Linaro 开发了很多软件,最著名的就是 Linaro GCC 编译工具链(编译器),关于 Linaro 详细的介绍可以到 Linaro 官网查阅。Linaro GCC 编译器下载地址如下:
https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabihf/

打开以后的界面如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第12张图片

         在上图中有很多种交叉编译器,我们只需要关注这两种: gcc-linaro-4.9.4-2017.01-i686_arm-linux-gnueabihf.tar.tar.xz 和 gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz,第一个是针对 32 位系统的,第二个是针对 64 位系统的。根据自己所使用的 Ubuntu 系统类型选择合适的版本,比如我安装的 Ubuntu 16.04 是 64 位系统,因此我要使用 gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz。

        我们要先将交叉编译工具拷贝到 Ubuntu 中,在上边我们在当前用户根目录下创建了一个名为“linux”的文件夹,在这个 linux 文件夹里面再创建一个名为“tool”的文件夹,用来存放一些开发工具。使用前面已经安装好的 FileZilla 将交叉编译器拷贝到 Ubuntu 中刚刚新建的“tool”文件夹中,操作如下图所示,且成功完成的话FileZilla会有提示。

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第13张图片

         在 Ubuntu 中创建目录:/usr/local/arm,命令如下:

sudo mkdir /usr/local/arm

        创建完成以后将刚刚拷贝的交叉编译器复制到/usr/local/arm 这个目录中,在终端使用命令“ cd” 进入 到 存放 有交 叉编 译 器的 目录 ,比如我前面将交叉编译器拷贝到了目录“/home/zuozhongkai/linux/tool”中,然后使用如下命令将交叉编译器复制到/usr/local/arm 中:

sudo cp gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz /usr/local/arm/ -f

操作如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第14张图片

拷贝完成以后在/usr/local/arm 目录中对交叉编译工具进行解压,解压命令如下:

sudo tar -vxf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz

        等待解压完成,解压完成以后会生成一个名为“gcc-linaro-4.9.4-2017.01-x86_64_arm-linuxgnueabihf”的文件夹,这个文件夹里面就是我们的交叉编译工具链。

        修改环境变量,使用 VI 打开/etc/profile 文件,命令如下:

sudo vi /etc/profile

        打开/etc/profile 以后,在最后面输入如下所示内容:

export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin

         添加完以后的/etc/profile如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第15张图片

        修改好以后就保存退出,重启 Ubuntu 系统,交叉编译工具链(编译器)就安装成功了。

2.安装相关的库

        在使用交叉编译器之前还需要安装一下其它的库,命令如下:

sudo apt-get install lsb-core lib32stdc++6

        等待这些库安装完成

3.交叉编译器验证

        首先查看一下交叉编译工具的版本号,输入如下命令:

arm-linux-gnueabihf-gcc -v

        如果交叉编译器安装正确的话就会显示版本号,如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第16张图片

        从上图中可以看出当前交叉编译器的版本号为 4.9.4,说明交叉编译工具链安装成功。在前边的介绍中我们使用 Ubuntu 自带的 GCC 编译器,我们用的是命令“gcc”。要使用刚刚安装的交叉编译器的时候使用的命令是“arm-linux-gnueabihf-gcc”,“arm-linux-gnueabihfgcc”的含义如下:

  • arm 表示这是编译 arm 架构代码的编译器。
  • linux 表示运行在 linux 环境下。
  • gnueabihf 表示嵌入式二进制接口。
  • gcc 表示是 gcc 工具。

        最好的验证方法就是直接编译一个例程,我们就编译第一个裸机例程“1_leds”试试,在前面创建的 linux 文件夹下创建 driver/board_driver 文件夹,用来存放裸机例程,如图下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第17张图片

         将第一个裸机例程“1_leds”拷贝到 board_driver 中,然后执行 make 命令进行编译,如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第18张图片

        从上图中可以看到例程“1_leds”编译成功了,编译生成了 led.o 和 led.bin 这两个文件,使用如下命令查看 led.o 文件信息: 

file led.o

        结果如下图所示:

        从上图中可以看到 led.o 是 32 位 LSB 的 ELF 格式文件,目标机架构为 ARM,说明我们的交叉编译器工作正常。 

Source Insight 软件安装和使用

        由于这个软件是付费的,所以我不太喜欢用这个软件开发,先介绍一下下,我在开发过程中还是喜欢用Visual Studio Code.

1. Source Insight 安装

        Source Inisght 是一款功能强大的代码编辑、阅读工具,工作在 Windows 下,我们可以Source Insight来进行代码编写和阅读,编写完成以后将代码拷贝到 Ubuntu中去编译即可。SourceInsight 下载地址为:https://www.sourceinsight.com/download/,如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第19张图片

        双击“sourceinsight4086-setup.exe”即可开始安装,首先是如下图所示欢迎界面 :

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第20张图片

        点击上图所示的“Next”按钮进入下一步,如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第21张图片

        选择上图中的“I accept the terms in the license adreement”,然后点击“Next”按钮,进入安装目录选择界面,根据自己的实际情况选择合适的安装目录,如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第22张图片

        选择好安装目录以后点击“Next”按钮,进入图 4.4.1.5 所示的准备安装界面:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第23张图片

        点击上图中的“Install”按钮开始安装,等待安装完成,安装完成以后如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第24张图片

        点击上图中的“Finish”按钮退出安装,安装成功以后会在桌面上出现 Source Insight4.0 的图标,如下图所示: 

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第25张图片

        双击图标打开 Source Inisght 4.0,第一次打开的话会有 Licese 提示,因为 Source Insight 4.0 是个收费软件,所以是需要购买 License 的,如果没有购买的话可以免费体验 30 天,如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第26张图片

        在上图中,如果你已经购买了 licese 那么就选择第一个,如果没有购买 licese 的话就选择第二个免费体验 30 天,选择好以后点击“Next”按钮,进入下图所示界面

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第27张图片

        填写完上图中的信息,然后点击“Next”,填写好以后一路“Next”下去就可以了,打开以后的默认界面如下图所示

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第28张图片

        至此 Source Insight 安装完成。

2. Source Insight 新建工程

        跟 MDK、IAR 一样,Source Insight 是需要创建工程的,但是远没有 MDK 和 IAR 那么复杂,先新建一个工程文件夹, 比如 test,test 用来存放工程所有文件,包括 Source Insight 工程文件和 C 语言源码文件。

        注意!Source Insight 的工程不能有中文路径!!!!!!

Visual Studio Code 软件的安装和使用

1.Visual Studio Code 的安装

        Visual Stuio Code 和 Source Insight 一样,都是编辑器,Visual Studio Sode 本教程以后就简称为 VSCode,VSCode 是微软出的一款编辑器,但是免费的。VSCode 有 Windows、Linux 和macOS 三个版本的,是一个跨平台的编辑器。VSCode 下载地是:https://code.visualstudio.com/,下载界面如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第29张图片

        在上图中下载自己想要的版本,本教程需要 Windows 和 Linux 这两个版本,所以下载这两个即可。

Windows 版本安装(傻瓜式安装)

        Windows 版本的安装和容易,和其他 Windows 一样,双击.exe 安装包,然后一路“下一步”即
可,安装完成以后在桌面上就会有 VSCode 的图标,如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第30张图片

         双击图上图打开 VSCode,默认界面如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第31张图片

 Linux 版本安装

        我们有时候也需要在 Ubuntu 下阅读代码,所以还需要在 Ubuntu 下安装 VSCode。然后我们使用如下命令进行安装:

sudo dpkg -i code_1.32.3-1552606978_amd64.deb

        等待安装完成,如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第32张图片

2. Visual Studio Code 插件的安装

        VSCode 支持多种语言,比如 C/C++、Python、C#等等,本教程我们主要用来编写 C/C++称序的,所以需要安装 C/C++的扩展包,扩展包安装很简单,如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第33张图片

        我们需要按照的插件有下面几个: 

  • 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 自动补全插件,强烈推荐,谁用谁知道!

        如果想要查看已经安装好的插件,可以按照下图的方法进行查看:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第34张图片

        安装好插件以后就可以进行代码编辑了,截至目前,VSCode 界面都是英文环境,我们已经安装了中文插件了,最后将 VSCode 改为中文环境,按下“Ctrl+Shift+P”打开搜索框,在搜索框里面输入“config”,然后选择“Configure Display Language”。如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第35张图片

        在打开的 local.json 文件中将 locale 修改为 zh-cn,如图下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第36张图片        修改完成以后保存 local.json,然后重新打开 VSCode,测试 VSCode 就变成了中文的了,如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第37张图片

3.Visual Studio Code 新建工程

        新建一个文件夹用于存放工程,比如我新建的文件夹目录为 E:\VScode_Program\1_test,路径尽量不要有中文和空格。打开 VSCode,然后在 VSCode 上点击文件->打开文件夹…,选刚刚
创建的“test”文件夹,打开以后如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第38张图片

        从上图可以看出此时的文件夹“TEST”是空的,点击文件->将工作区另存为…,打开工作区命名对话框,输入要保存的工作区路径和工作区名字,如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第39张图片

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

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第40张图片

         从下图可以看出,此时“实验 TEST”中有main.c 和 main.h,这三个文件和文件夹同样会出现在“实验TEST文件夹中,如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第41张图片

         在main.h中输入如下所示内容:

# include

int add(int a, int b)

        在main.c中输入如下所示内容:

# include 

int add(int a, int b)

{
    return (a+b);

}

int main(void)
{
    int value = 0;
    value = add(5,6);
    printf("5 + 6 = %d", value);
    return 0;


}

        代码编辑完成以后VSCode 界面如图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第42张图片

         从上图可以看出,VSCode 的编辑的代码高亮很漂亮,阅读起来很舒服。但是此时提示找不到“stdio.h”这个头文件,如下图所示错误提示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第43张图片

        在上图中提示找不到“main.h”,同样的在 main.h 文件中会提示找不到“stdio.h”。这是因为我们没有添加头文件路径。按下“Ctrl+Shift+P”打开搜索框,然后输入“Edit configurations”,选择“C/C++:Edit configurations…”,

        C/C++的配置文件是个 json 文件,名为:c_cpp_properties.json,此文件默认内容如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第44张图片

        c_cpp_properties.json 中的变量“includePath”用于指定工程中的头文件路径,但是“stdio.h”是 C 语言库文件,而 VSCode 只是个编辑器,没有编译器,所以肯定是没有 stdio.h 的,除非我们自行安装一个编译器,比如 CygWin,然后在 includePath 中添加编译器的头文件。这里我们就不添加了,因为我们不会使用 VSCode 来编译程序,这里主要知道如何指定头文件路径就可以了。

        我们在 VScode 上打开一个新文件的话会覆盖掉以前的文件,这是因为 VSCode 默认开启了预览模式,预览模式下单击左侧的文件就会覆盖掉当前的打开的文件。如果不想覆盖的话采用双击打开即可,或者设置 VSCode 关闭预览模式,设置如下图所示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第45张图片

        我们在编写代码的时候有时候会在右下角有如下图所示的警告提示:

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第46张图片

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

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第47张图片

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

ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置_第48张图片

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

你可能感兴趣的:(嵌入式软件之裸机开发,单片机,嵌入式硬件,嵌入式软件开发,MX6ULL,环境配置)