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操作命令

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【EI会议征稿通知】第三届艺术设计与数字化技术国际学术会议( ADDT 2024)

第三届艺术设计与数字化技术国际学术会议( ADDT 2024&#xff09; 2024 3rd International Conference on Art Design and Digital Technology 所谓艺术设计&#xff0c;就是将艺术的审美感应用到与日常生活密切相关的设计中&#xff0c;使其不仅具有审美功能&#xff0c;而且…

如何使用VsCode编译C语言?

下载VsCode (1) 解压到D盘跟目录 (2) 运行[vscode.reg]&#xff0c;注册右键菜单 (3) 进入[pack]文件夹&#xff0c;运行[install.bat]。安装基本插件。 下载mingw32 (1) 解压任意目录 (2) 我的电脑右键–高级系统设置–高级–环境变量–系统变量–Path(双击)–空白行(双击)–…

2024年1月4日 十二生肖 今日运势

小运播报&#xff1a;2024年1月4日&#xff0c;星期四&#xff0c;农历十一月廿三 &#xff08;癸卯年甲子月丁卯日&#xff09;&#xff0c;法定工作日。 红榜生肖&#xff1a;狗、猪、羊 需要注意&#xff1a;龙、鼠、鸡 喜神方位&#xff1a;正南方 财神方位&#xff1a…

sodiscar!20+学习网站,工作学习两不误!

划到最后“阅读原文”——领取工具包&#xff08;超过1000工具&#xff0c;免费素材网站分享和行业报告&#xff09; Hi&#xff0c;我是胡猛夫~&#xff0c;专注于分享各类价值网站、高效工具&#xff01; 更多内容&#xff0c;更多资源&#xff0c;欢迎交流&#xff01;公 号…

阿赵UE学习笔记——7、导入资源

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的使用。这次将会把一个带动作和贴图的钢铁侠模型&#xff0c;导入的UE的项目中。 1、准备的资源 这里有2个fbx文件&#xff0c;都是带着网格和动画的&#xff0c;模型网格和骨骼是一样的&#xff0c;只…

服务器中了DevicData勒索病毒怎么处理

DevicData勒索病毒是最近一段时间非常流行的勒索病毒类型&#xff0c;有很多企业都不幸中招&#xff0c;给生产和经营带来了很大的影响。所以云天数据恢复中心决定就这种类型的勒索病毒&#xff0c;来和各位讲讲当服务器中了DevicData勒索病毒怎么处理。 特征 1&#xff0c;文件…

修复移动硬盘显示盘符但打不开问题

问题&#xff1a; 移动硬盘显示盘符&#xff0c;但无法打开。点击属性不显示磁盘使用信息。 分析解决&#xff1a; 这是由于硬盘存在损坏导致的&#xff0c;可以通过系统自带的磁盘检查修复解决&#xff0c;而无需额外工具。 假设损坏的盘符是E&#xff0c;在命令行运行以下命令…

论文润色会泄露吗 智能写作

大家好&#xff0c;今天来聊聊论文润色会泄露吗 智能写作&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 标题&#xff1a;论文润色会泄露吗――保护学术隐私与安全的探讨…

数字化消费新趋势:跨境电商如何满足未来消费者需求?

在数字化浪潮的推动下&#xff0c;全球消费者的行为和期望正在发生根本性的变化。跨境电商作为连接全球的桥梁&#xff0c;不仅促进了商品的自由流通&#xff0c;更需迎接未来数字化消费的新趋势。本文将深入探讨未来数字化消费的趋势&#xff0c;以及跨境电商如何有效满足这些…

C#编程-使用构造函数和析构函数

使用构造函数和析构函数 如果想要在以创建对象时就初始化成员变量,可以创建名为构造函数的特殊函数。您可能还需要使用对象后从内存中删除这些对象。这可通过称为析构函数的函数实现。 实现构造函数 构造函数是在创建对象时自动调用的特殊方法。无须显式地调用构造函数。请…

麒麟云增加计算节点

一、安装基座系统并配置好各项设置 追加的计算节点服务器&#xff0c;安装好系统&#xff0c;把主机名、网络网线&#xff08;网线要和其他网线插的位置一样&#xff09;、hosts这些配置好&#xff0c;在所有节点的/etc/hosts里面添加信息 在控制节点添加/kylincloud/multinod…

前端工程化回顾-vite 构建神器

1.构建vite 项目 pnpm create vite2.常用的配置&#xff1a; 1.公共资源路径配置&#xff1a; base: ./, 默认是/2.路径别名配置&#xff1a; resolve: {alias: {: path.resolve(__dirname, ./src),ass: path.resolve(__dirname, ./src/assets),comp: path.resolve(__dirnam…

单机游戏数据自动保存方案

引言 单机游戏数据的自动保存方案 大家好&#xff0c;2023年还有最后的3天&#xff01; 有小伙伴私信我&#xff0c;说: 总感觉一股脑的全盘定时保存不科学&#xff0c;也写过保存变化的玩家数据&#xff0c;但是改完数据就得手动标记一下字段变化&#xff0c;感觉不够智能&…

Amos各版本安装指南

Amos下载链接 https://pan.baidu.com/s/1uyblN8Q-knNKkqQVlNnXTw?pwd0531 1.鼠标右击【Amos28】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;选择【解压到 Amos28】。 2.打开解压后的文件夹&#xff0c;鼠标右击【Amos28】选择【以管理员身份运行…

BUUCTF--ciscn_2019_s_91

先看保护&#xff1a; 发现保护全没开&#xff0c;紧接着看看程序执行流程&#xff1a; 经过测试发现了段错误&#xff0c;这肯定就是栈溢出了。因此我们在IDA中看看具体逻辑&#xff1a; 程序主要就这个功能&#xff0c;我们还在程序中发现一个函数&#xff1a; 一段汇编&…

DataLoader与Dataset

一、人民币二分类 二、DataLoader 与 Dataset DataLoader torch.utils.data.DataLoader 功能&#xff1a;构建可迭代的数据装载器 &#xff08;只标注了较为重要的&#xff09; • dataset: Dataset类&#xff0c;决定数据从哪读取及如何读取 • batchsize : 批大小 • num_…

广告公司项目管理工具推荐:高效管理订单与项目的利器

由于广告公司每年都需要处理数千个制作订单&#xff0c;包括促销广告预告片和海报等&#xff0c;迫切需要一款能够高效管理和生产广告流程的软件。 在实施采购项目管理工具之前&#xff0c;广告公司的流程相当繁复&#xff0c;员工们需要使用约10到15个不同的Excel表格&#xf…

vue-element-admin请求接口时报错:431 Request Header Fields Too Large

vue-element-admin请求接口时报错&#xff1a;431 Request Header Fields Too Large 1、使用vue-element-admin框架开发运行后报错431&#xff0c;在网上也找了一些解决方案&#xff0c;有说是生成的Token太大导致的报错&#xff0c;也说有可能是NGINX后台设置的提交大小限制。…

QT的信号与槽

QT的信号与槽 文章目录 QT的信号与槽前言一、QT 打印"hello QT"的dome二、信号和槽机制&#xff1f;二、信号与槽的用法1、QT5的方式1. 无参的信号与槽的dome2.带参的信号与槽dome 2、QT4的方式3、C11的语法 Lambda表达式1、函数对象参数2、操作符重载函数参数3、可修…

为什么JAVA_HOME修改后Java版本不变

今天的实验需要对java project进行降版本后重构。于是去Oracle官网下载了jdk1.7。然后将系统环境变量JAVA_HOME改成了安装后的jdk1.7路径。即 C:\Program Files\Java\jdk1.7.0_80 系统变量Path中直接引用了%JAVA_HOME%\bin。 但是当我查看版本&#xff0c;却出现了javac改了…