完全按照手册win10里装Ubuntu 虚拟机然后编译ESP32(主要是想针对ESP32C3和S3)开发板的鸿蒙系统(失败)

基本上完全按照手册来的,除了Ubuntu虚拟机使用了22.04 Jammy版本,鸿蒙手册里是20.04 版本,主要是鸿蒙里3年前的手册了,所以就擅自用了高版本。

据此还想到一点,鸿蒙LiteOS,还挺稳定的,3年也没有啥变化,也没有pr。当然也可能是被遗忘了?

手册:LiteOS: Huawei LiteOS开源代码官方主仓库.LiteOS Studio 开发工具请访问https://gitee.com/LiteOS/LiteOS_Studio - Gitee.com

结论:最后没成功,因为LiteOS只支持esp32,不支持esp32c3 ,所以本次实践失败。

在Ubuntu22.04下编译ESP32开发板的鸿蒙系统

ubuntu安装准备

复制代码
cd ~
sudo apt update
sudo apt-get install git wget flex bison gperf python3 python3-pip python3-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
python3 -m pip install --upgrade pip setuptools wheel
mkdir esp32
cd esp32

其中sudo apt update是我加的,我习惯使用apt而不是apt-get

elf-idf安装

复制代码
git clone https://gitee.com/EspressifSystems/esp-gitee-tools.git
git clone -b v4.3.1 https://gitee.com/EspressifSystems/esp-idf.git
cd ~/esp32/esp-gitee-tools/
export EGT_PATH=$(pwd)
cd ~/esp32/esp-idf
$EGT_PATH/submodule-update.sh
pip config set global.index-url http://mirrors.aliyun.com/pypi/simple
pip config set global.trusted-host mirrors.aliyun.com
$EGT_PATH/install.sh

最后一句$EGT_PATH/install.sh执行的时候报错:让使用apt install python3.10-venv

看来是需要python3.10环境。

执行

复制代码
sudo apt install python3.10-venv

执行完再执行一次

复制代码
$EGT_PATH/install.sh

安装了很多python3.10的包。

设置环境变量

install.sh执行完之后,设置临时环境变量:

复制代码
. ./export.sh

也可以根据提示,执行全路径的命令,比如:

复制代码
. /home/skywalk/eps32/esp-idf/export.sh

执行完之后,可以说elf-idf就安装好了,常规的elf-idf 即esp32开发板的开发编译工作就可以展开了。

鸿蒙LiteOS编译工具链安装

建议安装8.4.0版本(已验证)。一般来说,在成功执行install.sh后,所需编译工具xtensa-esp32-elf-gcc、esptoos.py已经安装完成。执行export.sh后,会为编译工具链设置临时环境变量,可通过执行如下命令查看安装位置及版本

查看xtensa-esp32-elf-gcc安装位置及版本

复制代码
which xtensa-esp32-elf-gcc
$HOME/.espressif/tools/xtensa-esp32-elf/esp-2021r1-8.4.0/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc
# $HOME: 表示家目录,以自己的为准,可执行 echo $HOME 查看自己的家目录
xtensa-esp32-elf-gcc -dumpversion  # 也可执行 xtensa-esp32-elf-gcc -v
8.4.0                                # 8.4.0版本已验证,其余版本可能编译失败

实际执行结果,3年不见,已经从8.4升到14.2版本了:

复制代码
which xtensa-esp32-elf-gcc
/home/skywalk/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/bin/xtensa-esp32-elf-gcc

xtensa-esp-elf-gcc -dumpversion
14.2.0

查看esptool.py安装位置及版本

复制代码
which esptool.py
# $HOME/esp32/esp-idf/components/esptool_py/esptool/esptool.py
# $HOME: 表示家目录,以自己的为准,可执行 echo $HOME 查看自己的家目录
esptool.py version
# esptool.py v3.1-dev
# 3.1-dev

实际执行结果:

复制代码
which esptool.py
# /home/skywalk/.espressif/python_env/idf5.5_py3.10_env/bin/esptool.py
esptool.py version
# esptool.py v4.8.1
# 4.8.1

esptool也升级到4.8.1拉

手册里写到:

  • 注:执行. ./export.sh设置的环境变量为临时环境变量,只在当前shell窗口中有效,切换窗口后需要重新执行,为方便后续进行LiteOS代码的编译,建议在此处将xtensa-esp32-elf-gcc、esptool.py添加到用户环境变量中。具体操作方式为:

    复制代码
    # 打开配置文件
    $ vim ~/.bashrc
    # 在文件末尾输入以下内容:
    export PATH=$PATH:$HOME/.espressif/tools/xtensa-esp32-elf/esp-2021r1-8.4.0/xtensa-esp32-elf/bin
    export PATH=$PATH:$HOME/esp32/esp-idf/components/esptool_py/esptool

按照提示在~/.bashrc文件中,加入环境变量:

