STM32MP157安装Ubuntu18.04


拿着手里的STM32MP157 Mini,想移植一个Linux发行版,但是手册里只提供了linaro版的debian,于是想移植一个Ubuntu。鉴于网络上较全面的文章比较少,所以记录一下整个过程。

获取ubuntu-base

  • linaro官网看了下,最新的ubuntu还停留在15.12版本也就是vivid,然而这个版本连国内支持armhf的ubuntu-vivid的源都不好找。因此就想通过ubuntu-base来构建rootfs。

  • 先来到ubuntu官网,我这里选择的是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完成后,复制到虚拟机中。
    这里千万不要在Windows中解压,也不要在WSL环境的Ubuntu中进入到Windows目录中解压,因为有些文件名称相同只是大小写不同,在Windows中会被认为是同一个文件从而覆盖掉,而在Linux中则不会。

    • 我这里复制到了~/Desktop/Image/目录下。新建一个文件夹并将压缩包解压进去。注意解压使用sudo,之后的操作同样需要。
      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

    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没有安装好。可以使用下面的命令来强制重新安装*

    sudo apt-get --reinstall install qemu-user-static
  • 下一步配置DNS以便能够正常联网,可以直接复制虚拟机的配置文件到根文件系统中,也可以编辑根文件系统的配置文件。

    sudo cp /etc/resolv.conf ./etc/resolv.conf
  • 修改软件源为中科大arm源

    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目录下):

    sudo apt install arch-install-scripts
    sudo arch-chroot .
  • 执行完成后会进入base根文件系统
    进入根文件系统

  • 执行以下命令,看到很多教程都安装rsyslog,实测安装完问题不断,因此这里建议先不安装。

    apt update
    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密码

    passwd root
  • 设置主机名称(STM32MP157)和本机IP

    echo "STM32MP157" > /etc/hostname
    echo "127.0.0.1 localhost" >> /etc/hosts
    echo "127.0.0.1 STM32MP157" >> /etc/hosts
  • 配置DHCP

    echo auto eth0 > /etc/network/interfaces.d/eth0
    echo iface eth0 inet dhcp >> /etc/network/interfaces.d/eth0
  • 配置串口自动登录

    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参数,记得删掉,确保改完之后是一样的)
    串口配置

  • exit退出根文件系统。

制作ext4文件系统镜像

  • 首先使用du命令查看一下根文件系统的大小

    cd ..
    sudo du -sh ubuntu-base-18.04

    查看根文件系统大小

  • 根文件系统大小是400M左右,那就创建一个500M的ext4空文件并格式化。

    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文件夹中所有内容复制到刚刚挂载的临时目录去

    mkdir fsmp1x_rootfs
    sudo cp ./ubuntu-base-18.04/* ./fsmp1x_rootfs/ -a
  • 卸载之前挂载的ext4文件

    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并上电启动。

  • 通过串口查看系统启动情况,这里截出三个标志性的地方,分别是内核启动、系统启动、启动成功。
    系统启动情况

系统配置

1.调整分区大小

  • 使用df -h命令查看文件系统磁盘使用情况,发现根文件系统的大小只有477M,已经使用了88%了,这是因为创建的ext4空文件的大小就是500M。
    磁盘使用情况

  • 使用fdisk -l命令列出所有分区信息,在最后可以看到/dev/mmcblk2p3这个分区总共有7.2G
    分区信息

  • 因此要使用resize2fs命令来调整/dev/mmcblk2p3这个分区的大小。调整完再次查看,该分区的空间已经全部利用起来了
    调整分区大小

2.安装gnome和vncserver

  • 安装gnome以及依赖包,安装过程中会出现选择时区的选项,选择Asia-Shanghai即可。

    apt-get install --no-install-recommends ubuntu-desktop gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal -y
  • 安装vncserver

    apt-get install vnc4server -y
  • 不要着急启动vncserver,这时候连接上去只有灰灰的屏幕和’x’形的鼠标指针。先安装xfonts

    apt-get install xfonts-100dpi
    apt-get install xfonts-75dpi
  • 再删除~/.vnc/xstartup文件原有内容,修改为以下内容

    #!/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 ] && exec /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来指定分辨率。

    vncserver -geometry 1920x1080

    vnc连接成功

3.安装mate桌面

  • 上面的gnome桌面过于简陋,使用以下命令安装mate桌面,需要消耗2GB以上的空间,耗时也比较久。
    apt-get install ubuntu-mate-core ubuntu-mate-desktop
    安装完成后重启,再次使用vnc连接,等待十几秒就可以看到mate桌面了。
  • 说实话,好看是好看,缺点就是啥都不干的时候,这块板子上800MHz的CPU都能直接拉满。*
    mate桌面

文章作者: Tqraf
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Tqraf !
评论
  目录