前言
- 最近打算移植搭建 一些常见的 RTOS 的 qemu 开发学习环境,当前 RT-Thread、FreeRTOS 已经成功运行 qemu,LiteOS 初步验证可以正常 运行 qemu
realview-pbx-a9
,这里做个记录 - 首先学习或者研究 RTOS,只是看内核源码,会比较的枯燥,而是要开发板,可能一上来牵涉过多的硬件驱动,造成学习研究 RTOS 内核的兴趣降低了一些,前期需要对 RTOS 内核的运行有个全局的掌握,此时是要 qemu 来学习与验证,相对于实际的开发板,会便捷与高效
LiteOS
- 当前 验证的 LiteOS 内核是 : https://gitee.com/LiteOS/LiteOS
- 这里与 https://gitee.com/openharmony/kernel_liteos_a 相比,可能有一点区别,不过前期建议使用 LiteOS 验证,
kernel_liteos_a
缺少一些板级的配置文件 - 可以通过 Git 克隆 LiteOS 内核,当前 qemu 验证发现不再需要其他的软件包就可以运行起来
git clone https://gitee.com/LiteOS/LiteOS.git
qemu realview-pbx-a9
- git 克隆 LiteOS 的内核仓库后,可以进入内核,通过查看内核目录
tools/build/config/
发现,有一些支持的板子的配置文件,其中 qemu 当前支持qemu-virt-a53.config
realview-pbx-a9.config
,当前建议使用realview-pbx-a9.config
,因为是 ARM 平台,相关的资料与编译工具链比较的方便获取 - 配置文件: 复制
tools/build/config/realview-pbx-a9.config
到内核根目录下,改为.config
文件 - 内核目录下执行
make menuconfig
可以进入图形界面配置 - 【备注】如果
make menuconfig
失败,一般需要配置 交叉编译环境
配置 arm gcc 交叉编译环境
- 下载 arm gcc 交叉编译工具链: 在 ARM 官方下载 https://developer.arm.com/downloads/-/gnu-rm,当前验证的版本:
gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2
gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2
,我当前使用gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2
可以正常编译 - 下载 arm gcc 工具链后,解压到 Linux 环境(ubuntu 20.04),然后设置环境变量:如修改
/etc/profile
文件 sudo vim /etc/profile
- 最后添加 :
export PATH=$PATH:/home/zhangsz/tools/gcc-arm-none-eabi-10-2020-q4-major/bin
- 然后保存,
source /etc/profile
使环境变量生效 - 可以在 shell 运行
arm-none-eabi-gcc -v
确认 arm gcc 工具链环境变量生效
安装 kconfiglib
- LiteOS 需要安装 python2 版本的 kconfiglib
- 如果当前 Linux 如 ubuntu 20.04 无法安装 python2 版本的 kconfiglib,需要手动获取 python2 版本的 pip,然后再 使用 python2 版本的 pip 安装 kconfiglib
- 我当前的系统 ubuntu 20.04,python 版本是
Python 2.7.18
,但是没有 python 2 版本的 pip,默认 pip 的版本是 python3的,所以需要手动安装 python2 版本的 pip - 获取 get-pip.py,获取的地址:
https://bootstrap.pypa.io/pip/2.7/get-pip.py
,ubuntu 可以使用wget https://bootstrap.pypa.io/pip/2.7/get-pip.py
获取 - 然后确保当前的 python 版本是 2 版本, 使用
python get-pip.py
即可安装 python2 版本的 pip - 安装 完 python2 版本的 pip,再安装 kconfiglib,命令 :
$ pip --version
pip 20.3.4 from /home/zhangsz/.local/lib/python2.7/site-packages/pip (python 2.7)
$ pip install Kconfiglib
menuconfig 配置 LiteOS
- 当前可以直接保存,不需要配置,后面熟悉了 LiteOS 的内核与功能模块,可以尝试添加与修改内核的配置
编译 LiteOS
make
即可编译,如果提示arm-none-eabi-gcc
工具链没有找到,请按上面的操作,先把 arm gcc 工具链配置好- 编译完成后,就可以运行 qemu realview-pbx-a9 了
运行 qemu realview-pbx-a9
- 编写一个 qemu.sh 的 shell 脚本,内容如下,并
chmod +x qemu.sh
设置可执行权限 - 其中
out/realview-pbx-a9/Huawei_LiteOS.bin
是 qemurealview-pbx-a9
的编译后的产物
#!/bin/bash
qemu-system-arm -machine realview-pbx-a9 \
-smp 4 -m 512M \
-kernel out/realview-pbx-a9/Huawei_LiteOS.bin \
-nographic
- 运行
./qemu.sh
- 进入了 LiteOS 的 shell,LiteOS 运行起来了
小结
- 本篇记录 了 LiteOS 在 qemu
realview-pbx-a9
上的环境搭建、系统运行 - 后续继续熟悉 LiteOS,尝试使用 GDB 调试基于 qemu 的 LiteOS 内核,了解内核的启动流程、内核模块等