【北京迅为】《STM32MP157开发板使用手册》-第十八章 Debian文件系统

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7+单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板+底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐用,可满足高速信号环境下使用。共240PIN,CPU功能全部引出:底板扩展接口丰富底板板载4G接口(选配)、千兆以太网、WIFI蓝牙模块HDMI、CAN、RS485、LVDS接口、温湿度传感器(选配)光环境传感器、六轴传感器、2路USB OTG、3路串口,CAMERA接口、ADC电位器、SPDIF、SDIO接口等


第十八章 Debian文件系统

作为linux开发平台,iTOP-STM32MP157也可以移植debian系统。下面让我们一步步的构建Debian系统。

18 .1 安装所需的工具

首先使用如下命令安装所需工具

sudo apt-get install binfmt-support qemu qemu-user-static debootstrap

我们在此选用debootstrap 完成第一二阶段。

Debootstrap是debian/ubuntu下的一个工具,用来构建一套基本的系统(根文件系统)。生成的目录符合Linux文件系统标准(FHS),即包含了/boot、/etc、/bin、/usr等等目录,但它比发行版本的Linux体积小很多,当然功能也没那么强大,因此,只能说是"基本的系统"。

qemu是模拟器,是为了在宿主机上模拟开发板的环境

18 .2 根文件系统制作

制作Debian系统在网上也有很多相关的教程,基本流程和前一章节"第十七章 制作Ubuntu文件系统"相同,在这里我们就不进行一点点的制作,而直接使用Linaro 公司制作好的。该公司提供的Debian源码下载地址为

Linaro Releases

进入网址之后找到linaro-jessie-alip-20161117-32.tar.gz进行下载

由于该网站属于国外网站,下载速度较慢,我们已经将相应的压缩包下载下来。存放路径为"iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\04_debian文件系统\01_官网源码"。如下图所示:

18.3 Debian可烧写文件系统的制作

将我们下载好的源码通过SSH或者其他方式拷贝到虚拟机ubuntu上,如下图所示:

然后使用命令

tar -vxf linaro-jessie-alip-20161117-32.tar.gz

来对该压缩文件进行解压,如下图所示:

解压完成如下图所示:

然后使用命令:

sudo cp /usr/bin/qemu-arm-static ./binary/usr/bin/

该命令是为了方便我们对该文件系统进行Chroot挂载的。

为了制作成功的根文件系统能够联网,可以直接拷贝本机的dns配置文件到根文件系统的相应位置,使用命令

rm -rf ./binary/etc/resolv.conf

sudo cp -r /etc/resolv.conf ./binary/etc/resolv.conf

如下图所示:

然后修改根文件系统软件源,使用命令

sudo vim ./binary/etc/apt/sources.list

进入该文件,添加如下内容:

deb http://mirrors.tuna.tsinghua.edu.cn/debian jessie main contrib non-free

deb-src http://mirrors.tuna.tsinghua.edu.cn/debian jessie main contrib non-free

deb http://mirrors.tuna.tsinghua.edu.cn/debian jessie-updates main contrib non-free

deb-src http://mirrors.tuna.tsinghua.edu.cn/debian jessie-updates main contrib non-free

deb http://mirrors.tuna.tsinghua.edu.cn/debian-security jessie/updates main contrib non-free

deb-src http://mirrors.tuna.tsinghua.edu.cn/debian-security jessie/updates main contrib non-free

添加完成如下图所示:

接下来使用命令"vim binary/etc/hostname"进入hostname文件夹,将"linaro-alip"修改为"iTOP-STM32MP157"设置主机名称:

修改完成如下图所示:

保存退出,由于我们需要自动装载一些ko驱动文件且让这些文件在开机之后自动装载,我们首先拷贝"iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\04_debian文件系统\03_ko"路径下的ko文件夹到文件系统的usr目录下,拷贝完成如下图所示:

然后将"iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\05_ubuntu文件系统\04_rc.local"路径下的rc.local文件拷贝到文件系统的etc目录下,拷贝完成如下图所示:

然后使用命令"sudo chmod 777 rc.local"修改文件对应的权限,如下图所示:

至此,debian根文件系统就已经制作好了,然后我们进行下一个章节的镜像制作了。

18 . 4 debian 文件系统测试

18 . 4 .1 制作Debian烧写镜像

如下图所示,是制作好的ubuntu系统文件

使用命令"mkdir rootfs"创建一个文件夹rootfs用来挂载之后要制作出来的 rootfs.ext4文件系统镜像,如下图所示:

使用命令"du binary"来查看debian文件系统的大小,如下图所示:

