前言
今天无意中点开了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
![107737eb5cfac536337a0b092ec0c21.png 107737eb5cfac536337a0b092ec0c21.png](data/attachment/forum/202406/14/041247gfm0m2erwhw2awmr.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
![e504fcc3897243440aecdad64272e38.png e504fcc3897243440aecdad64272e38.png](data/attachment/forum/202406/14/041247h0xbfxiqmjg4isfi.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
系统配置完成之后,进行代码拉取 并切换相应分支
$ git clone -b master https://git.openwrt.org/openwrt/openwrt.git
$ cd openwrt
$ git checkout cffd3ad8d7
![d6ea0d38af5218a5ee6c9ab0c8215db.png d6ea0d38af5218a5ee6c9ab0c8215db.png](data/attachment/forum/202406/14/041414jjneqernleufzfow.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
将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
![da24941cc330bdeec54e641b83650ba.png da24941cc330bdeec54e641b83650ba.png](data/attachment/forum/202406/14/041649suduw27k7k88w870.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
更新 安装所有STM32packages
$ ./scripts/feeds update -a
$ ./scripts/feeds install stm32
$ ./scripts/feeds install -a -f
![f7ea50f31752c0fe7e0dddc2cf67923.png f7ea50f31752c0fe7e0dddc2cf67923.png](data/attachment/forum/202406/14/041801t8k2flb66j2lfpf0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
![6692490ca2184424dfea8a2d135a781.png 6692490ca2184424dfea8a2d135a781.png](data/attachment/forum/202406/14/041847j1zl57o87oa9m1j4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
![7178e666539b8f94bfd30a42038cafc.png 7178e666539b8f94bfd30a42038cafc.png](data/attachment/forum/202406/14/041720d49zcvaceh8dcyv3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
使用make menuconfig命令进行图形化配置
$ make menuconfig
![31126e280fb735a997b042165481071.png 31126e280fb735a997b042165481071.png](data/attachment/forum/202406/14/041930lvy60y0zv232yapw.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
在Target system中 我们选择 STMicroelectronics STM32
![09d8bae70ce6dec30d206b8da2069be.png 09d8bae70ce6dec30d206b8da2069be.png](data/attachment/forum/202406/14/042542azhzji59iivbfbzb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
在subtarget中 选择 STM32MP1 boards
![3930f617d88bd97db1c874645af79c3.png 3930f617d88bd97db1c874645af79c3.png](data/attachment/forum/202406/14/042617ljwaqvb7pumw5sla.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
在Target Profile中选择 STMicroelectronics STM32MP135F-DK
![de6d8abd491c4259aa029c4a456f24f.png de6d8abd491c4259aa029c4a456f24f.png](data/attachment/forum/202406/14/042625w6xr5kjf998vzzef.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
选择完成之后 通过方向键移动光标选择save
保存完成之后就可以准备开始构建了
![a27ff8c3d3c8a475bd84a4e81f494ad.png a27ff8c3d3c8a475bd84a4e81f494ad.png](data/attachment/forum/202406/14/042138mhd3ofm39nyzs699.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
可能会因为缺少环境而报错,缺少哪个pack包就安装就好
![9f0797f4b962f93fe9525ea07cb485e.png 9f0797f4b962f93fe9525ea07cb485e.png](data/attachment/forum/202406/14/041950acc8ctdbqmy18zuy.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
强烈建议第一次构建不要使用多核编译,建议使用单核编译完成之后再使用多核编译进行构建!!!
构建
$ make -j$(nproc)
![75cf72fe0f223da6fbc8c9ef387b54c.png 75cf72fe0f223da6fbc8c9ef387b54c.png](data/attachment/forum/202406/14/042014fhkzpmgsr10kmk8j.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
在一段漫长的等待过后
系统编译完成
![9bb90fb1fbf949bc2be7d15e1f0ee2c.png 9bb90fb1fbf949bc2be7d15e1f0ee2c.png](data/attachment/forum/202406/14/042155lspl7pv5phz41d8h.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
在 /home/ddj/Downloads/openwrt/bin/targets/stm32/stm32mp1
目录下可以找到构建的镜像
![8218f0cf7a765f46868231a23bca560.png 8218f0cf7a765f46868231a23bca560.png](data/attachment/forum/202406/14/042212phwszuaarssis318.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
烧录系统
在进行这一步之前,强烈建议先对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 请检查盘符等是否正确
![f8abe0b74909bbb37506e9bd716c549.png f8abe0b74909bbb37506e9bd716c549.png](data/attachment/forum/202406/14/042429hq0oss4l6svtvssk.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
插入SD卡 并设置板卡
将MicroUSB线连接至stlinkV3
配置SW1为SD启动
STM32MP157: BOOT0 和BOOT2 拨向ON
STM32MP135: BOOT0 和BOOT2 拨向 ON, BOOT1 拨向 OFF
连接电源就可以在串口终端上看到Uboot已经正常启动并开始引导
![c4657376565d352d818ea701e34ef4d.png c4657376565d352d818ea701e34ef4d.png](data/attachment/forum/202406/14/042452yrrdojlkn0t0tut8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
![115de2b5699a8d7f6d73e680d218bf6.png 115de2b5699a8d7f6d73e680d218bf6.png](data/attachment/forum/202406/14/042501cdv09rxgc333t5ca.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
大概30s后openwrt就可以启动完成
![46923b1146c39fe9618b5c693d232f1.png 46923b1146c39fe9618b5c693d232f1.png](data/attachment/forum/202406/14/042516lfqytcym41ccyhzs.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
以上就完成了OpenWrt在STM32MP135上的部署,更多的玩法请大家继续开发
不错不错
好文必须点赞,好文要多发
好文必须点赞,好文要多发 支持大佬,熬夜搞出来的,辛苦了!!!!!!!
不错,牛人哟
链接:https://pan.baidu.com/s/1-zwgc90gNCgegxGt9AOpcQ?pwd=4ric 提取码:4ric
已经构建好的镜像文件 按照对应板卡可以直接烧录进去