Linux第64步_编译移植好的虚拟机文件

最好还是认真了解linux系统移植的整个过程,否则,可能会让你误入歧途。

1、编译移植好的tf-a

1)编译生成“tf-a-stm32mp157d-atk-trusted.stm32”

输入“cd /home/zgq/linux/atk-mp1/tfa/my-tfa/tf-a-stm32mp-2.2.r1/回车”,切换到“/home/zgq/linux/atk-mp1/tfa/my-tfa/tf-a-stm32mp-2.2.r1/”目录下;

输入“ls回车”,列出“/home/zgq/linux/atk-mp1/tfa/my-tfa/tf-a-stm32mp-2.2.r1/”目录下所有的文件和文件夹;

输入“make -f ../Makefile.sdk clean”,清除以前的编译;

输入“make -f ../Makefile.sdk all回车”, 执行编译, '-f'的意思是重新指定Makefile。

输入“cd /home/zgq/linux/atk-mp1/tfa/my-tfa/build/trusted/回车

切换到“/home/zgq/linux/atk-mp1/tfa/my-tfa/build/trusted/”目录

输入“ls -l回车

列出“/home/zgq/linux/atk-mp1/tfa/my-tfa/build/trusted/”目录下所有的文件和文件夹;发现生成新的tf-a-stm32mp157d-atk-trusted.stm32

注意:立即使用“FileZilla”将它下载到“windows”中。否则在编译生成tf-a-stm32mp157d-atk-serialboot.stm32”时,生成的“tf-a-stm32mp157d-atk-trusted.stm32”会被清除了

2)、编译生成“tf-a-stm32mp157d-atk-serialboot.stm32”

输入“cd /home/zgq/linux/atk-mp1/tfa/my-tfa/tf-a-stm32mp-2.2.r1/回车”,切换到“/home/zgq/linux/atk-mp1/tfa/my-tfa/tf-a-stm32mp-2.2.r1/”目录下;

输入“ls回车”,列出“/home/zgq/linux/atk-mp1/tfa/my-tfa/tf-a-stm32mp-2.2.r1/”目录下所有的文件和文件夹;

输入“make -f ../Makefile.sdk clean”,清除以前的编译;

输入“make -f ../Makefile.sdk TFA_DEVICETREE=stm32mp157d-atk TF_A_CONFIG=serialboot ELF_DEBUG_ENABLE='1' all”,

执行编译, '-f'的意思是重新指定Makefile。这句非常重要,单独编译生成“tf-a-stm32mp157d-atk-serialboot.stm32”,不能使用“make -f ../Makefile.sdk all回车”来编译,否则在烧录程序时串口会报“Boot interface 6 not supported”问题

输入“cd /home/zgq/linux/atk-mp1/tfa/my-tfa/build/serialboot/回车

切换“/home/zgq/linux/atk-mp1/tfa/my-tfa/build/serialboot/”目录下

输入“ls –l tf-a-stm32mp157d-atk-serialboot*回车”,列出当前目录下所有以“tf-a-stm32mp157d-atk-serialboot”开头的的文件和文件夹。发现生成了新的“tf-a-stm32mp157d-atk-serialboot.stm32

注意:立即使用“FileZilla”将它下载到“windows”中

至此,我们完成了tf-a的编译。

2、编译移植好的u-boot

1)、输入“cd /home/zgq/linux/atk-mp1/uboot/my_uboot/回车”,切换到“/home/zgq/linux/atk-mp1/uboot/my_uboot/”目录下

输入“ls回车”,查看“/home/zgq/linux/atk-mp1/uboot/my_uboot/”目录下的所有文件和文件夹

2)、输入“vi stm32mp157d_alientek.sh回车

打开脚本文件“stm32mp157d_alientek.sh”内容如下:

#!/bin/bash

make stm32mp15_atk_trusted_defconfig

#使用stm32mp15_atk_trusted_defconfig覆盖“.config”

make DEVICE_TREE=stm32mp157d-atk all -j8

3)、按“ESC”,输入“:q!”不保存退出

4)、输入“make distclean”,手动清理工程;

5)、输入./stm32mp157d_alientek.sh,记住“make menuconfig

6)、输入“ls -l u-boot.stm32回车”,查看“u-boot.stm32”文件,发现生成了新的“u-boot.stm32

7)、使用“FileZilla”将它下载到“windows”中

至此,我们完成了u-boot的编译。

3、编译移植好的linux系统

