STM32MP157/linux驱动学习记录

1. uboot烧录

2.linux安装nfs服务

  1. sudo apt-get install nfs-kernel-server rpcbind安装nfs服务

  2. 在用户根目录下创建一个名为“linux”的文件夹,以后所有的东西都放到这个“linux”文件夹里面,在“linux”文件夹里面新建一个名为“nfs”的文件夹,更改777权限。

  3. 打开 nfs 配置文件:sudo vi /etc/exports

  4. 在最后加上:/home/tao/linux/nfs *(rw,sync,no_root_squash)

  5. 重启nfs服务:sudo /etc/init.d/nfs-kernel-server restart

  6. (可选)windows中打开nfs,访问虚拟机中的nfs:
    mount 192.168.72.129:/home/tao/linux/nfs X:
    在文件管理中能看到x盘,取消挂载:umount X:

  7. 如果用开发板则可能出现cannot mount 问题,解决:sudo vi /etc/default/nfs-kernel-server
    在这里插入图片描述

  8. 执行指令查看 NFS 共享目录:showmount -e;指令nfsstat可查看状态。

3. uboot网络通信命令:

1.与虚拟机通信(桥接模式,可nfs)

1.NAT模式,不能用nfs,要nfs用桥接模式,烧录uboot程序后,开发板拨码开关改为010由内置emmc启动:
usb通过usb_ttl接上电脑,打开MobaXterm软件,波特率115200,启动完成后软件显示界面:
在这里插入图片描述
2. 使用的是usb网卡连接开发板与电脑。控制面板->网络和Internet->适配器:可知以太网是usb网卡。双击以太网(usb网卡)->详细信息,查看ip地址为192.168.137.1/24(如果没有则点击属性->ipv4配置一个ip地址),这时候表明开发板与网卡使用192.168.137.0/24这个网段可以与虚拟机通信。
在这里插入图片描述

  1. 配置一个虚拟网卡用于与开发板通信。点击虚拟机:编辑->虚拟网络编辑器->右下角点击更改配置,同意权限。然后选中VMnet0这一项,选择桥接模式,选择要跟开发板通过网线连接的接口,我这儿是Realtek USB……,你可根据自己的网络接口选择。
    在这里插入图片描述
  2. 虚拟机设置->网络适配器->选择使用VMnet0网卡,这是虚拟机VMnet0与usb网卡直连,与开发板处于同一网段,可通信。
    在这里插入图片描述
  3. 此时网卡还没有ip地址,设置一个与开发板同一网段的ip:sudo ifconfig ens33 192.168.137.4,使用ifconfig查看:
    在这里插入图片描述
  4. 在MobaXterm软件中设置开发版ip地址与电脑usb网卡处于同一网段,这里设置为192.168.137.3/24,网关则为电脑usb网卡地址,serverip为服务器地址,用于nfs传输文件,不用nfs则不设置,这里虚拟机中地址为192.168.137.4/24。使用ping 命令测试与网卡连通性,注意!只能在 uboot 中 ping 其他的机器,其他机器不能 ping uboot,因为 uboot 没有对 ping命令做处理,如果用其他的机器 ping uboot 的话会失败!
    .
  5. 此时开发板ip为192.168.137.3/24,使用nfs可挂载。注意:使用NAT模式时nfs c2000000 192.168.137.4:/home/tao/linux/nfs/uImage会提示cannot mount,而网上的方法是试遍了也不行,用桥接模式可以。

2.dhcp命令

1.dhcp 用于从路由器获取 IP 地址,前提是开发板得连接到路由器上的,如果开发板是和电
脑直连的,那么 dhcp 命令就会失效。直接输入 dhcp 命令即可通过路由器获取到 IP 地址,DHCP 不单单是获取 IP 地址,其还会通过 TFTP 来启动 linux 内核,输入“? dhcp”即可查看 dhcp 命令详细
的信息。
在这里插入图片描述

