1. 开发环境准备与基础服务配置
在开始STM32MP157A开发板的Linux驱动开发之前,我们需要先搭建完整的开发环境。这个环境主要由Ubuntu主机和开发板组成,通过TFTP、NFS等网络服务进行文件传输和共享。
1.1 基础服务安装与验证
首先需要确保Ubuntu系统中安装了三个关键服务:
- Samba服务:用于在Windows和Ubuntu之间共享目录
- TFTP服务:用于通过网络下载内核镜像和设备树到开发板
- NFS服务:用于通过网络挂载根文件系统
安装这些服务的标准命令如下:
bash复制sudo apt-get install samba tftpd-hpa nfs-kernel-server
安装完成后,需要验证服务是否正常运行:
bash复制# 检查Samba服务状态
sudo systemctl status smbd
# 检查TFTP服务状态
sudo systemctl status tftpd-hpa
# 检查NFS服务状态
sudo systemctl status nfs-kernel-server
注意:如果服务没有自动启动,可以使用
sudo systemctl enable --now 服务名命令同时启用并启动服务。
1.2 共享目录配置
为了方便文件传输,我们需要设置两个共享目录:
/tftpboot:存放内核镜像(uImage)和设备树文件(.dtb)/opt:存放根文件系统(rootfs)
配置Samba共享的步骤如下:
bash复制sudo vim /etc/samba/smb.conf
在文件末尾添加以下内容:
ini复制[tftpboot]
path = /tftpboot
browseable = yes
public = yes
available = yes
writable = yes
[opt]
path = /opt
browseable = yes
public = yes
available = yes
writable = yes
保存后重启Samba服务:
bash复制sudo systemctl restart smbd
实操心得:在设置共享目录权限时,建议使用
sudo chmod -R 777 /tftpboot /opt命令确保所有用户都有读写权限,避免后续操作中出现权限问题。
2. 开发板启动文件准备
2.1 内核镜像与设备树文件部署
将编译好的内核镜像(uImage)和设备树文件(stm32mp157a-fsmp1a.dtb)拷贝到TFTP目录:
bash复制cp uImage stm32mp157a-fsmp1a.dtb /tftpboot/
验证文件是否成功拷贝:
bash复制ls -lh /tftpboot/
预期输出应包含这两个文件,并且文件大小合理(内核镜像通常在5-10MB,设备树文件约几十KB)。
2.2 根文件系统准备
根文件系统是Linux运行的基础环境,我们使用预编译的rootfs:
- 将rootfs.tar.xz拷贝到/opt目录
- 解压文件系统:
bash复制cd /opt
tar -xvf rootfs.tar.xz
- 配置NFS共享:
bash复制sudo vim /etc/exports
添加以下内容:
bash复制/opt/rootfs *(rw,sync,no_root_squash,no_subtree_check)
重启NFS服务:
bash复制sudo systemctl restart nfs-kernel-server
常见问题:如果NFS挂载失败,可以尝试在开发板上使用
mount -t nfs -o nolock 服务器IP:/opt/rootfs /mnt命令测试连接,排查网络和权限问题。
3. 开发板连接与启动配置
3.1 硬件连接
开发板连接示意图如下:
- 使用USB转串口线连接开发板的调试串口(UART)到PC
- 使用网线连接开发板和PC(或同一局域网)
- 连接电源适配器