1)、输入“cd /home/zgq/linux/atk-mp1/linux/linux-5.4.31/回车”,切换到“/home/zgq/linux/atk-mp1/linux/linux-5.4.31/”目录下

2)、输入“ls回车”,查看“/home/zgq/linux/atk-mp1/linux/linux-5.4.31/”目录下的所有文件和文件夹

记住:“stm32mp1_atk_defconfig”位于“/home/zgq/linux/atk-mp1/linux/linux-5.4.31/arch/arm/configs”

记住:“make menuconfig”用于打开linux内核图形化配置界面

3)、输入“vi stm32mp157d_alientek.sh回车

打开脚本文件“stm32mp157d_alientek.sh”内容如下:

#!/bin/sh

make distclean    #清理工程

make stm32mp1_atk_defconfig

#使用”stm32mp1_atk_defconfig”覆盖“.config”

make menuconfig

#打开linux内核图形化配置界面,若不用修改,则两次“ESC键

make uImage dtbs LOADADDR=0XC2000040 -j8

#指定编译“Image”和“dtbs”,并指定装载的起始地址为0XC2000040,j8表示指定采用8线程执行。

4)、按“ESC”,输入“:q!”不保存退出

5)、输入“./stm32mp157d_atk.sh回车”,执行脚本编译

6)、弹出“图形化配置界面”再按两次“ESC

7)、等待编译完成

8)、输入“ls arch/arm/boot/uImage -l

查看是否生成了新的“uImage”文件

9)、输入“ls arch/arm/boot/dts/stm32mp157d-atk.dtb -l

查看是否生成了新的“stm32mp157d-atk.dtb”文件

拷贝输出的文件:

10)、输入“cp arch/arm/boot/uImage /home/zgq/linux/atk-mp1/linux/bootfs/ -f回车”,执行文件拷贝,准备烧录到EMMC;

11)、输入“cp arch/arm/boot/dts/stm32mp157d-atk.dtb /home/zgq/linux/atk-mp1/linux/bootfs/ -f回车”,执行文件拷贝,准备烧录到EMMC

12)、输入“cp arch/arm/boot/uImage /home/zgq/linux/tftpboot/ -f回车”,执行文件拷贝,准备从tftp下载;

13)、输入“cp arch/arm/boot/dts/stm32mp157d-atk.dtb /home/zgq/linux/tftpboot/ -f回车”,执行文件拷贝,准备从tftp下载;

14)、输入“cd /home/zgq/linux/atk-mp1/linux/bootfs/

切换到“/home/zgq/linux/atk-mp1/linux/bootfs/”目录

输入“ls -l回车”,查看“/home/zgq/linux/atk-mp1/linux/bootfs/”目录下的所有文件和文件夹

15)、输入“cd /home/zgq/linux/tftpboot/回车

切换到“/home/zgq/linux/tftpboot/”目录

输入“ls -l回车”,查看“/home/zgq/linux/tftpboot/”目录下的所有文件和文件夹

输入“chmod 777 stm32mp157d-atk.dtb回车

给“stm32mp157d-atk.dtb”文件赋予可执行权限

输入“chmod 777 uImage回车 ,给“uImage”文件赋予可执行权限

输入“ls回车”,查看“/home/zgq/linux/tftpboot/”目录下的所有文件和文件夹

16)、生成能烧录到EMMC的“bootfs.ext4”文件

输入“cd /home/zgq/linux/atk-mp1/linux/bootfs/回车”,切换到“/home/zgq/linux/atk-mp1/linux/bootfs/”目录

输入“ls  -l回车”,列出“bootfs”目录下的文件和文件夹

如果发现“bootfs.ext4”,则输入“rm bootfs.ext4”删除“bootfs.ext4

输入“du -h”查询容量,发现容量为7.1M

输入“dd if=/dev/zero of=bootfs.ext4 bs=1M count=10回车

输入“mkfs.ext4 -L bootfs bootfs.ext4回车

使用“mkfs.ext4”将“bootfs.ext4磁盘”格式化为“ext4”格式。

输入“ls -l回车”,列出“/home/zgq/linux/atk-mp1/linux/bootfs/”目录下的文件和文件夹

输入“sudo mount bootfs.ext4 /mnt/bootfs/回车”,

使用“mount命令”将“bootfs.ext4”磁盘挂载到“/mnt/bootfs”目录下;

输入“sudo cp uImage stm32mp157d-atk.dtb /mnt/bootfs/回车

将“uImage”和“stm32mp157d-atk.dtb”拷贝到“/mnt/bootfs/”目录中