3.nfs命令

  1. nfs(Network File System)网络文件系统,通过 nfs 可以在计算机之间通过网络来分享资源,比如我们将 linux 镜像和设备树文件放到 Ubuntu 中,然后在 uboot 中使用 nfs 命令将 Ubuntu 中的 linux 镜像和设备树下载到开发板的 DRAM 中。这样做的目的是为了方便调试 linux 镜像和设备树,也就是网络调试.
  2. 网络调试是 Linux 开发中最常用的调试方法。原因是嵌入式 linux 开发不像单片机开发,可以直接通过 JLINK 或 STLink 等仿真器将代码直接烧写到单片机内部的flash 中,嵌入式 Linux 通常是烧写到 EMMC、NAND Flash、SPI Flash 等外置 flash 中,但是嵌入式 Linux 开发也没有 MDK,IAR 这样的 IDE,更没有烧写算法,因此不可能通过点击一个“download”按钮就将固件烧写到外部 flash 中。虽然半导体厂商一般都会提供一个烧写固件的软件,但是这个软件使用起来比较复杂,这个烧写软件一般用于量产的。其远没有 MDK、IAR的一键下载方便,在 Linux 内核调试阶段,如果用这个烧写软件的话将会非常浪费时间,而这个时候网络调试的优势就显现出来了,可以通过网络将编译好的 linux 镜像和设备树文件下载到 DRAM 中,然后就可以直接运行。
  3. 我们一般使用 uboot 中的 nfs 命令将 Ubuntu 中的文件下载到开发板的 DRAM 中,在使用之前需要开启 Ubuntu 主机的 NFS 服务,并且要新建一个 NFS 使用的目录,以后所有要通过NFS 访问的文件都需要放到这个 NFS 目录中.我的ubuntu主机中nfs目录设置为/home/tao/linux/nfs.
  4. uboot 中的 nfs 命令格式为:nfs [loadAddress] [[hostIPaddr:]bootfilename]
    loadAddress 是要保存的 DRAM 地址,[[hostIPaddr:]bootfilename]是要下载的文件地址。这里我们将正点原子官方编译出来的 Linux 镜像文件 uImage 下载到开发板 DRAM 的 0xC2000000,这个地址处(ST 官方指定的 Linux 内核加载地址)。
    在这里插入图片描述
  5. 准备好以后就可以使用 nfs 命令来将 uImage 下载到开发板 DRAM 的 0XC2000000 地址处,命令如下:
    nfs C2000000 192.168.72.129:/home/tao/linux/nfs/uImage

4.TFTP命令

  1. ubuntu需要安装tftp-hpa和tftpd-hpa:
    sudo apt-get install tftp-hpa tftpd-hpa
    sudo apt-get install xinetd

  2. 新建目录:
    mkdir /home/tao/linux/tftpboot
    chmod 777 /home/tao/linux/tftpboot
    3.新建目录/etc/xinetd.d,创建文件/etc/xinetd.d/tftp,内容如下:
    1 server tftp
    2 {
    3 socket_type = dgram
    4 protocol = udp
    5 wait = yes
    6 user = root
    7 server = /usr/sbin/in.tftpd
    8 server_args = -s /home/tao/linux/tftpboot
    9 disable = no
    10 per_source = 11
    11 cps = 100 2
    12 flags = IPv4
    13
    14 }

  3. 完了之后启动tftp服务: sudo service tftpd-hpa start

  4. 修改/etc/default/tftpd-hpa:
    在这里插入图片描述
    6. 重启服务器:sudo service tftpd-hpa restart,将uImgae文件复制到tftpboot目录中并赋予权限。
    7. tftp C2000000 uImage下载过程:
    在这里插入图片描述

5.EMMC和SD卡操作命令

  1. 常用命令:
mmc info 输出 MMC 设备信息
mmc read 读取 MMC 中的数据。
mmc wirte 向 MMC 设备写入数据。
mmc rescan 扫描 MMC 设备。
mmc part 列出 MMC 设备的分区。
mmc dev 切换 MMC 设备。
mmc list 列出当前有效的所有 MMC 设备。
mmc hwpartition 设置 MMC 设备的分区。
mmc bootbus…… 设置指定 MMC 设备的 BOOT_BUS_WIDTH 域的值。
mmc bootpart…… 设置指定 MMC 设备的 boot 和 RPMB 分区的大小。
mmc partconf…… 设置指定 MMC 设备的 PARTITION_CONFG 域的值。
mmc rst 复位 MMC 设备
mmc setdsr 设置 DSR 寄存器的值。
  1. mmc info
    在这里插入图片描述

  2. mmc dev 命令用于切换当前 MMC 设备,命令格式如下:
    mmc dev [dev] [part]
    [dev]用来设置要切换的 MMC 设备号,[part]是分区号,如果不写分区号的话默认为分区 0。
    使用如下命令切换到 SD 卡:
    mmc dev 0 //切换到 SD 卡,0 为 SD 卡,1 为 eMMC

  3. mmc read 命令
    mmc read 命令用于读取 mmc 设备的数据,命令格式如下:
    mmc read addr blk# cnt
    addr 是数据读取到 DRAM 中的地址,blk 是要读取的块起始地址(十六进制),一个块是 512字节,这里的块和扇区是一个意思,在 MMC 设备中我们通常说扇区,cnt 是要读取的块数量(十六进制)。比如从 EMMC 的第 1024(0x400)个块开始,读取 16(0x10)个块的数据到 DRAM 的0XC0000000 地址处,命令如下:
    mmc dev 1 //切换到 EMMC
    mmc read c0000000 400 10 //读取数据

6.EXT格式文件系统操作命令

  1. ext4ls
    ext4ls 命令用于查询 EXT4 格式设备的目录和文件信息,命令格式如下:
    ext4ls [<dev[:part]>] [directory]
    interface 是要查询的接口,比如 mmc,dev 是要查询的设备号,part 是要查询的分区,directory是要查询的目录。比如查询 EMMC 分区 2中的所有的目录和文件,输入命令:
    ext4ls mmc 1:2
    从下图可以看出,emmc 的分区 2 中存放了 10 个文件,其中比较重要的就是三个.dtb 设备、树文件和 Linux 内核的 uImage 镜像文件。
    在这里插入图片描述
  2. ext4load 命令
    extload 命令用于将指定的文件读取到 DRAM 中,命令格式如下:
    extload [<dev[:part]> [ [ [bytes [pos]]]]]
    interface 为接口,比如 mmc,dev 是设备号,part 是分区,addr 是保存在 DRAM 中的起始地址,filename 是要读取的文件名字。bytes 表示读取多少字节的数据,如果 bytes 为 0 或者省略的话表示读取整个文件。pos 是要读的文件相对于文件首地址的偏移,如果为 0 或者省略的话表示从文件首地址开始读取。我们将图 10.3.6.1 中 EMMC 分区 2 中的 uImage 文件读取到DRAM 中的 0XC2000000 地址处,命令如下:
    ext4load mmc 1:2 C2000000 uImage
    在这里插入图片描述
  3. ext4write
    ext4wirte 命令用于将 DRAM 中的数据写入到 MMC 设备中,命令格式如下:
    ext4write <dev[:part]> [sizebytes] [file offset]
    interface 为接口,比如 mmc;dev 是设备号;part 是分区;addr 是要写入的数据在 DRAM中的起始地址;absolute filename path 是写入的数据文件名字,注意是要带有绝对路径,以‘/’开始;sizebytes 表示要写入多少字节的数据;file offset 为文件偏移。我们可以通过 fatwrite 命令在 uboot 中更新 linux 镜像文件和设备树。我们以更新 linux 镜像文件 uImage 为例,首先将正点原子 STM32MP157 开发板提供的uImage 镜像文件拷贝到 Ubuntu 中的 tftpboot 目录下,使用命令 tftp 将 uImage 下载到 DRAM 的 0XC0000000 地址处,命令如下:
    tftp C0000000 uImage
    uImage 大小为 7313888(0X6F99E0)个字节,接下来使用命令 ext4write 将其写入到 EMMC的分区 2 中。为了和原有的 uImage 文件区分,我们将要写入的文件命名为 test_uImage,命令如下:
    ext4write mmc 1:2 c0000000 /test_uImage 0x6f99e0
    在这里插入图片描述
  4. 完成以后使用“ext4ls”命令查看一下 EMMC 分区 2 里面的文件。
    在这里插入图片描述