使用命令"du binary"来查看debian文件系统的大小,如下图所示:

我们可以看到该文件系统的大小为1405M,在这里我们制作2000MB大小的镜像文件,然后使用命令

dd if=/dev/zero of=rootfs.ext4 bs=1M count=2000

mkfs.ext4 -L rootfs rootfs.ext4

建立一个大小为2000M的ext4 磁盘(作者在这里制作的大小为2000MB,个人感觉不够用的话,可以根据自身情况来进行增大,但要注意的是制作的镜像越大,对应的烧写时间越长),如下图所示:

接下来使用 mount 命令将 rootfs.ext4 挂载到rootfs 目录下(挂载要使用root用户),如下图所示:

mount ./rootfs.ext4 rootfs

然后拷贝我们制作的文件系统到rootfs 目录下,如下图所示:

cp -a binary/* ./rootfs

拷贝完成后,使用命令"umount rootfs",进行解除挂载,如下图所示:

这里的rootfs.ext4就是我们要烧写的文件系统镜像。

18 . 4 .2 Debian镜像的烧写

由于 Debian系统和Ubuntu系统相同,他们镜像的烧写和之前的QT系统存在区别,QT系统所使用的内核可以不用区分屏幕,而ubuntu系统不同。所以我们在烧写镜像的时候需要修改对应的内核镜像,我们镜像存放路径为"iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\04_debian文件系统\02_制作好的debian镜像",如下图所示:

在这里rootfs.ext4为我们要烧写文件系统的镜像。而rootfs.tar.gz为我们文件系统的源码,之后对文件系统的修改都是通过rootfs.tar.gz源码文件来修改的,最后就是我们的不同屏幕的内核镜像,进入该文件如下图所示:

这里只有四种屏幕的内核镜像,原因是这四种屏幕所使用的触摸驱动相同,而剩下的4.3寸屏幕和10.1寸屏幕所用到的驱动不同,故以上任何一个内核镜像都可以适配。而我们用到以上四种屏幕之后,需要拷贝对应目录下的bootfs.ext4内核镜像来替换烧写文件image目录下的bootfs.ext4文件。

然后我们可以根据烧写章节进行对应的烧写。

18 . 4 . 3 Debian 根文件系统测试

将上一小节所制作好的文件系统镜像rootfs.ext4拷贝到image烧写目录下,覆盖掉之前的rootfs.ext4,然后进行烧写,烧写启动之后如下图所示:

我们在使用过程中,可以按照ubuntu正常开发流程来使用。例如运行hello world程序。

首先使用命令"su root",然后输入我们的密码"topeet",进入root用户,如下图所示:

首先我们使用命令"gcc -v"查看 gcc 版本。如下图所示:

​​​​​​​​​​​​​​​​​​​​​​​​​​​​

使用"mkdir test"创建测试文件夹进入,如下图:

然后我们使用命令"vim helloworld.c"创建c文件。

输入如下内容:

|--------------------------------------------------------------------------------|
| #include<stdio.h> int main(void) { printf("hello world!\r\n"); return 0; } |

如下图:

添加完成之后保存并退出。

然后使用命令"arm-linux-gnueabihf-gcc -o helloworld helloworld.c"编译helloworld程序。如下图所示:

最后我们使用命令"./helloworld"即可运行程序,如下图。

18 . 4 . 4 Debian WIFI测试

烧写完成之后启动开发板,进入登录界面,登录

进入文件系统之后如下图所示:

使用关闭以太网命令

ifconfig eth0 down

输入以下命令查看网络设备, 如下图所示

nmcli dev

由于测试用的开发板之前已经连接过wiifi了,所以可能会和大家显示的不同,输入以下命令开启 wifi

nmcli r wifi on

输入以下命令扫描 wifi

nmcli dev wifi

输入以下命令连接 wifi

nmcli dev wifi connect "wifi 名" password "密码"

作者连接公司的 wifi, 输入以下命令:

nmcli dev wifi connect "2701" password "topeet2015"

输入以下命令发现可以 ping 通百度,说明 WiFi 联网成功。

ping www.baidu.com

需要注意的是可能会出现如下图所示错误

我们需要使用命令"vim /etc/resolv.conf",进入resolv.conf文件添加以下内容

nameserver 114.114.114.114

nameserver 8.8.8.8

添加完成如下图所示:

至此我们的debian文件系统就可以上网了

至此我们的wifi测试就完成了。

18 . 4 . 5 4.3寸屏幕校准

使用4.3寸屏幕的客户在烧写debian系统后,会发现屏幕的触摸不准确,所以我们需要校准屏幕。

开机启动之后,进入登录界面,在终端我们用户名和密码都输入"topeet"即可进入系统,如下图所示:

然后我们使用以下命令

vim /usr/share/X11/xorg.conf.d/10-evdev.conf

进入10-evdev.conf文件夹如下图所示:

我们找到关于触摸屏幕的设置信息"Identifier "libinput touchscreen catchall""如下图所示:

在该设置信息下添加以下内容,添加完成如下图所示:

Option "InvertX" "true"

Option "InvertY" "true"

保存退出,然后重启开发板,再次打开图形化界面会发现,触摸正常了。

1 8 . 5 使用 Chroot挂载 文件系统

为了更好的对文件系统进行修改,我们可以使用Chroot挂载文件系统,具体过程如下图所示:

首先将"iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\04_debian文件系统\02_制作好的debian镜像"下的rootfs.tar.gz文件拷贝到虚拟机ubuntu上,如下图所示:

在本机挂载刚刚下载好的文件系统,需要挂载proc, sys, dev, dev/pts等文件系统。使用命令"sudo vi mount.sh"添加挂载脚本。如下图所示:

挂载过程的脚本mount.sh内容如下:

#!/bin/bash
mnt() {
	echo "MOUNTING"
	sudo mount -t proc /proc ${2}proc
	sudo mount -t sysfs /sys ${2}sys
	sudo mount -o bind /dev ${2}dev
	sudo mount -o bind /dev/pts ${2}dev/pts
	sudo chroot ${2}
}
umnt() {
	echo "UNMOUNTING"
	sudo umount ${2}proc
	sudo umount ${2}sys
	sudo umount ${2}dev/pts
	sudo umount ${2}dev
}

if [ "$1" == "-m" ] && [ -n "$2" ] ;
then
	mnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
then
	umnt $1 $2
else
	echo ""
	echo "Either 1'st, 2'nd or both parameters were missing"
	echo ""
	echo "1'st parameter can be one of these: -m(mount) OR -u(umount)"
	echo "2'nd parameter is the full path of rootfs directory(with trailing '/')"
	echo ""
	echo "For example: ch-mount -m /media/sdcard/"
	echo ""
	echo 1st parameter : ${1}
	echo 2nd parameter : ${2}
fi

添加完成如下图:

保存退出

(2)然后使用命令"sudo chmod 777 mount.sh"修改脚本权限,如下图所示:

(3)然后使用命令"sudo ./mount.sh -m binary/"运行挂载。如下图所示:

此时我们可以看到,根目录切换成了当前制作debian的目录,我们可以在该系统中安装我们所需要的软件,我们安装mplayer进行演示,使用命令"apt-get install mplayer"进行安装,如下图所示:

安装其他软件步骤相同,对此操作完成之后,输入exit退出,然后使用命令"./mount.sh -u binary/"取消挂载,如下图所示:

我们修改完成的文件系统继续根据18.4.1小节"制作Debian烧写镜像"来制作镜像,然后根据对应的章节来进行烧写。

1 8 . 6 使用制作好的 Debian 文件系统

在网盘目录"iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\04_debian文件系统\02_制作好的debian镜像"下有制作好的文件系统镜像rootfs.ext4,和制作好的压缩文件 rootfs.tar.gz。

rootfs.ext4文件可以直接拷贝到image目录下,替换原来的文件系统镜像,然后直接进行烧写即可。

要是我们想对Debian系统进行一定的修改,则可以根据18.5小节进行系统CHroot挂载,然后进行修改。

相关推荐
饮啦冰美式8 分钟前
22.04Ubuntu---ROS2使用rclcpp编写节点
linux·运维·ubuntu
wowocpp8 分钟前
ubuntu 22.04 server 安装 和 初始化 LTS
linux·运维·ubuntu
Huaqiwill9 分钟前
Ubuntun搭建并行计算环境
linux·云计算
wclass-zhengge12 分钟前
Netty篇(入门编程)
java·linux·服务器
Lign1731414 分钟前
ubuntu unrar解压 中文文件名异常问题解决
linux·运维·ubuntu
vip4511 小时前
Linux 经典面试八股文
linux
大霞上仙1 小时前
Ubuntu系统电脑没有WiFi适配器
linux·运维·电脑
孤客网络科技工作室2 小时前
VMware 虚拟机使用教程及 Kali Linux 安装指南
linux·虚拟机·kali linux
颇有几分姿色3 小时前
深入理解 Linux 内存管理:free 命令详解
linux·运维·服务器
极客小张3 小时前
基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路
stm32·单片机·嵌入式硬件·mqtt·sqlite·毕业设计·智能充电桩