输入“sudo umount /mnt/bootfs/回车”,使用“umount”卸载掉“bootfs”

输入“ls -l回车”,列出“/linux/atk-mp1/linux/bootfs”目录下的文件和文件夹

17)、烧录文件:

将“/linux/atk-mp1/linux/bootfs/bootfs.ext4”下载到“windows”中。

将“tf-a-stm32mp157d-atk-trusted.stm32,tf-a-stm32mp157d-atk-serialboot.stm32,u-boot.stm32bootfs.ext4”烧录到开发板。

18)、设置从EMMC启动linux系统

输入setenv bootcmd 'ext4load mmc 1:2 c2000000 uImage;ext4load mmc 1:2 c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000'

输入setenv bootargs 'console=ttySTM0,115200 root=/dev/mmcblk1p3 rootwait rw'

输入saveenv,保存“bootcmd和bootargs”的值

输入boot,启动 Linux 系统

19)、设置从网络启动linux系统

设置“bootcmd和bootargs”这两个环境变量,从网络启动linux系统

输入setenv bootcmd 'tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000',设置从网络启动linux系统

输入“setenv bootargs 'console=ttySTM0,115200 root=/dev/nfs nfsroot=192.168.2.180:/home/zgq/linux/nfs/rootfs,proto=tcp rw ip=192.168.2.178:192.168.2.180:192.168.2.1:255.255.255.0::eth0:off'

回车

输入: saveenv,保存bootcmd的值

输入: boot,启动 Linux 系统

至此,我们完成了linux内核的编译和烧录。

4、编译移植好的buildroot,构建根文件系统

1)、输入“cd /home/zgq/linux/buildroot/buildroot-2020.02.6/回车

切换到“/home/zgq/linux/buildroot/buildroot-2020.02.6/”目录下

2)、输入“ls回车

查看“/home/zgq/linux/buildroot/buildroot-2020.02.6/”目录下的所有文件和文件夹

记住:“stm32mp1_atk_defconfig”位于“/home/zgq/linux/buildroot/buildroot-2020.02.6/configs”目录中

记住:“make menuconfig”用于打开“buildroot”的图形化配置界面

记住:“make busybox-menuconfig”用于打开“buildroot中的busybox”的图形化配置界面

记住:“make stm32mp1_atk_defconfig”用于使用“make stm32mp1_atk_defconfig”覆盖“.config”

3)、输入“make show-targets回车”查看buildroot配置的目标软件包

4)、输入“make busybox回车”单独编译“busybox

5)、输入“make回车”执行编译“buildroot”

6)、挂载磁盘,拷贝文件,卸载磁盘,生成可供nfs下载的根文件系统

执行“cd /home/zgq/linux/nfs/rootfs切换目录

执行“sudo rm * -rf删除“/home/zgq/linux/nfs/rootfs”目录下的所有文件;

执行“cd /home/zgq/linux/buildroot/buildroot-2020.02.6/output/images切换目录;

执行“cp rootfs.tar /home/zgq/linux/nfs/rootfs”拷贝“rootfs.tar”

执行“cd /home/zgq/linux/nfs/rootfs切换目录

执行“tar -vxf rootfs.tar”解压“/home/zgq/linux/nfs/rootfs/rootfs.tar”

执行“rm rootfs.tar”删除“/home/zgq/linux/nfs/rootfs/rootfs.tar”

输入“ls -l”查看“/home/zgq/linux/nfs/rootfs/”目录,这就是由buildroot生成的可供nfs下载的根文件系统。

6)、生成能烧录到EMMC的“rootfs.ext4”文件

执行“cd /home/zgq/linux/rootfs/”进行目录切换

输入“du -h /home/zgq/linux/nfs/rootfs/

查看“/home/zgq/linux/nfs/rootfs/”目录的总容,因为下面创建“rootfs.ext4”要用到;

执行“dd if=/dev/zero of=rootfs.ext4 bs=1M count=1024”创建“rootfs.ext4”并分配1G个字节空间

执行“mkfs.ext4 -L rootfs rootfs.ext4”格式化“rootfs.ext4”并将卷标设置为“rootfs”

执行“sudo mount rootfs.ext4 /mnt/rootfs/”将“rootfs.ext4”挂载到“/mnt/rootfs/”目录下

执行“cd /home/zgq/linux/nfs/rootfs/”进行目录切换

执行“sudo cp * /mnt/rootfs/ -drf”将“/home/zgq/linux/nfs/rootfs/”目录下的所有文件拷贝到“/mnt/rootfs/”

