STM32MP157/linux驱动学习记录

news2024/12/23 18:55:27

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.coloradmin.cn/o/1352585.html

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

相关文章

文件属性信息

文件的属性信息 Linux是一个基于文件的操作系统&#xff0c;因此作为文件本身也就有很多属性&#xff0c;如果想要查看某一个文件的属性有两种方式&#xff1a;命令和函数。虽然有两种方式但是它们对应的名字是相同的&#xff0c;叫做stat。另外使用file命令也可以查看文件的一…

从fuzz视角看CTF堆题--qwb2023_chatting

前言 这个题目是一个c的堆题&#xff0c;而我自己对于c的一些内存分配不太了解&#xff0c;同时也不太会c的逆向&#xff0c;硬看是没有办法了&#xff0c;所以就想能不能通过fuzz的角度去进行利用 fuzz 大概思路 函数选择 可以看到有add delete switch read listuser mes…

大创项目推荐 深度学习动物识别 - 卷积神经网络 机器视觉 图像识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

小红书如何高效引流?

近年来&#xff0c;公域流量价格不断上涨&#xff0c;私域流量的优势逐渐凸显。企业正花费大量资源和成本来获取新流量&#xff0c;但与其如此&#xff0c;不如将精力放在留存和复购上&#xff0c;从而实现业绩的新增长。其中关键在于如何有效地将公域流量转化为私域流量。 然而…

html5实现好看的个人博客模板源码

文章目录 1.设计来源1.1 主界面1.2 认识我界面1.3 我的文章界面1.4 我的模板界面1.5 文章内容界面 2.结构和源码2.1 目录结构2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/135368653 html5实现好看…

ExecutorCompletionService详解

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 微信公众号&#xff1a;Java随想录 文章目录 摘要ExecutorCompletionService适用场景ExecutorCompletionService使用ExecutorCompletionService原理解析注意事项总结 摘要 ExecutorCompletionService 是Jav…

LeetCode做题总结 15. 三数之和(未完)

不会做&#xff0c;参考了代码随想录和力扣官方题解&#xff0c;对此题进行整理。 代码思路 思想&#xff1a;利用双指针法&#xff0c;对数组从小到大排序。先固定一个数&#xff0c;找到其他两个。 &#xff08;1&#xff09;首先对数组从小到大排序。 &#xff08;2&…

【网络技术】【Kali Linux】Wireshark嗅探(四)域名系统(DNS)

一、实验目的 本次实验使用wireshark流量分析工具进行网络嗅探&#xff0c;旨在了解域名系统&#xff08;DNS&#xff09;的工作原理。 二、域名系统概述 简单来说&#xff0c;域名系统&#xff08;Domain Name System, DNS&#xff09;将域名&#xff08;可以理解为“网址”…

为什么要用扫码出入库?

一、什么是扫码出入库管理系统 传统的仓库管理模式存在很多问题&#xff0c;如&#xff1a;货物积压、过期、丢失等。这些问题不仅影响了企业的正常运营&#xff0c;还给企业带来了经济损失。为了解决这些问题&#xff0c;扫码出入库管理系统应运而生。该系统采用先进的二维码…

Apache的配置与应用

目录 1、Apache简介 2、Apache连接保持 3、Apache的访问控制 3.1、客户机地址限制 3.2、用户授权限制 &#xff08;1&#xff09;创建用户认证数据文件 &#xff08;2&#xff09;添加用户授权配置 &#xff08;3&#xff09;验证用户访问授权 4、Apache日志分割 4…

Vivado JESD204B与AD9162建立通信实战总结

一、FPGA与AD9162的JESD204B接口 FPGA作为JESD204B接口的发送端&#xff0c;AD9162作为JESD204B接口的接收端。FPGA和AD9162的device clk、SYSREF由同源时钟芯片产生。其中&#xff0c;FPGA和AD9162的divice clk时钟不同&#xff0c;并且FPGA的decive clk等同于JESD204B IP的co…

【UnityShader入门精要学习笔记】(3)章节答疑

本系列为作者学习UnityShader入门精要而作的笔记&#xff0c;内容将包括&#xff1a; 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更&#xff0c;有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 复习&#xff08;阶段性总结…

数据分析案例-外国电影票房数据可视化分析(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

k8s 1.23.5版本安装ingress1.6.4

1、背景 网上找了好几个ingress 文件&#xff0c;可能是版本没对&#xff0c;ingress都没有安装成功&#xff0c;最后查了相关资料&#xff0c;手动安装了。 下面是版本的匹配列表 github中ingress 地址&#xff1a;https://github.com/kubernetes/ingress-nginx 1.23.5版本支…

MySQL的安装网络配置

目录 一. MySQL5.7的安装 二. MySQL8.0的安装 三. 配置网络访问 思维导图 一. MySQL5.7的安装 1. 解压 2. 将my.ini文件放入到解压文件中 3. 编辑my.ini文件&#xff0c;将路径改为当前路径 4. 进到bin目录下&#xff0c;以管理员身份打开cmd命令窗口 5. 安装MySQL服务 my…

HarmonyOS调研分享

经过十多年的发展&#xff0c;传统移动互联网的增长红利已渐见顶。万物互联时代正在开启&#xff0c;应用的设备底座将从几十亿手机扩展到数百亿 IoT 设备。GSMA 预测到 2025 年&#xff0c;全球物联网终端连接数量将达 246 亿个&#xff0c;其中消费物联网终端连接数量将达 11…

chatGPT带你学习设计模式 (二)抽象工厂模式(创建型模式) GURU

深入理解抽象工厂模式 引言 在面向对象编程中&#xff0c;对象的创建是一个常见且关键的挑战。尤其在需要管理一系列相关对象的创建时&#xff0c;传统的对象创建方法&#xff08;如直接使用 new 关键字&#xff09;可能导致代码的高耦合和低灵活性。这时&#xff0c;抽象工厂…

5+共病+WGCNA+机器学习+免疫浸润,经典共病生信思路,轻松拿5+

今天给同学们分享一篇生信文章“Identification of biomarkers for the diagnosis of chronic kidney disease (CKD) with non-alcoholic fatty liver disease (NAFLD) by bioinformatics analysis and machine learning”&#xff0c;这篇文章发表在Front Endocrinol (Lausann…

Spring-Retry 重试框架使用

一、Spring-Retry Spring-Retry框架是Spring自带的功能&#xff0c;具备间隔重试、包含异常、排除异常、控制重试频率等特点&#xff0c;是项目开发中很实用的一种框架。 支持手动调用方式和注解方式。 使用需引入下面依赖&#xff1a; <dependency><groupId>o…

Vue:脚手架Vue-CLI的使用

一、环境准备 vue脚手架&#xff08;vue-CLI&#xff09;的使用是基于nodejs环境下的。 你可以简单理解为&#xff0c;Java项目需要再jvm虚拟机上才能编译运行 nodejs的作用就是将vue文件编译成html、css、js代码文件。 如何安装nodejs 参考&#xff1a;https://blog.csdn.net…