Linux开发追踪(IMX6ULL篇_第一部分)

article/2025/8/5 7:04:48

前言

参数:cortex-A7  698Mhz   flash  8GB    RAM  512M DDR3

2个100M网口  单核

初期:

一、安装完虚拟机之后,第一步先设置文件之间可以相互拷贝复制,以及通过CRT连接到虚拟机等

折磨死人了啊啊啊啊啊啊

1、关于SSH怎么安装指令都有,然后启动SSH服务就行,查看等

入坑点:1.window下一定要看有没有网络适配器VM8这样的,并且和主机,以及虚拟机三者在同一网络下,如果没有适配器,卸载重装,删除注册表

2.NAT无法连接,必须桥接模式,然后查看ip地址必须是同一网段内的

3.设置网络编辑器

4.一定虚拟机和window下相互ping通才行,然后CRT登录Ubuntu的ip地址,以及用户名就行了

二、第二个折磨死人的就是SAMBA,虚拟机映射到window了

参考:第四课:安装samba映射网络磁盘到本地_云服务器samba如何映射到本地-CSDN博客

其中静态路由,最后启用工作站那么起始都不需要,

配置文件可以这样写:无论是ubuntu的登录名还是文件名都是dzc   

创建添加的samba的用户名也是dzc密码1,这个就是最后有个网络凭证需要登录的用户名和密码

还有一点,一定要使用桥接的方式,两者之间也要ping通

防火墙要关掉,实在不行可以卸载重装

还有一种方式就是使用仅主机模式,适用于同一台电脑主机和虚拟机共享连接

第一步选择VM1的主机模式

然后配置虚拟网络编辑器

主机虚拟网卡配置

最后看主机和虚拟机之间能不能相互ping通,然后就可以登录SECURE CRT 和SMBA了。

三、取任一个ubuntu软件,第一步是交叉编译工具安装

第二步创建文件夹   拷贝过去之后,解压文件   tar -xvf 

sudo cp gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz /usr/local/arm/ -f

添加环境变量:

export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin

设置完之后重启生效,检查版本号

第二步是安装VSCODE :建议下载最新版

插件安装

找到设置,字体,中文,不要使能预览

下面的USB是串口,要用跳线帽修改

不建议使用引脚复用,会增加设备树,很麻烦。

中期:准备上手

汇编学习:

.text  代码段

.data 初始化的数据段

.bss 未初始化的数据段

.rodata  只读数据段

__start:  默认标号入口

汇编也可以写函数

常用的汇编指令:

MOV指令:把一个寄存器拷贝到另一个寄存器中,或者将一个立即数传递到寄存器中,后面传递到前面。

MVO RO,R1

MRS指令:用于将特殊寄存器如CPSR,传递到普通的寄存器中,MRS R0,CPSR

MSR指令:用于将普通寄存器传递到特殊寄存器中,MSR CPSR, R0

BX是返回指令

存储器访问指令:LDR 指令,从存储器加载数据到Rx中,LDR也可以把立即数加载到Rx中,LDR加载立即数的时候要用 = 不是 # 

常用的就是读取CPU的寄存器值  LDR R0, = 0X0209C004    LDR R1, [R0]

STR 指令,就是将数据写入存储器中,比如LDR R0, 0X0209C004  LDR R1, = 0X20000002

STR R1, [R0]  把R1的值写入到R0所保存的地址中

压栈和出栈指令:

PUSH {R0~R3, R12} @将 R0~R3 和 R12 压栈
PUSH {LR}
 

出栈顺序

POP {LR}
POP {R0~R3,R12}
 

跳转指令:

如B,BL,BX,BLX等

直接向PC寄存器写入数据

算数运算命令:

逻辑运算命令:

熟悉数据手册和寄存器

1、先看原理图找到对应使用的GPIO以及功能,然后手册中在IOMUXC_SW_MUX_XX中先找到当前引脚,比如GPIO1_IO3,这个是他的复用寄存器,然后找到地址20E_0068h,寄存器表可以看出只有低5位有效,复用为普通的gpio的话就配置成0101,也就是0x05,(如果想配置成其他IIC或者USB功能配成其他数字)。/

2、然后要使能时钟,找到时钟标题,CCM,找到CCGR0-CCGR6,一般都是要全部使能就行,找到这7个寄存器组的地址,然后分别使能为0xFFFFFFFF。

