STM32/STM8技术论坛
直播中

donatello1996

8年用户 687经验值
擅长:处理器/DSP 控制/MCU RF/无线
私信 关注

【STM32MP157A-DK1开发板试用连载】【小白向】Re:0 从零开始的Debian文件系统搭建教程

` 本帖最后由 donatello1996 于 2020-4-19 22:17 编辑

(本帖与Re:0没有任何关系,但各位真爱粉可以跟帖刷EMT,没有关系0w0)

特别鸣谢eeworld论坛的freebsder大佬的指导。

STM32MP157官方给出的系统镜像是基于Yocto搭建的定制系统,只保留基本的,嵌入式开发需要用的一些常用软件,比如i2c-tool,gpio,v4l2,net-tools库等,像apt,gcc,samba,vnc,sql这些方便开发者使用的大容量软件是没有的。我们都知道,有了apt软件,就等于有了无限可能,Debian/Ubuntu系统的apt软件可以链接至各种Debian/Ubuntu第三方开源软件网站,这些网站是时刻实时更新第三方软件和软件库的,无论要下载什么软件,只需要apt install就完事了,非常简单方便。正如同freebsder大佬所说那样,yocto文件系统的制作过程是靠各种python脚本的,python大家都知道,拿来写代码就挺好用,但是要拿来组一个大的体系,各种编译依赖/运行依赖烦的一批,在解决依赖时会浪费大量不必要时间,能不用就不用,直接拿现成的Debian文件系统镜像来用不香吗?由于我在此帖之前也没有尝试过搭建任何Linux文件系统,可以说是对此完全小白,所以各位论坛小白阅读此帖不会有任何知识壁垒,以下开始帖子正文。
这个过程耗时几个下班的晚上,可以说刷新了我对Linux文件系统的初步认知,中间也遇到过不少难啃的问题,通过百度,CSDN论坛,咨询大佬等方法解决了,希望也能给想玩文件系统的小白提供宝贵的指导。
第一步是需要有个Debian10系统,虚拟机物理机都可以,最好是带图形桌面的,方便各种操作,切记千万不能用Ubuntu系统去搭建Debian的文件系统镜像,绝对不行,这是我自己的教训,我碰壁过一次了,虽说用Ubuntu系统搭建的Debian文件系统镜像也可以启动,但是会有诸多兼容性问题,为了防止出现这些问题,不要这样做,听我说的,去下载带桌面的Debian10虚拟机镜像:
magnet:?xt=urn:btih:8A57BB619633D6A52CAF9750A1B4B9E38256984F
中间安装过程比较繁杂,全部用默认选项就可以了,装好之后界面如下:
17.jpg



==================以下是使用Debian虚拟机用户操作的指令==================
开展工作前使用
  1. sudo -s
指令切换到root权限,实际上这是我的肌肉记忆了,因为我玩Linux这么多年,就没用过root以外的权限。

软件源要更换成国内源,享受极速apt下载速度,将/etc/apt/sourse.list替换成以下内容:
  1. deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
  2. deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
  3. deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
  4. deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
  5. deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
  6. deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
  7. deb https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free
  8. deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free
23.jpg


随便选择一个目录,创建自己的文件系统存放目录,我这里已经有一个弄好的donatello_rootfs,我就新建一个新的donatello_rootfs1目录:
18.jpg

然后下载qemu-user-static和debootstrap软件,已经装好就不用下载:
  1. apt install qemu-user-static debootstrap
qemu-user-static是文件系统操作模拟器,不能直接在Debian下执行这个指令,debootstrap就是今天的主角,用来搭建文件系统镜像的软件。
使用debootstrap软件指令来下载文件系统镜像:
  1. debootstrap --arch=armhf  --foreign buster donatello_rootfs1 https://mirrors.tuna.tsinghua.edu.cn/debian/
19.jpg
要点如下:
-需要等待几分钟时间把文件系统下载下来
-arch=armhf表示下载armhf架构的CPU所对应的文件系统,如A7核的i.mx6 全志H3之类的,STM32MP157是双核A7,同样适合armhf架构
-foreign表示非运行环境架构的文件系统,比如电脑虚拟机是amd64或者i386架构,要下载armhf架构的镜像,就要加这个参数
-buster表示Debian10的代号,必填,不理会
-镜像下载的链接可以有很多种选择,清华源只是其中一个选择,还有网易源,华中科大源,阿里云源等等
为了保险可以多执行几次这个指令,以防漏掉文件,一般网速好的话执行两次就行了:
20.jpg

然后要运行这两条指令,可以在这个下载下来的文件系统镜像上进行各种操作,使用刚刚下载到的qemu模拟器来操作:
  1. cp /usr/bin/qemu-arm-static donatello_rootfs1 /usr/bin/
  2. chroot donatello_rootfs1 /usr/bin/qemu-arm-static /bin/sh -i
21.jpg

chroot指令会将当前操作替换成目标文件系统用户操作,即donatello_rootfs1文件系统内。

==================以下是虚拟机内运行qemu模拟器用户操作的指令,不是虚拟机用户了,可以看作是虚拟机用户的第三方的软件运行,类似gdb这种==================

当出现一个#号的操作符的时候说明成功进入了模拟器。进来之后第一步要使用
  1. /debootstrap/debootstrap --second-stage
来将必要的软件解压:
22.jpg
-也是要等几分钟
-这步不能跳过,跳过必出BUG,不信自己试试


删除/boot目录,防止以后开发板的文件系统起来之后会进入这个/boot目录下运行:

  1. rm -fr /boot

设置root用户密码,这是必须的,即使以后不使用root权限也要有root用户,root用户是为了关键时刻可以救急:

  1. passwd root
需要敲两次密码,密码是密文不可见:
24.jpg

创建普通用户,比如我自己创建了个名为donatello的用户,用于系统串口终端登录,因为Debian默认禁止串口终端使用root用户登录:
  1. adduser donatello
-也是要输入两次密码
-那些没用的信息可以跳过,什么电话地址之类的乱七八糟的
25.jpg

重定向系统终端信息操作的设备,即ttySTM0.service,这个需要查询内核文件进行操作,ST维基里面写的就是要这样做,照做便是,不然系统终端输出的内容看不见:
  1. systemctl enable serial-getty@ttySTM0.service
26.jpg

更新软件包信息:
  1. apt-get update
  2. apt-get upgrade
27.jpg

安装必要的软件包,这个大家想装啥就装啥,我自己是安装了这些,特别是gcc和samba,sudo是一定要装的,不然没法切换root权限:
  1. apt-get install gcc sudo net-tools locales i2c-tools libgpiod2 spi-tools gpiod libiio-utils openssh-server iw network-manager samba x11vnc
28.jpg


加起来几百MB的东西,装完不知道要多久,慢慢等吧。装好之后可以运行各种软件,太香了:
29.jpg


装好之后使用
  1. du -h / | tail -n2
看下磁盘占用情况,将近1G,可怕:
30.jpg


这时候其实文件系统可以打包使用了,但是还需要做两步关键操作,第一个操作是编辑/etc/sudoers文件,在root ALL=(ALL:ALL) ALL下面新增一行donatello ALL=(ALL:ALL) ALL,donatello可以替换为自己的用户名,这个是为了可以让普通用户下可以切换root权限,必须做!
31.jpg



然后是编辑/etc/ssh/sshd_config,找到PermitRootLogin,取消#号注释,并将变量设置为yes,用于打开sshd远程登录的root用户权限,并且不需要输入密码:
32.jpg


做完这两步,就可以打包文件系统了,使用exit指令退出chroot模拟器用户操作,如果刚刚有sudo -s的话需要两次exit:
33.jpg


==================以下又回到使用Debian虚拟机用户操作的指令==================

这个就是刚刚弄好的文件系统镜像了:
使用
  1. dd if=/dev/zero of=donatello_rootfs1.ext4 bs=1M count=1000
指令生成一个名为donatello_rootfs1.ext4的文件系统镜像,count的选择是要大于文件系统本身大小的,比如我这里是900多MB,count就填1000

使用
  1. mkfs.ext4 donatello_rootfs1.ext4
指令将镜像格式化:
35.jpg


使用
  1. mkdir rfs1
  2. sudo mount donatello_rootfs1.ext4 rfs1
  3. sudo cp -ar donatello_rootfs1/* rfs1
  4. sudo umount rfs1
四条指令将刚刚在donatello_rootfs1搭建好的文件系统所有内容复制到donatello_rootfs1.ext4镜像下,中间mount的操作是将donatello_rootfs1.ext4镜像挂载到rfs1文件夹下面,对rfs1的操作就是对donatello_rootfs1.ext4镜像的操作,四条指令最后的umount操作就是取消挂载或者叫镜像卸载,此时虚拟机会多出一个装载了文件系统镜像的虚拟磁盘,说明卸载成功,镜像可以直接使用了。为了慎重起见可以在执行mount或者umount指令的时候执行
  1. ls rfs
看下里面的内容是啥。

34.jpg

这时候需要下载安装ST官方给出的CubeProgrammer烧录软件,https://www.st.com/en/development-tools/stm32cubeprog.html
找到可执行文件STM32_Programmer_CLI.exe的目录路径,比如我就装在D盘的shareCubeProg文件夹下面:D:shareCubeProginSTM32_Programmer_CLI.exe
36.jpg
这时候需要下载安装ST官方给出的系统固件OpenSTLinux压缩包,里面有uboot,内核,boot镜像,root文件系统镜像等内容,如果已经装好就可以直接开始之后的操作,为了方便我把整个固件包文件夹命名为MP1,下载链接:https://www.st.com/content/ccc/r ... nux-20-02-19.tar.xz
将刚刚生成的donatello_rootfs1.ext4镜像放到s5p4418-nanopi2镜像的安装目录下:
使用win+R,调出控制台输入cmd,打开命令行,切换到OpenSTLinux镜像的安装目录:
D:shareMP1
烧录前的最后一步是设置tsv文件,这个文件是设置SD卡烧录分区信息的,可以直接用FlashLayout_sdcard_stm32mp157a-dk1-trusted.tsv来改,我这里改成my1.tsv,内容如下:
  1. #Opt Id Name Type IP Offset Binary
  2. - 0x01 f***l1-boot Binary none 0x0 tf-a-stm32mp157a-dk1-trusted.stm32
  3. - 0x03 s***l-boot Binary none 0x0 u-boot-stm32mp157a-dk1-trusted.stm32
  4. P 0x04 f***l1 Binary mmc0 0x00004400 tf-a-stm32mp157a-dk1-trusted.stm32
  5. P 0x05 f***l2 Binary mmc0 0x00044400 tf-a-stm32mp157a-dk1-trusted.stm32
  6. P 0x06 s***l Binary mmc0 0x00084400 u-boot-stm32mp157a-dk1-trusted.stm32
  7. P 0x21 bootfs System mmc0 0x00284400 st-image-bootfs-openstlinux-weston-stm32mp1.ext4
  8. P 0x22 vendorfs FileSystem mmc0 0x04284400 st-image-vendorfs-openstlinux-weston-stm32mp1.ext4
  9. P 0x23 rootfs FileSystem mmc0 0x05284400 donatello_rootfs1.ext4

最后一行的rootfs改成我自己的donatello_rootfs1.ext4,地址不用改,原本最后的user_rootfs可以直接删掉,不需要烧录。

至此所有工作准备完毕,可以开始烧录,将一张空的SD卡插上电脑,将开发板的拨码开关设置为off-off,连接typec接口的OTG烧录口到电脑上,由于我的笔记本自带typec接口所以可以直接用双公头typec线连接,另外一侧的USB typec供电口接上5V电源,如图:


成功连接的话可以用STM32_Programmer_CLI.exe的-l u***参数查看连接的USB设备,有显示可用USB设备就说明可以开始烧录了:
42.jpg

使用STM32_Programmer_CLI.exe的-c和-w指令设置u***接口参数和tsv文件位置进行烧录:
  1. D:shareCubeProginSTM32_Programmer_CLI.exe -c port=u***1 -w flashlayout_st-image-weston/my1.tsv

由于烧录的时间很长,我这里就直接跳过了,直接查看烧录完成之后可以用的系统:
43.jpg

由于我刚刚配置了/etc/ssh/sshd_config文件开启root用户,所以可以用root用户ssh远程登录到板子上:
44.jpg

` IMG_20200419_205143.jpg

更多回帖

发帖
×
20
完善资料,
赚取积分