前言
今天无意中点开了STMicroelectronics发来的有关新品STM32MP2的推广邮件(也是蛮馋的,如果有机会也是希望能够参与测评),在浏览的时候突然发现在末尾ST发布了对
STM32MP135/157系列MPU的OpenSTDroid与OpenWrt 系统支持,这瞬间就勾起了兴趣。
OpenSTDroid是ST开发的运行在STM32MP2产品上安卓发行版,它提供了在安卓框架下运行、开发或者打造自己平台所需的所有组件,目前是预发布阶段。
- 适配Android 13 (64bit) ,基于 OpenSTLinux BSP 5.0.2.BETA。
- 因为Linux内核版本问题,安卓认证在这个版本上无法保证,将在后续版本中加入支持。
- 软件包和更多资料可以联系ST或代理商获取,七月底会正式上线。
由于是预发布,暂时没有SDK
同时ST还发布了OpenWRT的支持,并且已经支持了其自家MP135/MP157系列办板卡,因为手中正好有STM32MP135F-DK,这也勾起了我尝试在这块板卡上运行OpenWRT的兴趣
GitHub - bootlin/openwrt-feed-st: OpenWRT feed for STMicroelectonics
OpenWrt镜像编译
根据官网描述,目前的软件包是基于STM32MP157和STM32MP135的初始软件版本(基于OSTL 5.0)https://github.com/bootlin/openwrt-feed-st
我们根据官网的readme文件描述来看,目前该版软件包已经支持STM32MP157F-DK2和STM32MP135F-DK这两款板卡的支持
其中以STM32MP1xxF-DK命名的软件包是“minimal support”,也就是常说的“最小系统”是不包含web管理界面的
而STM32MP1XXF-DK-DEMO则是包含了额外的软件包 包括了web管理界面
支持特性列表
Supported features |
STM32MP157F-DK2 |
STM32MP135F-DK |
Sysupgrade |
yes |
yes |
Ethernet |
yes |
yes |
Watchdog |
yes |
yes |
RTC |
yes |
yes |
RNG (Optee) |
yes |
yes |
LED |
yes |
yes |
Button |
no |
yes (USER2) |
Wifi |
yes |
yes |
USB Type-A |
yes |
yes |
可以看到MP135支持的特性也是相对比较全面的,本章也是基于STM32MP135F-DK为例
BSP
Components |
Version |
TF-A |
v2.8-stm32mp-r1 |
U-Boot |
v2022.10-stm32mp-r1 |
OPTEE |
3.19.0-stm32mp-r1 |
Linux |
OpenWRT kernel + v6.1-stm32mp-r1 |
这个软件包是基于STPM32MP1 BSP v5.
0,所以在构建OpenWrt之前请确保已经安装好了STM32MP开发环境也可以查阅我之前的帖子来配置环境(一定要确保当前系统环境可以进行官网例程中的Linux系统构建)
https://wiki.st.com/stm32mpu/wiki/Getting_started/STM32MP1_boards/STM32MP135x-DK/Develop_on_Arm%C2%AE_Cortex%C2%AE-A7/Install_the_SDK
https://wiki.st.com/stm32mpu/wiki/Getting_started/STM32MP1_boards/STM32MP135x-DK/Develop_on_Arm%C2%AE_Cortex%C2%AE-A7/Modify,_rebuild_and_reload_the_Linux%C2%AE_kernel
配置环境&&系统构建
系统配置要求需要根据OpenWrt的要求安装必备的软件包,我的系统为Ubuntu22.04
sudo apt update
sudo apt install build-essential clang flex bison g++ gawk \
gcc-multilib g++-multilib gettext git libncurses-dev libssl-dev \
python3-distutils rsync unzip zlib1g-dev file wget
系统配置完成之后,进行代码拉取 并切换相应分支
$ git clone -b master https://git.openwrt.org/openwrt/openwrt.git
$ cd openwrt
$ git checkout cffd3ad8d7
将STM32芯片的 添加进 feeds.conf.default
文件中
首先查看内容
$ cat feeds.conf.default
src-git packages https://git.openwrt.org/feed/packages.git
src-git luci https://git.openwrt.org/project/luci.git
src-git routing https://git.openwrt.org/feed/routing.git
src-git telephony https://git.openwrt.org/feed/telephony.git
#src-git video https://github.com/openwrt/video.git
#src-git targets https://github.com/openwrt/targets.git
#src-git oldpackages http://git.openwrt.org/packages.git
#src-link custom /usr/src/openwrt/custom-feed
这里我使用gedit工具进行添加
$ gedit feeds.conf.default
src-git st https://github.com/bootlin/openwrt-feed-st.git
src-git packages https://git.openwrt.org/feed/packages.git
src-git luci https://git.openwrt.org/project/luci.git
src-git routing https://git.openwrt.org/feed/routing.git
src-git telephony https://git.openwrt.org/feed/telephony.git
#src-git video https://github.com/openwrt/video.git
#src-git targets https://github.com/openwrt/targets.git
#src-git oldpackages http://git.openwrt.org/packages.git
#src-link custom /usr/src/openwrt/custom-feed
更新 安装所有STM32packages
$ ./scripts/feeds update -a
$ ./scripts/feeds install stm32
$ ./scripts/feeds install -a -f
使用make menuconfig命令进行图形化配置
$ make menuconfig
在Target system中 我们选择 STMicroelectronics STM32
在subtarget中 选择 STM32MP1 boards
在Target Profile中选择 STMicroelectronics STM32MP135F-DK
选择完成之后 通过方向键移动光标选择save
保存完成之后就可以准备开始构建了
可能会因为缺少环境而报错,缺少哪个pack包就安装就好
强烈建议第一次构建不要使用多核编译,建议使用单核编译完成之后再使用多核编译进行构建!!!
构建
$ make -j$(nproc)
在一段漫长的等待过后
系统编译完成
在 /home/ddj/Downloads/openwrt/bin/targets/stm32/stm32mp1
目录下可以找到构建的镜像
烧录系统
在进行这一步之前,强烈建议先对SD卡进行格式化的操作,确保卡没有其他分区
文件夹中有两种固件类型:factory原厂固件、sysupgrade固件
根据查阅的资料可以了解到,在第一次安装OpenWrt系统时,需要使用factory固件,sys upgrade固件只能用在升级时使用,因为sysupgrade不包含数据分区
在openwrt wiki中有专门描述sysupgrade:sysupgrade替换linux内核和squash文件系统,擦除整个jffs2部分。能保留配置文件,但不能保留二进制安装文件
使用fdisk命令查看SD卡设备id
sudo fdisk -l
Disk /dev/sda: 59.48 GiB, 63864569856 bytes, 124735488 sectors
Disk model: STORAGE DEVICE
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x009b2c27
解压固件,并使用dd命令烧录系统
$ gzip -d -c bin/targets/stm32/stm32mp1/openwrt-stm32-stm32mp1-stm32mp135f-dk-ext4-factory.img.gz | dd of=/dev/sda
执行完命令后,稍等片刻便会显示烧录结果,如果烧录速度高达300M/s 请检查盘符等是否正确
插入SD卡 并设置板卡
将MicroUSB线连接至stlinkV3
配置SW1为SD启动
STM32MP157: BOOT0 和BOOT2 拨向ON
STM32MP135: BOOT0 和BOOT2 拨向 ON, BOOT1 拨向 OFF
连接电源就可以在串口终端上看到Uboot已经正常启动并开始引导
大概30s后openwrt就可以启动完成
以上就完成了OpenWrt在STM32MP135上的部署,更多的玩法请大家继续开发
不错不错
好文必须点赞,好文要多发
好文必须点赞,好文要多发 支持大佬,熬夜搞出来的,辛苦了!!!!!!!
不错,牛人哟
链接:https://pan.baidu.com/s/1-zwgc90gNCgegxGt9AOpcQ?pwd=4ric 提取码:4ric
已经构建好的镜像文件 按照对应板卡可以直接烧录进去
按照帖子编译过程中出现很多错误,希望提供详细的编译教程,谢谢!
该教程是一步一步截图的没有遗漏 检查自己的开发环境先
先去按照官网wiki搭建完环境确定能编译Linux镜像在来尝试本贴教程