比如地址是20C_4068h   通过STR 写入0xFFFFFFFF,其他6个寄存器也一样

3、然后是电气寄存器,在手册中找IOMUXC_SW_PAD_XX,由低位到高位依次是:

SRE:压摆率    默认为低,当需要高速IO时候,置1

DSE:设置IO的驱动能力   0表示输出驱动关闭,为1看手册,分母越大驱动能力越强

SPEED:设置IO速度,00 50M  01 100M  11 200M

ODE:开路输出    0关闭开漏,  1打开开漏

PKE,上下拉保持      0  上拉保持    1关闭上下拉

PUE设置状态保持, 0 保持  1上啦

PUS设置上下拉电阻, 00 100K    11 22K

HYS:用不到,使能迟滞比较器

4、这几个寄存器都找到之后,记录地址,后面写汇编初始化要用,然后就是配置GPIO功能,

找到Purpose Input/Output (GPIO)  GPIO的寄存器组  看标题  找到GPIO data register

注意:GPIO只是IO众多复用的一个小配置,当你选择把IO配置成GPIO后还需要,另外配置GPIO的一些功能,DR、 GDIR、 PSR、 ICR1、 ICR2、 EDGE_SEL、 IMR 和 ISR这八种寄存器

其中,一共5组,这里用GPIO1  设置GPIO1_DR

数据寄存器DR  比如要设置 GPIO1_IO00 输出高电平,那么就应该设置 GPIO1.DR=1

如果是输入,那么就是读取电平状态

GDIR:设置IO的输入还是输出  输入0  输出1

PSR:功能和输入状态下的 DR 寄存器一样

ICR1和ICR2这两个寄存器,都是中断控制寄存器, ICR1用于配置低16个GPIO, ICR2 用于配置高 16 个 GPIO

IMR用来控制GPIO的中断禁止和使能,使能1,禁止0

ISR:中断状态寄存器,只要某个GPIO中断发生,ISR相应位就是1,处理完中断要清楚

EDGE_SEL 寄存器,这是边沿选择寄存器,会覆盖ICR1和ICR2,无论设置多少都是双边沿触发

这里控制LED,只需要设置DR和GDIR就行了。

LED实验:引脚是IO3 GPIO1

对于Linux也就是cortex-A系列的开发,基本都要先写汇编代码,初始化外设部分

部分需要汇编初始化DDR,然后把指针SP指向DDR。

 如何查看对应的引脚和寄存器配置,Linux的引脚和电气属性是单独两个寄存器

引脚看这几位就行

开发步骤:(如上)

先写汇编程序:示例如下

.global _start @LED IO  GPIO1—3
_start:@先初始化时钟ldr r0, = 0x020c4068 @ccgr0ldr r1, = 0xffffffffstr r1, [r0] @数据写入ldr r0, = 0x020c406C @CCM_CCGR1str r1, [r0]ldr r0, = 0x020c4070 @CCM_CCGR2str r1, [r0]ldr r0, = 0x020c4074 @CCM_CCGR3str r1, [r0]ldr r0, = 0x020c4078 @CCM_CCGR4str r1, [r0]ldr r0, = 0x020c407C @CCM_CCGR5str r1, [r0]ldr r0, = 0x020c4080 @CCM_CCGR6str r1, [r0]@配置复用寄存器属性ldr r0, = 0x020E0068 ldr r1, = 0x05str r1, [r0]@配置电气属性 
/*bit0 压摆率
bit5:3  110 R0/6 驱动能力
bit7:6  10 100M
bit11   0  关闭
bit12   1 时能 pull
bit13
bit15:14 00 100k 下拉
bit16*/ldr r0, = 0x020E02F4ldr r1, = 0x10b0str r1, [r0]@设置gpio功能
/*找到gpio的基地址
bit 0 就是 io0     bit1就是io1  bit2就是io2   bit3就是io3
gpio1_dr 209_C000
gpio1_gdir  209_C004
gpio1_psr  209_C008
*/ldr r0, = 0x0209C004 @设置GDIR为输出ldr r1, = 0x8str r1, [r0]/*打开LED*/ldr r0, = 0x0209C000 @设置dr为输出ldr r1, = 0x0str r1, [r0]loop:b loop

然后写驱动编译程序:

把.c.s文件变成.o文件,先把汇编 变成目标文件

arm-linux-gnueabihf-gcc -g -c led.s -o led.o