复制代码
export PATH=$PATH:$HOME/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp32-elf/bin
export PATH=$PATH:$HOME/esp32/esp-idf/components/esptool_py/esptool

利用esp32的examples工程生成bootloader.bin引导文件、分区表文件

复制代码
cd ~/esp32/esp-idf
. ./export.sh
cd examples/get-started/hello_world
make -j 4

编译成功后,将在当前 build 目录下生成分区表文件 partitions_singleapp.bin、引导文件 bootloader.bin,具体信息可查看输出信息。

我的操作是:

复制代码
cd ~/esp32/esp-idf
. ./export.sh
cd ~/esp32/esp-idf/examples/get-started/hello_world
make -j 4

报错:make -j 14

make: *** No targets specified and no makefile found. Stop.

哦,是不是要这么操作啊:

复制代码
mkdir build 
cd build
cmake ..
make -j 4

大约一分钟就编译好了。对了,这个的编译过程,其实跟使用idf.py进行编译是差不多的(只不过理论上这里编译出来了LiteOS,不知道自己理解的对不对)

复制代码
Creating esp32 image...
Merged 2 ELF sections
Successfully created esp32 image.
Generated /home/skywalk/esp32/esp-idf/examples/get-started/hello_world/build/hello_world.bin
[100%] Built target gen_project_binary
hello_world.bin binary size 0x26280 bytes. Smallest app partition is 0x100000 bytes. 0xd9d80 bytes (85%) free.
[100%] Built target app_check_size
[100%] Built target app

不过不像手册里写的有两个文件分区表文件 partitions_singleapp.bin、引导文件 bootloader.bin,而是只有一个文件 hello_world.bin 也许是改版了吧。

尝试烧录,报错:说hello_world.bin不是一个ESP32-C3的镜像。也对啊,从头到尾就没有选择的地方,而且ESP32-C3 ESP32-S3 ESP32 ,这是三款不同的开发板啊!C3和S3的芯片都不一样,应该要设置一下才对啊!

找到问题了,在安装工具的时候,即install.sh的时候就要选好芯片了!

复制代码
./install.sh esp32c3

这是elf-idf环境的设置,鸿蒙那里也要设置。

在鸿蒙cmake的时候看到提示:

复制代码
cmake ..
-- IDF_TARGET is not set, guessed 'esp32' from sdkconfig '/home/skywalk/esp32/esp-idf/examples/get-started/hello_world/sdkconfig'

因此加上命令:

cmake .. -D IDF_TARGET=esp32c3

不行,报错: does not match currently selected IDF_TARGET 'esp32c3'. 先跳过,尝试LiteOS源码编译。

开始编译

下载鸿蒙LiteOS源代码

复制代码
cd ~/esp32
git clone https://gitee.com/LiteOS/LiteOS.git

进入 LiteOS 工程,拷贝 esp32 默认配置文件替换当前配置文件:

复制代码
cd ~/esp32/LiteOS
cp tools/build/config/ESP32.config .config

发现这个配置文件不是esp32c3的,而是esp32的。这样没有配置文件,实践无法进行下去了。

总结

也许LiteOS算是一个废弃的项目了吧,有点当年谷歌的意思,很多东西发现不赚钱就砍了。

调试

cmake加上IDF_TARGET=esp32c3参数报错

cmake .. -D IDF_TARGET=esp32c3

CMake Error at /home/skywalk/esp32/esp-idf/tools/cmake/targets.cmake:108 (message):

Target 'esp32' in sdkconfig '/home/skywalk/esp32/esp-idf/examples/get-started/hello_world/sdkconfig' does not match currently selected IDF_TARGET 'esp32c3'. To change the target, clear the build directory and sdkconfig file, and build the project again.

Call Stack (most recent call first):

/home/skywalk/esp32/esp-idf/tools/cmake/project.cmake:24 (__target_init)

CMakeLists.txt:5 (include)

寻求支持esp32c3的可能,但是官方只更新到3年前,没有esp32c3的配置文件,实践终结。

相关推荐
wuicer1 小时前
ubuntu 20.04 安装anaconda以及安装spyder
linux·运维·ubuntu
zhanshuo3 小时前
在鸿蒙里优雅地处理网络错误:从 Demo 到实战案例
harmonyos
zhanshuo3 小时前
在鸿蒙中实现深色/浅色模式切换:从原理到可运行 Demo
harmonyos
shuangrenlong4 小时前
ubuntu更新chrome版本
linux·chrome·ubuntu
基于python的毕设8 小时前
C语言栈的实现
linux·c语言·ubuntu
whysqwhw8 小时前
鸿蒙分布式投屏
harmonyos
whysqwhw9 小时前
鸿蒙AVSession Kit
harmonyos
whysqwhw11 小时前
鸿蒙各种生命周期
harmonyos
whysqwhw12 小时前
鸿蒙音频编码
harmonyos
whysqwhw12 小时前
鸿蒙音频解码
harmonyos