目录
一、软件要求
- Ubuntu Version 14.04及以上版本,作为编译Huawei LiteOS的服务器。
- GNU Arm Embedded Toolchain编译器,用于代码编译。
- GNU Make构建器,用于文件组织与链接。
- python 2.7/3.2+,pip包管理工具,kconfiglib库,用于编译前通过图形化界面完成配置。
当前使用的 Ubuntu 版本是 22.04.03
二、安装过程
2.1、安装GNU Arm Embedded Toolchain编译器
2.1.1 编译器
下载编译器:
对于32位芯片架构,官方下载地址为:
GNU Arm Embedded Toolchain编译器,
旧版本地址
建议使用2019-q4-major及以上版本。
旧版本跳转
对于64位芯片架构,官方下载地址为:
64位GNU Arm Embedded Toolchain编译器,
下载地址
建议使用最新版本的 aarch64-linux-gnu 编译器。
解压编译器
tar -xvf gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2
解压后可以得到文件夹 gcc-arm-none-eabi-9-2019-q4-major
添加编译器的执行路径到环境变量
将 gcc-arm-none-eabi-9-2019-q4-major/bin 目录添加到环境变量中,可以编辑 ~/.bashrc 文件,参考如下方法设置PATH环境变量:
export PATH=$PATH:YOUR_PATH/gcc-arm-none-eabi-9-2019-q4-major/bin/
然后执行以下命令使新设置的环境变量立即生效:
source ~/.bashrc
指令:
//编辑指令
sudo gedit ~/.bashrc
//路径添加到最后一行,保存关闭
export PATH=$PATH:/home/user/Desktop/liteos/gcc-arm-none-eabi-9-2019-q4-major/bin
//环境变量立即生效
source ~/.bashrc
2.1.2 升级GNU Make构建器到最新版
官网下载最新Make构建器
解压,将压缩包名替换为实际下载的软件包名:
tar -xf make-4.3.tar.gz
检查依赖, 解压后进入到目录中,执行 ./configure 命令以检查编译与安装 Make构建器所需的依赖:
cd make-4.3
./configure
如果没有报错就继续下一步操作,如果存在报错就根据提示安装依赖。
编译&安装Make,继续在当前目录下,参考如下命令完成Make构建器的编译与安装:
sh build.sh
sudo make
sudo make install
或者 直接使用指令安装 make
sudo apt install make
make 版本查看
make --version
2.2 安装图形化配置解析工具
2.2.1 安装python 2.7/3.8+
指令安装
sudo apt-get install python3.10
查询版本
python3.10 --version
源码包编译安装
通过官网下载
3.8.5 python源码包
其它版本下载地址
解压源码包,参考如下命令完成解压,将压缩包名替换为实际下载的源码包名:
tar -xf Python-3.8.5.tgz
检查依赖,解压后进入到目录中,执行 ./configure 命令以检查编译与安装python所需的依赖:
cd Python-3.8.5
./configure
如果没有报错就继续下一步操作,如果存在报错就根据提示安装依赖。
编译&安装python
sudo make
sudo make install
检查python版本并正确链接python命令
python --version
如果显示的不是刚刚安装的python版本,则需要执行以下命令来正确链接python命令。
获取python目录,例如对于python 3.8.5,执行如下命令。
which python3.8
链接python命令到刚刚安装的python包,将以下命令中的 “python3.8-path” 替换为 “which python3.8” 命令执行后的回显路径:
cd /usr/bin && sudo rm python && sudo ln -s "python3.8-path" python
再次检查python版本。
python --version
2.2.2 安装pip包管理工具
如果pip命令不存在,可以下载pip源码包进行安装。pip依赖setuptools,如果setuptools不存在,也需要安装。
命令行方式安装
sudo apt-get install python3-setuptools python3-pip -y
sudo pip3 install --upgrade pip
源码包方式安装
安装setuptools。
点击setuptools源代码包下载地址,可以参考下面的命令进行安装:
sudo unzip setuptools-50.3.2.zip
cd setuptools
sudo python setup.py install
须知: setuptools最新版本不支持python 2.7,如果使用python 2.7,请下载setuptools 45.0.0版本以支持python 2.7。
安装pip。
点击pip源代码包下载地址,
可以参考下面的命令进行安装:
sudo tar -xf pip-20.2.4.tar.gz
cd pip-20.2.4
sudo python setup.py install
2.2.3 安装kconfiglib库
对于服务器可以联网的情况。可以直接使用如下命令安装 kconfiglib
sudo pip install kconfiglib
对于服务器不能联网的情况。可以采用离线的方式安装。首先在其他能联网的环境上
下载kconfiglib,
可以下载kconfiglib的wheel文件kconfiglib-14.1.0-py2.py3-none-any.whl或源代码文件kconfiglib-14.1.0.tar.gz,这里以14.1.0版本为例。
a. wheel文件的安装,可以参考如下命令:
sudo pip install kconfiglib-14.1.0-py2.py3-none-any.whl
b. 源代码文件的安装,可以参考如下命令:
sudo tar -zxvf kconfiglib-14.1.0.tar.gz
cd kconfiglib-14.1.0
sudo python setup.py install
三、工程创建和编译
1.下载Huawei LiteOS代码。请下载完整的Huawei LiteOS代码。
2.拷贝开发板配置文件为根目录 .config 文件。根据实际使用的开发板,拷贝 tools/build/config/ 目录下的默认配置文件 ${platform}.config 到根目录,并重命名为 .config。
3.配置系统(可选)。如果不希望使用系统的默认配置,可以在 Huawei_LiteOS根目录下执行 make menuconfig命令,在图形化配置界面中自行裁剪模块或修改配置。修改完保存菜单退出,其修改默认会保存到根目录下.config文件中。
如果报错 python 指令,python3.10 指令能识别,python 不能识别,则可手动添加 python 链接到 python3.10
cd /usr/bin && sudo ln -s "/usr/bin/python3.10" python
4.清理工程。在编译前,先在Huawei_LiteOS根目录下执行make clean命令删除以前编译出的二进制文件。
5.编译工程。在Huawei_LiteOS根目录下执行make命令即可完成工程编译,编译结果会在屏幕上输出。
以 STM32F407_ATK_Explorer 为例,
生成的系统镜像文件、反汇编等文件保存在out/STM32F407_ATK_Explorer目录中;
库文件在out/STM32F407_ATK_Explorer/lib目录中;
中间文件在out/STM32F407_ATK_Explorer/obj目录中。
说明: 如果只编译某个模块,而不是整个工程代码,在完成该模块的配置后,参考如下步骤完成编译。
1.导出 LITEOSTOPDIR环境变量。 LITEOSTOPDIR变量表示 Huawei LiteOS代码的保存路径,例如代码路径为 “/usr1/mypc/Huawei_LiteOS” ,则执行如下命令:
export LITEOSTOPDIR=/usr1/mypc/Huawei_LiteOS
2.编译模块。 进入要编译的模块目录,执行make命令。
四、工程目录结构说明
LiteOS的代码目录结构说明,关于代码树中各个目录存放的源代码的相关内容简介如下:
一级目录 | 二级目录 | 三级目录 | 说明 |
---|---|---|---|
arch | arm | cortex_a_r | A核架构支持 |
cortex_m | M核架构支持 | ||
arm64 | arm64架构支持 | ||
csky | cskyv2 | cskyv2架构支持 | |
riscv | rvm32 | riscv架构支持 | |
build | LiteOS编译系统需要的配置及脚本 | ||
compat | cmsis | liteos提供的CMSIS-RTOS 1.0和2.0接口 | |
components | ai | ai(基于mindspore)算子库实现 | |
connectivity | agent_tiny | agent_tiny端云互通组件,包括公共头文件、示例代码、客户端实现代码、操作系统适配层代码 | |
lwm2m | lwm2m协议实现 | ||
mqtt | MQTT开源协议实现 | ||
nb_iot | LiteOS NB-IoT API | ||
fs | devfs | devfs文件系统 | |
fatfs | fatfs文件系统 | ||
kifs | kifs文件系统 | ||
littlefs | littlefs文件系统 | ||
ramfs | ramfs文件系统 | ||
spiffs | spiffs文件系统 | ||
vfs | 虚拟文件系统 | ||
gui | 开源LittlevGL图形库 | ||
language | 语言相关组件,含lua | ||
lib | cjson | c语言json库 | |
log | 日志等级控制 | ||
media | 媒体相关组件,含libpng、openexif、opus、upup、 | ||
net | at_device | AT设备适配层 | |
at_frame | LiteOS AT框架API | ||
ifconfig | ifconfig shell命令实现 | ||
los_iperf | 网络带宽测试工具 | ||
lwip/lwip_port | lwip驱动及OS适配代码 | ||
lwip/lwip-2.1.2 | lwip协议实现 | ||
lwip/ppp_port | lwip协议ppp端口支持 | ||
pcap | 网络抓包工具 | ||
ping | ping shell命令实现 | ||
sal | socket通讯支持 | ||
tftp_server | tftp服务 | ||
ota | 固件升级代码 | ||
security | mbedtls/mbedtls_port | mbed TLS的OS适配代码 | |
mbedtls/mbedtl-2.16.8 | mbed TLS协议实现 | ||
openssl | openssl协议 | ||
sensorhub | include | sensor manager头文件 | |
src | sensor manager的源码实现 | ||
utility | 解析工具,含bidireference、curl、fastlz、freetype、harfbuzz、iconv、iniparser、json-c、jsoncpp、libxml2、sqlite、thttpd、tinyxml2 | ||
demos | agenttiny_lwm2m | lwm2m协议 demo | |
agenttiny_mqtt | mqtt 协议demo | ||
ai | ai的demo | ||
dtls_server | dtls协议demo | ||
fs | 文件系统demo | ||
gui | gui的demo | ||
ipv6_client | Ipv6协议demo | ||
kernel | api | 供开发者测试LiteOS内核的demo示例代码 | |
include | API功能头文件存放目录 | ||
language | 语言相关组件的demo | ||
lms | LMS的demo | ||
media | 媒体相关组件的demo | ||
nbiot_without_atiny | NB-IoT demo | ||
sensorhub | gyro | 基于sensorhub传感框架定时读取MPU6050陀螺仪原始数据的demo | |
trace | Trace的demo | ||
utility | 解析工具的demo | ||
doc | 此目录存放的是LiteOS的使用文档和API说明等文档 | ||
driver | base | LiteOS驱动框架 | |
interrupt | LiteOS系统中断接口 | ||
timer | LiteOS系统定时器接口 | ||
uart | LiteOS系统串口接口 | ||
include | components各个模块所依赖的头文件 | ||
kernel | base | LiteOS基础内核代码,包括任务、中断、软件定时器、队列、事件、信号量、互斥锁、tick等功能 | |
debug | LiteOS内核调测代码,包括队列、信号量、互斥锁及任务调度的调测 | ||
include | LiteOS基础内核内部使用的头文件 | ||
mem | LiteOS中的内存管理相关代码 | ||
sched | 任务调度支持,包括对多核的调度支持 | ||
shellcmd | LiteOS中与基础内核相关的shell命令,包括memcheck、task、systeminfo、swtmr等 | ||
extended | cppsupport | C++兼容适配层底层接口 | |
cpup | CPU占用率统计接口 | ||
include | extended目录所需的头文件 | ||
lms | LMS(实时检测内存操作合法性算法)的库文件 | ||
lowpower | 低功耗框架相关代码 | ||
trace | trace事件跟踪,用于实时记录系统运行轨迹 | ||
include | LiteOS开源内核头文件 | ||
init | LiteOS内核初始化相关代码 | ||
lib | huawei_libc | LiteOS自研libc库和适配的posix接口 | |
libc | LiteOS适配的musl libc库 | ||
libsec | 华为安全函数库 | ||
zlib | 开源zlib库 | ||
osdepends | liteos | LiteOS提供的部分OS适配接口 | |
shell | src | 实现shell命令的代码,支持基本调试功能 | |
include | shell头文件 | ||
targets | bsp | 通用板级支持包 | |
CB2201 | CB2201(ck802)开发板的开发工程源码包 | ||
Cloud_STM32F429IGTx_FIRE | 野火STM32F429(ARM Cortex M4)开发板的开发工程源码包 | ||
GD32E103C_START | GD32E103C_START(ARM Cortex M4)开发板的开发工程源码包 | ||
GD32F303RGT6_BearPi | GD32F303RGT6_BearPi(ARM Cortex M4)开发板的开发工程源码包 | ||
GD32VF103V_EVAL | GD32VF103V_EVAL(riscv)开发板的开发工程源码包 | ||
HiFive1_Rev1_B01 | HiFive1_Rev1_B01(riscv)开发板的开发工程源码包 | ||
qemu-virt-a53 | Coretex A53的qemu开发工程源码包 | ||
realview-pbx-a9 | Coretex A9的qemu开发工程源码包 | ||
STM32F072_Nucleo | STM32F072_Nucleo(ARM Cortex M0)开发板的开发工程源码包 | ||
STM32F103_FIRE_Arbitrary | 野火STM32F103(ARM Cortex M3)霸道开发板的开发工程源码包 | ||
STM32F407_ATK_Explorer | 正点原子STM32F407(ARM Cortex M4)探索者开发板的开发工程源码包 | ||
STM32F769IDISCOVERY | STM32F769IDISCOVERY(ARM Cortex M7)开发板的开发工程源码包 | ||
STM32L4R9I_Discovery | STM32L4R9IDISCOVERY(ARM Cortex M4)开发板的开发工程源码包 | ||
STM32L073_Nucleo | STM32L073_Nucleo(ARM Cortex M0+)开发板的开发工程源码包 | ||
STM32L431_BearPi | 小熊派STM32L431(ARM Cortex M4)开发板的开发工程源码包 | ||
STM32L476_NB476 | 深创客STM32L476(ARM Cortex M4)开发板的开发工程源码包 | ||
STM32L496_Nucleo | STM32L496 NUCLEO-144(ARM Cortex M4)开发板的开发工程源码包 | ||
STM32L552_Nucleo | STM32L552 Nucleo(ARM Cortex M33)开发板的开发工程源码包 | ||
tools | build | LiteOS支持的开发板编译配置文件 | |
menuconfig | LiteOS编译所需的menuconfig脚本 | ||
Makefile | LiteOS Makefile | ||
.config | 开发板的配置文件,如果用户不重新选择开发板,默认为野火挑战者STM32F429开发板的配置文件 |
移植目录结构:
参考:
https://gitee.com/LiteOS/LiteOS/blob/master/doc/LiteOS_Build_and_IDE.md
https://gitee.com/LiteOS/LiteOS/tree/master
https://support.huaweicloud.com/build-IDE-LiteOS/zh-cn_topic_0308950992.html
https://developer.arm.com/downloads/-/gnu-rm
https://www.linaro.org/downloads/
https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
https://gitee.com/LiteOS/LiteOS/blob/master/doc/LiteOS_Code_Info.md
https://gitee.com/LiteOS/LiteOS/blob/master/doc/LiteOS_Porting_Guide.md