将所有的.o文件链接为elf格式的可执行文件,本实验链接的起始地址是 0x87800000     (就是代码运行的起始地址)可以指向内部的RAM也可以指向外部的DDR核心板中,

arm-linux-gnueabihf-ld -Ttext 0x87800000 led.o -o led.elf

将elf文件转为bin文件,在32中,是可以直接把flash中的代码拷贝到RAM中运行的,cortex-A的不能直接拷贝,需要把bin文件拷贝到SD卡中,然后放到设备的flash中运行。

arm-linux-gnueabihf-objcopy -O binary -g -S led.elf  led.bin

将elf文件转为汇编,反汇编,这样RAM就可以识别了,RAM只认那15个寄存器

程序烧录部分

32可以直接把代码烧录到内部flash中,cortex没有内部flash,需要借助SD卡,EMMC,NAND,NOR,SPI flash等方式启动,

1.需要把SD卡挂载到虚拟机中

2. 把F:\百度网盘下载\资料2\【正点原子】阿尔法Linux开发板(A盘)-基础资料\05、开发工具\02、Ubuntu下裸机烧写软件 路径下的  imxdownload文件拷贝到 编译文件夹中,给权限

然后执行命令格式  ls /dev/sd* -l  查看硬盘路径    插拔确认SD卡路径

如果发现U盘或SD卡始终连接不到虚拟机,可以试着修改.vmx文件的

执行操作后,会把bin文件生成为load.imx文件

拨码开关设置为SD卡启动,重启,点亮LED

编写makefile部分


http://www.hkcw.cn/article/DLPZiimPyf.shtml

相关文章

中国观鸟数据集(CSV)

数据简介 今天我们分享的数据是观鸟数据集,该数据整理中国观鸟记录中心的鸟类报告数据,在2024年获取了该网站种鸟类的报告信息,详情信息以及鸟种信息,分别整理为各省的数据,方便大家研究使用,方便大家研究使…

【AI论文】SWE-rebench:一个用于软件工程代理的任务收集和净化评估的自动化管道

摘要:基于LLM的代理在越来越多的软件工程(SWE)任务中显示出有前景的能力。 然而,推进这一领域面临着两个关键挑战。 首先,高质量的训练数据稀缺,尤其是反映现实世界软件工程场景的数据,在这些场…

【计算机系统结构】习题2

目录 1.有一条静态多功能流水线由5段组成,加法用1、2、4、5段,乘法用1、3、5段,第3段时间为,其余各段为,且流水线的输出可直接返回输入端或暂存器,若计算,试计算吞吐量、加速比、效率 2.有一动…

多模态大语言模型arxiv论文略读(103)

Are Bigger Encoders Always Better in Vision Large Models? ➡️ 论文标题:Are Bigger Encoders Always Better in Vision Large Models? ➡️ 论文作者:Bozhou Li, Hao Liang, Zimo Meng, Wentao Zhang ➡️ 研究机构: 北京大学 ➡️ 问题背景&…

[ElasticSearch] RestAPI

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

【irregular swap】An Examination of Fairness of AI Models for Deepfake Detection

文章目录 An Examination of Fairness of AI Models for Deepfake Detection背景points贡献深伪检测深伪检测审计评估检测器主要发现评估方法审计结果训练分布和方法偏差An Examination of Fairness of AI Models for Deepfake Detection 会议/期刊:IJCAI 2021 作者: 背景…

初学大模型部署以及案例应用(windows+wsl+dify+mysql+Ollama+Xinference)

大模型部署以及案例应用(windowswsldifymysqlOllamaXinference) 1.wsl 安装①安装wsl②测试以及更新③安装Ubuntu系统查看系统以及版本安装Ubuntu系统进入Ubuntu系统 2、docker安装①下载安装包②安装③docker配置 3、安装dify①下载dify②安装③生成.en…

【Linux系统编程】Ext系列文件系统

目录 磁盘文件系统的必要性 认识磁盘结构 理解硬件 磁盘的物理结构 磁盘的存储结构 磁盘的逻辑结构 引入磁盘文件系统 引入"块"概念 引入"分区"概念 引入"分组"概念 ext*系列文件系统 inode、inode Bitmap、inode Table Block Bitm…

基于ZYNQ ARM+FPGA异构平台的声呐数据采集系统设计

