简介

IMG_20240711_184426

最近淘了一块东山Pi柒号开发板,应该是最便宜的TRM和DS齐全的linux嵌入式板子,基于STM32MP157(双核A7+M4),支持Linux内核5.4。核心板和底板具体资源见主板简介
注意PI系列主板仅提供在线入门文档和相关参考资料,没有专门的技术支持和服务。需要相关服务的建议购买教材配套的开发版STM32MP157-PRO
如果不愿折腾的建议选基于i.MX 6ULL的开发板IMX6ULL_PRO,虽然性能弱价格贵但资料最多。

编译buildroot

我到手的板子emmc是空的,需先刷系统。官方镜像中,core版连ssh都无,aiot版只有一个版本,而且很旧。所以建议从最新源码编译。
先下载buildroot源码:

1
2
3
cd ~/src
git clone https://github.com/DongshanPI/Buildroot-ST.git buildroot
git clone -b main https://github.com/DongshanPI/buildroot-external-dongshanpiseven.git

建议用ubuntu 18.04进行编译,我已经制作了docker镜像,在容器内可直接编译。

1
docker run --rm -it -v /home/yourname/src:/home/user/src mjysci/buildroot-builder:bionic

进入buildroot源码目录运行图形配置界面:

1
2
3
cd src/buildroot
make BR2_EXTERNAL=../buildroot-external-dongshanpiseven dongshanpiseven_standard-aiot_defconfig
make menuconfig

按需启用dhcp(udhcpc -i eth0):System configuration -> Network interface to configure through DHCP -> eth0。顺便给Root设个密码。
取消编译rtl8188eu和rtl8723bu:位于Target packages -> Hardware handling。
保存退出。
执行编译(可根据host的核心数和内存添加-jN多线程编译,注意N太大会OOM):

1
make

编译完成后,会在~/src/buildroot/output/images/目录下生成镜像文件。

刷系统

安装STM32CubeProgrammer

1
sudo ./SetupSTM32CubeProgrammer-2.16.0.linux

运行STM32CubeProgrammer:

1
sudo /usr/local/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin/./STM32CubeProgrammer

接着按烧写&恢复系统里的步骤将其刷入开发板emmc。

修改ssh配置

串口连上开发板后,修改ssh配置允许密码登录:

1
2
sed -i 's@#PasswordAuthentication@PasswordAuthentication@g' /etc/ssh/sshd_config
sed -i 's@#PermitRootLogin prohibit-password@PermitRootLogin yes@g' /etc/ssh/sshd_config

重启ssh服务:

1
/etc/init.d/S50sshd restart

交叉编译工具链

位于~/src/buildroot/output/host/bin/目录下。

coremark

2024-07-11_18-49

2.709/MHz,略低于rv1106(Cortex-A7@1.3GHz,3646.086534)的2.805/MHz。

双核跑分:

2024-07-11_18-50

debug

报错c-stack.c:55:26: error: missing binary operator before token "(" 55 | #elif HAVE_LIBSIGSEGV && SIGSTKSZ < 16384

升级m4以增加对ubuntu 21之后的支持。但因为需要打补丁所以用18编译,也避免了其他的一些问题。

报错3fc/./os_dep/os_intfs.c:757:9: error: 'struct net_device' has no member named 'wireless_handlers'

取消编译rtl8188eu。

报错/home/user/src/buildroot/output/build/rtl8723bu-b922079a090dcaad58179d478442ff97f18521c9/./include/osdep_service_linux.h:246:8: error: '_timer' {aka 'struct timer_list'} has no member named 'data'

取消编译rtl8723bu。

相关资料

STM32MP157A/D Datasheet
STM32MP157 Reference manual

100ASK_STM32MP157_PRO开发板。资料丰富,板子不同,部分内容需要自己适配。