6.BOOT操作命令

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

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

相关文章

代码训练营Day.22 | 235. 二叉搜索树的最近公共祖先、701. 二叉搜索树中的插入操作、450. 删除二叉搜索树中的节点

235. 二叉搜索树的最近公共祖先 1. LeetCode链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 2. 题目描述 3. 解法 利用二叉搜索树的特性进行公共节点的判断&#xff1a; 1. 此节点为公共节点&#xff1a;p、q恰好在此节点的左右棵子树上。即…

[足式机器人]Part2 Dr. CAN学习笔记-自动控制原理Ch1-8Lag Compensator滞后补偿器

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-自动控制原理Ch1-8Lag Compensator滞后补偿器 从稳态误差入手&#xff08;steady state Error&#xff09; 误差 Error &#xff1a; E ( s ) R ( s ) − X ( s ) R ( s ) − E ( s ) ⋅ K G …

Open3D 最小二乘拟合平面——拉格朗日乘子法

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接Open3D 最小二乘拟合平面——拉格朗日乘子法。爬虫自重。 一、算法原理 设拟合出的平面方程为: a x + b y +

声明式管理方(yaml)文件

声明式管理方(yaml)文件: 1、适合对资源的修改操作 2、声明式管理依赖于yaml文件&#xff0c;所有的内容都在yaml文件当中。 3、编辑好的yaml文件需要依靠陈述是还是要依靠陈述式的命令发布到k8s集群当中 create只能创建&#xff0c;不能更新。从指定yaml文件中读取配置&#…

unity C# 中通俗易懂LINQ使用案例

文章目录 1. 从数组或列表中查询元素**&#xff1a;2. **排序与分组**&#xff1a;3. **连接多个数据源**&#xff1a;4. **聚合操作**&#xff1a;5. **分页查询**&#xff1a;6. **多条件查询**&#xff1a;7. **转换和投影&#xff08;Select&#xff09;**&#xff1a;8. *…

计算机网络期末复习——计算大题(一)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

SSM养老院综合服务系统----计算机毕业设计

项目介绍 该项目为后台管理项目&#xff0c;分为管理员与护工两种角色&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,个人资料密码管理,用户管理,床位类型管理,床位管理,护工管理,老人管理,咨询登记管理,预约登记管理,老人健康信息管理,费用管理等功能。 护…

1.C++语言的编译器及编译流程

1.C编译器 编译器就是将“高级语言”翻译为“机器语言&#xff08;低级语言&#xff09;”的程序。以下是一些主流的C编译器及其简要用法&#xff1a; GNU Compiler Collection (GCC):’ GCC原名GNU C Compiler&#xff0c;后来逐渐支持更多的语言编译&#xff08;C、Fortran、…

Flutter 四:main.dart简单介绍

main.dart简单介绍 运行结果

CNN——LeNet

1.LeNet概述 LeNet是Yann LeCun于1988年提出的用于手写体数字识别的网络结构&#xff0c;它是最早发布的卷积神经网络之一&#xff0c;可以说LeNet是深度CNN网络的基石。 当时&#xff0c;LeNet取得了与支持向量机&#xff08;support vector machines&#xff09;性能相…