0 引 言 近年来,随着海洋工程技术的发展,水下无人 航行器 (underwater unmanned vehicle, UUV)) 因其 灵活性、低风险性以及多功能性的优点,在维护国 家海洋权益以及海洋安全发挥着日益重要的作用 [1-3] 。 UUV 在完成目标搜索、…

前端基础学习html+css+js

HTML 区块 div标签,块级标签 span包装小部分文本,行内元素 表单 CSS css选择器 css属性 特性blockinlineinline-block是否换行✅ 换行❌ 不换行❌ 不换行可设置宽高✅ 支持❌ 不支持✅ 支持常见元素div容器 p段落 h标题span文本容器 a超链接img图片…

Client-Side Path Traversal 漏洞学习笔记

近年来,随着Web前端技术的飞速发展,越来越多的数据请求和处理逻辑被转移到客户端(浏览器)执行。这大大提升了用户体验,但也带来了新的安全威胁。其中,Client-Side Path Traversal(客户端路径穿越,CSPT)作为一种新兴的漏洞类型,逐渐受到安全研究者和攻击者的关注。本文…

关于神经网络中的梯度和神经网络的反向传播以及梯度与损失的关系

这篇博客用通俗的话介绍一下什么是梯度以及神经网络中的反向传播。 什么是梯度 可以把神经网络想象成一个 “猜答案的机器”。比如你让它猜一张图片是不是猫,它会先 “猜” 一个概率(比如猜是猫的概率是 30%),然后你告诉它 “猜…

保持本地Git仓库与远程仓库同步-业务场景示例

业务场景:团队协作开发电商网站 背景: 5人团队使用GitHub协作开发Node.js电商项目。每位开发者负责独立功能模块(如支付、商品展示、购物车)。核心痛点:频繁出现本地代码与远程仓库冲突,导致测试环境部署失…

【中国企业数字化转型之路】企业的资源投入与数字化转型的产出效益平衡探索(上篇)

在数字化转型的浪潮中,企业面临着前所未有的挑战与机遇。这一转型过程不仅需要大量的技术、人才、管理和时间投入,更需要在投入与产出之间找到精准的平衡点,以确保转型的效益最大化。技术投入方面,企业需斥巨资引进云计算、大数据…

AR/MR实时光照阴影开发教程

一、效果演示 1、PICO4 Ultra MR 发光的球 2、AR实时光照 二、实现原理 PICO4 Ultra MR开发时,通过空间网格能力扫描周围环境,然后将扫描到的环境网格材质替换为一个透明材质并停止扫描;基于Google ARCore XR Plugin和ARFoundation进行安卓手…

图文详解Java集合面试题

文章目录 1、集合框架2、ArrayList、LinkedList3、HashMap、红黑树4、HashMap的put流程 1、集合框架 两条大支线: ①Collection接口:最基本的集合框架,提供添加、删除、清空等基本操作,主要有三个子接口:i&#xff1a…

深度学习|pytorch基本运算-乘除法和幂运算

【1】引言 前序学习进程中,已经对pytorch张量数据的生成和广播做了详细探究,文章链接为: 深度学习|pytorch基本运算-CSDN博客 深度学习|pytorch基本运算-广播失效-CSDN博客 上述探索的内容还止步于张量的加减法,在此基础上&am…

Python Day39 学习(复习日志Day4)

复习Day4日志内容 浙大疏锦行 补充: 关于“类”和“类的实例”的通俗易懂的例子 补充:如何判断是用“众数”还是“中位数”填补空缺值? 今日复习了日志Day4的内容,感觉还是得在纸上写一写印象更深刻,接下来几日都采取“纸质化复…

深度解析微服务网关:APISIX、Higress 与 Spring Cloud Gateway 技术对比与实战指南

一、引言 在微服务架构的演进中,API 网关作为流量入口的核心枢纽,其技术选型直接影响系统的性能、可扩展性和安全性。本文将从技术架构、核心功能、性能工程、生态体系等维度,对当前主流的三款网关 ——Apache APISIX(以下简称 APISIX)、Higress、Spring Cloud Gateway(…

rsync服务的搭建

目录 一、rsync介绍 rsync的安装 二、rsync的语法 三、rsync命令使用 1. 本机同步 2. 远程同步 四、rsync作为服务使用 1、尝试启动rsync程序 2、rsync的配置文件介绍 注意事项: 3. rsyncinotify实时同步 3.依赖服务托管xinetd(CentOS 6中rs…