电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
STM32MP157安装Ubuntu18.04
分 享
扫描二维码分享
STM32MP157安装Ubuntu18.04
STM32
Ubuntu
天启raf
关注
发布时间: 2022-04-14
丨
阅读: 2681
> 拿着手里的STM32MP157 Mini,想移植一个Linux发行版,但是手册里只提供了linaro版的debian,于是想移植一个Ubuntu。鉴于网络上较全面的文章比较少,所以记录一下整个过程。 ## 获取ubuntu-base * 去[linaro官网](https://releases.linaro.org/ubuntu/)看了下,最新的ubuntu还停留在15.12版本也就是`vivid`,然而这个版本连国内支持armhf的ubuntu-vivid的源都不好找。因此就想通过**ubuntu-base**来构建rootfs。 * 先来到[ubuntu官网](http://cdimage.ubuntu.com/ubuntu-base/releases/),我这里选择的是**ubuntu-base-18.04**,是因为我电脑上的虚拟机环境也是ubuntu-18.04。如果使用18.04的虚拟机环境来构建**ubuntu-base-20.04**并chroot,会出现`qemu: Unsupported syscall: 403`的错误,这是因为在ubuntu-18.04中安装的qemu版本过低,因此要通过源码编译的方式来安装qemu5.2.0,这个过程比较麻烦,所以就选择了ubuntu-base-18.04。 * 下载[ubuntu-base-18.04.5-base-armhf.tar.gz](http://cdimage.ubuntu.com/ubuntu-base/releases/18.04/release/ubuntu-base-18.04.5-base-armhf.tar.gz)完成后,复制到虚拟机中。 **这里千万不要在Windows中解压,也不要在WSL环境的Ubuntu中进入到Windows目录中解压,因为有些文件名称相同只是大小写不同,在Windows中会被认为是同一个文件从而覆盖掉,而在Linux中则不会。** * 我这里复制到了`~/Desktop/Image/`目录下。新建一个文件夹并将压缩包解压进去。**注意解压使用`sudo`,之后的操作同样需要。** ```bash cd ~/Desktop/Image/ mkdir ubuntu-base-18.04 sudo tar zxf ubuntu-base-18.04.5-base-armhf.tar.gz -C ubuntu-base-18.04/ cd ubuntu-base-18.04/ ``` ## 配置环境 * 进入解压的目录后,复制`qemu-arm-static`到要制作的根文件系统中,这里确保已经正确安装了`qemu-user-static`。 ```bash sudo apt-get install qemu-user-static sudo cp /usr/bin/qemu-arm-static ./usr/bin ``` **如果遇到了这样的错误`chroot: failed to run command ‘/bin/bash’: No such file or directory`就是没有复制成功或者qemu没有安装好。可以使用下面的命令来强制重新安装** ```bash sudo apt-get --reinstall install qemu-user-static ``` * 下一步配置DNS以便能够正常联网,可以直接复制虚拟机的配置文件到根文件系统中,也可以编辑根文件系统的配置文件。 ```bash sudo cp /etc/resolv.conf ./etc/resolv.conf ``` * 修改软件源为中科大arm源 ```bash sudo vim ./etc/apt/sources.list ``` 删除原来文件中的所有内容,添加以下内容: ``` deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic main multiverse restricted universe deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-backports main multiverse restricted universe deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-proposed main multiverse restricted universe deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security main multiverse restricted universe deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-updates main multiverse restricted universe ``` ## 挂载根文件系统 * 接下来可以chroot到根文件系统中了。这里使用的是`arch-chroot`,这是archlinux提供的一个自动化chroot的脚本,可以进行自动挂载虚拟文件系统等操作,不用手动挂载。以下是安装以及执行的命令(确保正处于`ubuntu-base-18.04`目录下): ```bash sudo apt install arch-install-scripts sudo arch-chroot . ``` * 执行完成后会进入base根文件系统 ![进入根文件系统](https://cf04.ickimg.com/bbsimages/202204/820ed680f13bec88db654cbfb42d4b3b.png "进入根文件系统") * 执行以下命令,**看到很多教程都安装rsyslog,实测安装完问题不断,因此这里建议先不安装。** ```bash apt up
date apt install -y sudo language-pack-en-base ssh net-tools ethtool ifupdown iputils-ping htop vim bash-completion systemd ``` **其中必须安装的软件包:`systemd`,不安装这个就不能正确配置串口服务,烧录到板子上会出现`kernel panic`从而无法启动系统。**另外`ethtool、ifupdown`这几个也是需要安装的,否则无法配置网络。 * 设置root密码 ```bash passwd root ``` * 设置主机名称(STM32MP157)和本机IP ```bash echo "STM32MP157" > /etc/hostname echo "127.0.0.1 localhost" >> /etc/hosts echo "127.0.0.1 STM32MP157" >> /etc/hosts ``` * 配置DHCP ```bash echo auto eth0 > /etc/network/interfaces.d/eth0 echo iface eth0 inet dhcp >> /etc/network/interfaces.d/eth0 ``` * 配置串口自动登录 ```bash vim /lib/systemd/system/serial-getty\@.service ``` 修改`BindsTo`:将`dev-%i.device`改成`dev-%i`; 修改`ExecStart`:将`-/sbin/agetty --keep-baud 115200,38400,9600 %I $TERM`改成`-/sbin/agetty -a root --keep-baud 115200,38400,9600 %I $TERM`(如果`-/sbin/agetty`后面有`-o`参数,记得删掉,确保改完之后是一样的) ![串口配置](https://cf04.ickimg.com/bbsimages/202204/fa4b17743bcb9959478599ad0bd7db41.png "串口配置") * `exit`退出根文件系统。 ## 制作ext4文件系统镜像 * 首先使用`du`命令查看一下根文件系统的大小 ```bash cd .. sudo du -sh ubuntu-base-18.04 ``` ![查看根文件系统大小](https://cf04.ickimg.com/bbsimages/202204/47d76328e6886f081f968d627f917455.png "查看根文件系统大小") * 根文件系统大小是400M左右,那就创建一个500M的ext4空文件并格式化。 ```bash dd if=/dev/zero of= fsmp1x_rootfs.ext4 bs=500M count=1 sudo mkfs.ext4 fsmp1x_rootfs.ext4 ``` **这里如果ext4空文件的大小小于根文件系统的大小,复制的时候就会提示空间不足。这时候更改大小,重新来一遍就可以了** * 接下来挂载刚刚创建的ext4空文件,这里我挂载到了`~/Desktop/Image/fsmp1x_rootfs`,然后将`ubuntu-base-18.04`文件夹中所有内容复制到刚刚挂载的临时目录去 ```bash mkdir fsmp1x_rootfs sudo cp ./ubuntu-base-18.04/* ./fsmp1x_rootfs/ -a ``` * 卸载之前挂载的ext4文件 ```bash sudo umount ./fsmp1x_rootfs ``` * 这时候ext4文件系统已经制作好了,可以拷贝到windows中使用STM32CubeProgrammer进行烧录了。 ## 系统烧录及启动 * 烧录具体过程可参考配套的资料**【正点原子】STM32MP157快速体验V1.5.pdf 第二章节的系统烧录**,这里简单叙述一下重点。 * 将开发板的启动拨码开关设置为`000`,连接上`USB_OTG`线(建议连接电脑的USB3.0端口)。 * 找到配套资料包中为EMMC烧录准备`flashlayout`文件`atk_emmc-stm32mp157d-atk-qt.tsv`,使用记事本编辑最后一行rootfs对应的ext4文件系统名,修改为`fsmp1x_rootfs.ext4`(将该文件复制过去)。 ``` #Opt Id Name Type Device Offset Binary - 0x01 fsbl1-boot Binary none 0x0 tf-a/tf-a-stm32mp157d-atk-serialboot.stm32 - 0x03 ssbl-boot Binary none 0x0 uboot/u-boot.stm32 P 0x04 fsbl1 Binary mmc1 boot1 tf-a/tf-a-stm32mp157d-atk-trusted.stm32 P 0x05 fsbl2 Binary mmc1 boot2 tf-a/tf-a-stm32mp157d-atk-trusted.stm32 PD 0x06 ssbl Binary mmc1 0x00080000 uboot/u-boot.stm32 P 0x21 boot System mmc1 0x00280000 atk-image-bootfs.ext4 P 0x22 rootfs FileSystem mmc1 0x04280000 fsmp1x_rootfs.ext4 ``` * 打开STM32CubeProgrammer,打开上面修改过的flashlayout文件,选择二进制文件的路径,点击下载,完成后将拨码开关设置为`010`并上电启动。 * 通过串口查看系统启动情况,这里截出三个标志性的地方,分别是内核启动、系统启动、启动成功。 ![系统启动情况](https://cf04.ickimg.com/bbsimages/202204/38f938a312e68998dddd076b6fa5112e.png "系统启动情况") ## 系统配置 ### 1.调整分区大小 * 使用`df -h`命令查看文件系统磁盘使用情况,发现根文件系统的大小只有477M,已经使用了88%了,这是因为创建的ext4空文件的大小就是500M。 ![磁盘使用情况](https://cf04.ickimg.com/bbsimages/202204/49d0c7e7fad44228b8cea14d9748a1a8.png "磁盘使用情况") * 使用`fdisk -l`命令列出所有分区信息,在最后可以看到`/dev/mmcblk2p3`这个分区总共有7.2G ![分区信息](https://cf04.ickimg.com/bbsimages/202204/064498cc143b65d113717a1d1a9f0894.png "分区信息") * 因此要使用`resize2fs`命令来调整`/dev/mmcblk2p3`这个分区的大小。调整完再次查看,该分区的空间已经全部利用起来了 ![调整分区大小](https://cf04.ickimg.com/bbsimages/202204/2a5f93d8a24c03c548b790d59477fc51.png "调整分区大小") ### 2.安装gnome和vncserver * 安装gnome以及依赖包,安装过程中会出现选择时区的选项,选择`Asia-Shanghai`即可。 ```bash apt-get install --no-install-recommends ubuntu-desktop gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal -y ``` * 安装vncserver ```bash apt-get install vnc4server -y ``` * 不要着急启动vncserver,这时候连接上去只有灰灰的屏幕和'x'形的鼠标指针。先安装xfonts ```bash apt-get install xfonts-100dpi apt-get install xfonts-75dpi ``` * 再删除`~/.vnc/xstartup`文件原有内容,修改为以下内容 ```bash #!/bin/sh # Uncomment the following two lines for normal desktop: export XKL_XMODMAP_DISABLE=1 unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS [ -x /etc/vnc/xstartup ] && ex
ec /etc/vnc/xstartup [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources xsetroot -solid grey vncconfig -iconic & gnome-session & gnome-panel & gnome-settings-daemon & metacity & nautilus & gnome-terminal & ``` * 输入`vncserver`来启动,第一次启动会要求输入密码。再使用vnc客户端来连接,注意IP地址后面需要加上`:1`。可以使用`-geometry`来指定分辨率。 ```bash vncserver -geometry 1920x1080 ``` ![vnc连接成功](https://cf04.ickimg.com/bbsimages/202204/7d1cb9ed20f28acf099787c3b31555cf.png "vnc连接成功") ### 3.安装mate桌面 * 上面的gnome桌面过于简陋,使用以下命令安装mate桌面,需要消耗2GB以上的空间,耗时也比较久。 ```bash apt-get install ubuntu-mate-core ubuntu-mate-desktop ``` 安装完成后重启,再次使用vnc连接,等待十几秒就可以看到mate桌面了。 **说实话,好看是好看,缺点就是啥都不干的时候,这块板子上800MHz的CPU都能直接拉满。** ![mate桌面](https://cf04.ickimg.com/bbsimages/202204/b8c9fa825a34686141f0d305c2663a79.png "mate桌面")
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
天启raf
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交