看懂 Git Graph

目录 文章目录 目录Git Graph看懂 GraphVSCode Git Graph 插件1. 选择展示的 Branches2. Checkout 到一个 Branch3. 找到指定 Branch 最新的 Commit4. 找到 Branch 分叉口5. 查看 2 个 Commits 之前的区别 Git Graph Git Graph 是服务于 Git 分支管理的一种可视化工具&#xf…

大文件断点下载Range下载zip包显示文件损坏

问题&#xff1a;大文件下载&#xff0c;其它格式的文件及rar格式的压缩包正常下载但是 之后zip包下载后解压失败 原因分析: 1. 查看上传文件的属性值 如图&#xff0c;10.4kb是已经约去小数点的值&#xff0c;准确的大小应该是10663字节10.4130859375KB&#xff0c;所以用10.…

VS Code 远程连接云机器训练配置

VS Code 远程连接云机器 Visual Studio Code&#xff08;以下简称 VS Code&#xff09;是一个由微软开发的代码编辑器。VS Code 支持代码补全、代码片段、代码重构、Git 版本控制等功能。 安装 VSCode步骤简单且网上有很多教程&#xff0c;这里不过多重复了。 VS Code 现已支…

Nacos配置回滚

前言 很多时候&#xff0c;我们会配置错一些属性&#xff0c;或者需要回滚某些属性&#xff0c;这时候使用Nacos的回滚功能就很方便了 配置回滚 1、在控制台中&#xff0c;选择左侧导航栏的 “配置管理”&#xff0c;进入历史版本&#xff0c;选择Group和data id&#xff0c…

以源码为驱动:Java版工程项目管理系统平台助力工程企业迈向数字化管理的巅峰

随着企业规模的不断扩大和业务的快速发展&#xff0c;传统的工程项目管理方式已经无法满足现代企业的需求。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;企业需要借助先进的数字化技术进行转型。本文将介绍一款采用Spring CloudSpring BootMybat…

vr眼镜和AR眼镜的区别有哪些?哪些产品可以支持VR应用?

vr眼镜怎么连接手机 要将VR眼镜连接到手机上&#xff0c;您可以按照以下步骤进行&#xff1a; 1. 确保您的手机支持VR应用程序&#xff1a;首先&#xff0c;确保您的手机具备运行VR应用程序的硬件和软件条件。一些VR应用程序可能对设备有特定的要求&#xff0c;如处理器性能、操…

【Java并发】深入浅出 synchronized关键词原理-上

一个问题的思考 建设我们有两个线程&#xff0c;一个进行5000次的相加操作&#xff0c;另一个进行5000次的减操作。那么最终结果是多少 package com.jia.syn;import java.util.concurrent.TimeUnit;/*** author qxlx* date 2024/1/2 10:08 PM*/ public class SynTest {privat…

Sharding Sphere 教程 简介

一 文档简介 1.1 分库分表诞生的前景 随着系统用户运行时间还有用户数量越来越多&#xff0c;整个数据库某些表的体积急剧上升&#xff0c;导致CRUD的时候性能严重下降&#xff0c;还容易造成系统假死。 这时候系统都会做一些基本的优化&#xff0c;比如加索引…

高德地图经纬度坐标导出工具

https://tool.xuexiareas.com/map/amap 可以导出单个点&#xff0c;也可以导出多个&#xff0c;多个点可以连成线&#xff0c;可用于前端开发时自己模拟“线“数据

基于Springboot的服务端开发脚手架-自动生成工具

继之前的 专题系列课程&#xff1a; ​​从零开始搭建grpc分布式应用​​完整DEMO&#xff1a;​​基于Springboot的Rpc服务端开发脚手架(base-grpc-framework)​​ 后带来一款项目自动手成工具&#xff08;由于包路径等原因&#xff0c;完整demo想应用在实际开发中需要改很多代…