你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

首发STM32MP135构建OpenWRT系统

[复制链接]
短笛君 发布时间:2024-6-14 04:27

前言

今天无意中点开了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.pnge504fcc3897243440aecdad64272e38.png

系统配置完成之后,进行代码拉取 并切换相应分支

$ git clone -b master https://git.openwrt.org/openwrt/openwrt.git
$ cd openwrt
$ git checkout cffd3ad8d7

d6ea0d38af5218a5ee6c9ab0c8215db.png

将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

更新 安装所有STM32packages

$ ./scripts/feeds update -a
$ ./scripts/feeds install stm32
$ ./scripts/feeds install -a -f

f7ea50f31752c0fe7e0dddc2cf67923.png

6692490ca2184424dfea8a2d135a781.png

7178e666539b8f94bfd30a42038cafc.png

使用make menuconfig命令进行图形化配置

$ make menuconfig

31126e280fb735a997b042165481071.png

在Target system中 我们选择 STMicroelectronics STM32 

09d8bae70ce6dec30d206b8da2069be.png

在subtarget中 选择 STM32MP1 boards

3930f617d88bd97db1c874645af79c3.png

在Target Profile中选择 STMicroelectronics STM32MP135F-DK

de6d8abd491c4259aa029c4a456f24f.png

选择完成之后 通过方向键移动光标选择save

保存完成之后就可以准备开始构建了

a27ff8c3d3c8a475bd84a4e81f494ad.png

可能会因为缺少环境而报错,缺少哪个pack包就安装就好

9f0797f4b962f93fe9525ea07cb485e.png

强烈建议第一次构建不要使用多核编译,建议使用单核编译完成之后再使用多核编译进行构建!!!

构建

$ make -j$(nproc)

75cf72fe0f223da6fbc8c9ef387b54c.png

在一段漫长的等待过后

系统编译完成

9bb90fb1fbf949bc2be7d15e1f0ee2c.png

/home/ddj/Downloads/openwrt/bin/targets/stm32/stm32mp1目录下可以找到构建的镜像

8218f0cf7a765f46868231a23bca560.png

烧录系统

在进行这一步之前,强烈建议先对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

插入SD卡 并设置板卡

将MicroUSB线连接至stlinkV3

配置SW1为SD启动

STM32MP157: BOOT0 和BOOT2 拨向ON

STM32MP135: BOOT0 和BOOT2 拨向 ON, BOOT1 拨向 OFF

连接电源就可以在串口终端上看到Uboot已经正常启动并开始引导

c4657376565d352d818ea701e34ef4d.png

115de2b5699a8d7f6d73e680d218bf6.png

大概30s后openwrt就可以启动完成

46923b1146c39fe9618b5c693d232f1.png

以上就完成了OpenWrt在STM32MP135上的部署,更多的玩法请大家继续开发

115de2b5699a8d7f6d73e680d218bf6.png
3aca82d4c247b68c977dc2491c558b0.png
1 收藏 2 评论7 发布时间:2024-6-14 04:27

举报

7个回答
STMWoodData 回答时间:2024-6-14 09:47:51

不错不错

STMCU-管管 回答时间:2024-6-14 10:27:14

好文必须点赞,好文要多发

shenxiaolin_mai 回答时间:2024-6-14 10:33:43

好文必须点赞,好文要多发 支持大佬,熬夜搞出来的,辛苦了!!!!!!!

meiyao 回答时间:2024-6-14 10:33:45

不错,牛人哟

Hello Digger 回答时间:2024-6-14 10:37:50
感谢大佬分享
lospring 回答时间:2024-6-14 11:01:28
膜拜大佬
短笛君 回答时间:2024-6-14 14:26:47

链接:https://pan.baidu.com/s/1-zwgc90gNCgegxGt9AOpcQ?pwd=4ric 提取码:4ric

已经构建好的镜像文件 按照对应板卡可以直接烧录进去

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版