执行“cd /home/zgq/linux/rootfs/”进行目录切换

执行“sudo umount /mnt/rootfs”卸载掉“/mnt/rootfs”目录下的所有文件

输入“ls -l”查看“/home/zgq/linux/rootfs”目录下是否生成新的“rootfs.ext4”,这个就是要烧录到EMMC中的文件

7)、烧录文件:

将“/home/zgq/linux/rootfs/rootfs.ext4”下载到“windows”中。

将“tf-a-stm32mp157d-atk-trusted.stm32,tf-a-stm32mp157d-atk-serialboot.stm32,u-boot.stm32bootfs.ext4rootfs.ext4”烧录到开发板。

8)、设置从EMMC启动linux系统

输入setenv bootcmd 'ext4load mmc 1:2 c2000000 uImage;ext4load mmc 1:2 c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000'

输入setenv bootargs 'console=ttySTM0,115200 root=/dev/mmcblk1p3 rootwait rw'

输入saveenv,保存“bootcmd和bootargs”的值

输入boot,启动 Linux 系统

9)、设置从网络启动linux系统

设置“bootcmd和bootargs”这两个环境变量,从网络启动linux系统

输入setenv bootcmd 'tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000',设置从网络启动linux系统

输入“setenv bootargs 'console=ttySTM0,115200 root=/dev/nfs nfsroot=192.168.2.180:/home/zgq/linux/nfs/rootfs,proto=tcp rw ip=192.168.2.178:192.168.2.180:192.168.2.1:255.255.255.0::eth0:off'

回车

输入: saveenv,保存bootcmd的值

输入: boot,启动 Linux 系统

至此,我们完成了使用“buildroot”构建根文件系统的编译和烧录。

由于使用busybox构建根文件系统很麻烦,就不加以总结了。在以后的开发中,我们主要使用buildroot来构建根文件系统。

这是一个非常完美的总结,只有真正参与整个系统移植,才能得到这个结论。每种开饭板的目录可能不一样,但大概流程是这样的。希望最好能参与移植,才能懂得其中的奥秘。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/700703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法打卡day1|数组篇|Leetcode 704.二分查找、27.移除元素

数组理论基础 数组是存放在连续内存空间上的相同类型数据的集合,可以方便的通过下标索引的方式获取到下标下对应的数据。 1.数组下标都是从0开始的。 2.数组内存空间的地址是连续的。 正是因为数组的在内存空间的地址是连续的,所以我们在删除或者增添…

算法题--华为od机试考试(分苹果、字符串统计及重排、高矮个子排队)

目录 分苹果 题目描述 输入描述 输出描述 示例1 输入 输出 备注 示例2 输入 输出 解析 答案 字符统计及重排 题目描述 输入描述 输出描述 示例1 输入 输出 说明 示例2 输入 输出 说明 解析 答案 高矮个子排队 题目描述 输入描述 输出描述 备注…

【深度学习笔记】3_5 图像分类数据集fashion-mnist

注:本文为《动手学深度学习》开源内容,仅为个人学习记录,无抄袭搬运意图 3.5 图像分类数据集(Fashion-MNIST) 在介绍softmax回归的实现前我们先引入一个多类图像分类数据集。它将在后面的章节中被多次使用&#xff0c…

STM32使用PB3, PB4引脚的注意事项

STM32的PB3, PB4引脚作为GPIO引脚需要注意,因为他们默认分别是JTDO和NJTRST引脚。 笔者在设计可调增益增益放大器(VGA)的时候,使用4个GPIO读取外部控制电压,根据约定的编码格式设定DAC的输出电压,从而设置V…

《Docker 简易速速上手小册》第1章 Docker 基础入门(2024 最新版)

文章目录 1.1 Docker 简介与历史1.1.1 Docker 基础知识1.1.2 重点案例:Python Web 应用的 Docker 化1.1.3 拓展案例 1:使用 Docker 进行 Python 数据分析1.1.4 拓展案例 2:Docker 中的 Python 机器学习环境 1.2 安装与配置 Docker1.2.1 重点基…

消息队列-RabbitMQ:发布确认—发布确认逻辑和发布确认的策略

九、发布确认 1、发布确认逻辑 生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式,所有在该信道上面发布的消息都将会被指派一个唯一的 ID (从 1 开始),一旦消息被投递到所有匹配的队列之后,broker 就会发送一个确认给…

Python基础教程——17个工作必备的Python自动化代码

