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.hqwc.cn/news/316963.html

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

相关文章

企业使用人工智能情况调查

企业使用人工智能情况调查 人工智能在商业中的应用并不是什么新鲜事。多年来&#xff0c;公司一直在使用人工智能技术来削减成本并提高效率。 但最近生成式人工智能市场的激增帮助人工智能成为主流商业技术。具体来说&#xff0c;ChatGPT 和 Midjourney 等大型语言模型 (LLM)…

2020年认证杯SPSSPRO杯数学建模C题(第一阶段)抗击疫情,我们能做什么全过程文档及程序

2020年认证杯SPSSPRO杯数学建模 C题 抗击疫情&#xff0c;我们能做什么 原题再现&#xff1a; 2020 年 3 月 12 日&#xff0c;世界卫生组织&#xff08;WHO&#xff09;宣布&#xff0c;席卷全球的冠状病毒引发的病毒性肺炎&#xff08;COVID-19&#xff09;是一种大流行病。…

团结引擎正式发布,已开放下载

2024年1月1日&#xff0c;Unity 正式发布了针对中国开发者的引擎--团结引擎创世版&#xff0c;现在已经可以开放下载&#xff0c;想体验的小伙伴们可以到官网下载了。 团结引擎是专为中国开发者定制的实时3D引擎&#xff0c;目前是基于Unity 2022LTS版本开发的。团结引擎内置了…

一篇关于大模型在信息抽取(实体识别、关系抽取、事件抽取)的研究进展综述

信息提取&#xff08;IE&#xff09;旨在从普通自然语言文本中提取结构化知识&#xff08;如实体、关系和事件&#xff09;。最近&#xff0c;生成式大型语言模型&#xff08;LLMs&#xff09;展现了在文本理解和生成方面的卓越能力&#xff0c;使得它们能够广泛应用于各种领域…

【竞技宝】LOL:S14新赛季改动 将trueskill2隐藏分算法

北京时间2024年1月3日,随着英雄联盟德玛西亚杯的进行,英雄联盟赛事已经进入新赛季的征途。每个赛季的春季赛之前,都会进行一次大的版本更新。据爆料,今年的S14版本大更新中,除了游戏内的英雄、道具、地图的更新之外,排位的隐藏分算法也将进行重大改变。 昨日,英雄联盟设计总监…

【Java进阶篇】字符串常量、字符串常量池详解

字符串常量、字符串常量池详解 ✔️字符串常量池是如何实现的?✔️字符串常量从哪来的? ✔️字符串常量是什么时候进入到字符串常量池的? ✔️字符串常量池是如何实现的? 字符串常量池 (String Constant Pool) 是Java中一块特殊的内存区域&#xff0c;用于存储字符串常量。…

KBDSL1.DLL文件丢失,软件或游戏无法启动,快速修复方法

在Windows操作系统中&#xff0c;KBDSL1.DLL是一个动态链接库文件&#xff0c;由Microsoft Corporation提供。通常包含多个函数和程序&#xff0c;可以被多个应用程序共享&#xff0c;以执行一些特定的任务或功能。 如果KBDSL1.DLL文件丢失或损坏&#xff0c;可能会在启动计算机…

代码随想录算法训练DAY18|二叉树5

算法训练DAY18|二叉树5 513.找树左下角的值 力扣题目链接 给定一个二叉树&#xff0c;在树的最后一行找到最左边的值。 示例 1: 示例 2: 思路 本题要找出树的最后一行的最左边的值。此时大家应该想起用层序遍历是非常简单的了&#xff0c;反而用递归的话会比较难一点。 我…

Windows—常用DOS命令

解释&#xff1a;DOS命令即面向磁盘的操作命令 进入DOS页面&#xff1a;快捷键“winR”&#xff0c;输入cmd help命令 help 【命令名】可查看其他命令的解释&#xff0c;直接输入help也可以查看部分命令 另外&#xff0c;如果输入help显示help不是内部或外部命令&#xff0c;…

微信小程序封装vant 下拉框select 多选组件

老规矩先上效果图&#xff1a; 本组件主要由小程序vant ui组件&#xff0c;vant 小程序ui网址&#xff1a;vant-weapp 主要代码如下: 先封装子组件&#xff1a; select-checkbox 放在 components 文件夹里面 select-checkbox.wxml: <view><van-field label"{…

vercel部署Gemini pro

一、注册一个vercel账号&#xff08;这个东西类似于第三方的github pages&#xff0c;能部署github中的项目&#xff09; 二、注册结束后&#xff0c;填写github的账号&#xff08;需要事先在该github账号中fork一个gemini的repository&#xff09; 三、babaohuang/GeminiPro…