您是否厌倦了在日常工作中做那些重复性的任务?简单但多功能的Python脚本可以解决您的问题。 引言 Python是一种流行的编程语言,以其简单性和可读性而闻名。因其能够提供大量的库和模块,它成为了自动化各种任务的绝佳选择。让我们进入自动化…

K8s环境搭建

一、基础环境准备 VMware虚拟机,安装三台CentOS,网络环境选择NAT模式,推荐配置如下(具体安装步骤省略,网上很多虚拟机安装CentOS7的教程) 二、网络环境说明 使用NAT模式,我的IP分别是&#xf…

Promise相关理解记录

一、Promise基础定义相关 Promise是一个构造函数,调用时需要使用new关键字 Promise是解决回调地狱的一种异步解决方式 Promise有三个状态:pending(进行中)、fulfilled(成功)、rejected(失败) Promise的状态只会从 pending→fulfilled 或者 pending→…

SQL创建数据库

SQL,全称结构化查询语言(Structured Query Language),是一种用于管理关系型数据库的标准语言。通过 SQL,我们可以创建、查询、更新和删除数据库中的数据。今天,我们将学习使用SQL创建数据库。本文的目标是让读者了解如何使用SQL创…

300分钟吃透分布式缓存-13讲:如何完整学习MC协议及优化client访问?

协议分析 异常错误响应 接下来,我们来完整学习 Mc 协议。在学习 Mc 协议之前,首先来看看 Mc 处理协议指令,如果发现异常,如何进行异常错误响应的。Mc 在处理所有 client 端指令时,如果遇到错误,就会返回 …

信号系统之线性图像处理

1 卷积 图像卷积的工作原理与一维卷积相同。例如,图像可以被视为脉冲的总和,即缩放和移位的delta函数。同样,线性系统的特征在于它们如何响应脉冲。也就是说,通过它们的脉冲响应。系统的输出图像等于输入图像与系统脉冲响应的卷积…

pclpy 半径滤波实现

pclpy 半径滤波实现 一、算法原理背景 二、代码1.pclpy 官方给与RadiusOutlierRemoval2.手写的半径滤波(速度太慢了,用官方的吧) 三、结果1.左边为原始点云,右边为半径滤波后点云 四、相关数据 一、算法原理 背景 RadiusOutlier…

Linux——进程概念

目录 冯诺依曼体系结构 操作系统 管理 系统调用和库函数 进程的概念 进程控制块——PCB 查看进程 通过系统调用获取进程标示符 通过系统调用创建进程 进程状态 运行状态-R ​编辑 浅度睡眠状态-S 深度睡眠状态-D 暂停状态-T 死亡状态-X 僵尸状态-Z 僵尸进程…

AD24-PCB的DRC电气性能检查

1、 2、如果报错器件选中,不能跳转时,按下图设置 3、开始出现以下提示时处理 4、到后期,错误改得差不多的时候;出现以下的处理步骤 ①将顶层和底层铜皮选中,移动200mm ②执行以下操作 ③将铜皮在移动回来,进…

STM32_IIC_AT24C02_1_芯片简介即管脚配置

STM32的IIC总线是存在bug,感兴趣的可以上网搜一搜。我们可以使用两个I/O口和软件的方式来模拟stm32的iic总线的控制,所以就不需要使用stm32的硬件控制器了,同理数据手册中的I2C库函数也没有用了。 ROM(只读存储器)和…

黄仁勋最新专访:机器人基础模型可能即将出现,新一代GPU性能超乎想象

最近,《连线》的记者采访了英伟达CEO黄仁勋。 记者表示,与Jensen Huang交流应该带有警告标签,因为这位Nvidia首席执行官对人工智能的发展方向如此投入,以至于在经过近 90 分钟的热烈交谈后,我(指代本采访的…

blender快捷键记录

一、移动界面方式 1、shift 拖动界面 2、滚轮wheel 以世界原点为中心旋转 二、基本操作 1、s 方位键 放大缩小 2、g 方位键 移动方位 3、r 方位键 渲染方位 4、tab 切换编辑模式 5、衰减模式 g wheel 可以调整衰减圈范围大小 6、编辑模式 1、2、3 切换点 线 面 的…

276.【华为OD机试真题】矩阵匹配(二分法—JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-矩阵匹配二.解题思路三.题解代码Python题解代码…

【LeetCode】416. 分割等和子集(中等)——代码随想录算法训练营Day41

题目链接:416. 分割等和子集 题目描述 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例 1: 输入:nums [1,5,11,5] 输出:true 解释&#x…