《嵌入式硬件(七):使用IMX6ULL所需环境以及编译方法》

一、windows下安装vscode

比虚拟机流畅

启动代码

1.初始化系统时钟

cs 复制代码
.global _start


_start:
	ldr pc, =_reset_handler
	ldr pc, =_undefine_handler
	ldr pc, =_svc_handler
	ldr pc, =_prefetch_abort_handler
	ldr pc, =_data_abort_handler
	ldr pc, =_reserved_handler
	ldr pc, =_irq_handler
	ldr pc, =_fiq_handler

_undefine_handler:
	ldr pc, =_undefine_handler

_svc_handler:
	ldr pc, =_svc_handler

_prefetch_abort_handler:
	ldr pc, =_prefetch_abort_handler

_data_abort_handler:
	ldr pc, =_data_abort_handler

_reserved_handler:
	ldr pc, =_reserved_handler

_irq_handler:
	ldr pc, =_irq_handler

_fiq_handler:
	ldr pc, =_fiq_handler

_reset_handler:
    mrs r0, cpsr
    bic r0, r0, #0x1F
    orr r0, r0, #0x12   //irq
    msr cpsr, r0

    ldr sp, =0x86000000	//起始地址80000000,ram大小为512mb(20000000)	80000000~A0000000-1

    mrs r0, cpsr
    bic r0, r0, #0x1F
    orr r0, r0, #0x1F   //system
    msr cpsr, r0   

    ldr sp, =0x84000000	//给irq分配的栈指针空间
	// 初始化系统时钟
	bl _enable_clocks




_enable_clocks://开门
	ldr r0, =0x020c4068
	mov r1, #0xFFFFFFFF
	str r1, [r0]

	ldr r0, =0x020c406C
	str r1, [r0]

	ldr r0, =0x020c4070
	str r1, [r0]

	ldr r0, =0x020c4074
	str r1, [r0]

	ldr r0, =0x020c4078
	str r1, [r0]

	ldr r0, =0x020c407C
	str r1, [r0]

	ldr r0, =0x020c4080
	str r1, [r0]

	bx lr




finished:
	b finished
手册

把这七个寄存器全部打开,值全部设置为默认值,初始化系统时钟

2.点灯

cs 复制代码
.global _start


_start:
	ldr pc, =_reset_handler
	ldr pc, =_undefine_handler
	ldr pc, =_svc_handler
	ldr pc, =_prefetch_abort_handler
	ldr pc, =_data_abort_handler
	ldr pc, =_reserved_handler
	ldr pc, =_irq_handler
	ldr pc, =_fiq_handler

_undefine_handler:
	ldr pc, =_undefine_handler

_svc_handler:
	ldr pc, =_svc_handler

_prefetch_abort_handler:
	ldr pc, =_prefetch_abort_handler

_data_abort_handler:
	ldr pc, =_data_abort_handler

_reserved_handler:
	ldr pc, =_reserved_handler

_irq_handler:
	ldr pc, =_irq_handler

_fiq_handler:
	ldr pc, =_fiq_handler

_reset_handler:
    mrs r0, cpsr
    bic r0, r0, #0x1F
    orr r0, r0, #0x12   //irq
    msr cpsr, r0

    ldr sp, =0x86000000	//起始地址80000000,ram大小为512mb(20000000)	80000000~A0000000-1

    mrs r0, cpsr
    bic r0, r0, #0x1F
    orr r0, r0, #0x1F   //system
    msr cpsr, r0   

    ldr sp, =0x84000000	//给irq分配的栈指针空间
	// 初始化系统时钟
	bl _enable_clocks

	// 初始化LED引脚
    bl _init_led
    
    // 点亮LED
    bl _led_on

	b finished

_led_on://点灯
	ldr r0, =0x209C000//DR
	mov r1, #0
	str r1, [r0]
	bx lr                    



_init_led://复用控制器,电气属性
	ldr r0, =0x20E02F4//电气属性p1793
	ldr r1, =0x10B0
	str r1, [r0]

	ldr r0, =0x20E0068//多路复用
	ldr r1, =0x05
	str r1, [r0]

	ldr r0, =0x209C004//GDRI
	mov r1, #0x00000001
	str r1, [r0]
	bx lr 

_enable_clocks://开门
	ldr r0, =0x020c4068
	mov r1, #0xFFFFFFFF
	str r1, [r0]

	ldr r0, =0x020c406C
	str r1, [r0]

	ldr r0, =0x020c4070
	str r1, [r0]

	ldr r0, =0x020c4074
	str r1, [r0]

	ldr r0, =0x020c4078
	str r1, [r0]

	ldr r0, =0x020c407C
	str r1, [r0]

	ldr r0, =0x020c4080
	str r1, [r0]

	bx lr




finished:
	b finished
手册
1)电气属性,设置为gpio1
2)多路复用
3)gdri

设置输入输出

4)dr

二、FileZilla安装

和虚拟机进行文件传输,在linux中要搭建服务器

搭建服务器

cs 复制代码
sudo /etc/init.d/networking restart    //重启网络
ifconfig     //查询网络
sudo apt-get install vsftpd    //安装服务器
sudo vi /etc/vsftpd.conf    //编辑文档,允许write
sudo /etc/init.d/vsftpd restart    //重启

三、编译环境配置

安装编辑器

cs 复制代码
sudo cp ~/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz ./    //移动到/usr/local/arm下

sudo tar xvf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz    //解压安装编译器

vi .bashrc    //修改文件

source .bashrc     //全局作用

arm-linux-gnueabihf-gcc -v    //检查交叉编译器版本,若输出类似gcc version 4.9.4的信息,则安装成功

sudo apt-get install lsb-core lib32stdc++6A   //安装运行交叉编译器所需的32位兼容库和基础工具,避免后续编译出现链接错误 

四、编译命令

cs 复制代码
 arm-linux-gnueabihf-gcc -g -c start.S -ostart.o    //编译汇编文件为对象文件
//arm-linux-gnueabihf-gcc:ARM 交叉编译器(带硬浮点支持)
-g:生成调试信息
-c:仅编译不链接
start.S:输入的汇编源代码文件
-o start.o:输出目标文件



arm-linux-gnueabihf-ld -Ttext 0X87800000 start.o -o start.elf    //链接对象文件生成可执行文件
//arm-linux-gnueabihf-ld:ARM 交叉链接器
-Ttext 0X87800000:指定代码段加载地址为 0x87800000
start.o:输入的目标文件
-o start.elf:输出 ELF 格式可执行文件


file start.elf    //输出 start.elf 的文件类型信息,验证是否为 ARM 架构的 ELF 文件



arm-linux-gnueabihf-objcopy -O binary -S -g start.elf start.bin    //生成原始二进制文件
//arm-linux-gnueabihf-objcopy:二进制转换工具
-S:移除所有符号和重定位信息
-g:保留调试段(与 -S 配合时可能无效)
start.elf:输入文件



arm-linux-gnueabihf-objdump -D start.elf > start.dis     //生成反汇编文件
//arm-linux-gnueabihf-objdump:反汇编工具
-D:反汇编所有段(包括数据段)
start.elf:输入文件
> start.dis:将反汇编结果重定向到文本文件

五、烧录

使用SD卡烧录bin文件的步骤

1.准备SD卡和工具

确保有一张格式化为FAT32文件系统的SD卡,容量适中。需要一个读卡器或设备内置的SD卡插槽。下载并安装适用于目标设备的烧录工具。

下载烧录工具,挪到文件代码文件夹里面

如果不是绿色,用下面的命令

cs 复制代码
chmod +x imxdownload
2.复制bin文件到SD卡

ls /dev/sd* 往/dev/sdb装,一定不能装到/dev/sda

3.使用烧录工具写入

./imxdownload start.bin /dev/sdb

4.安全弹出并插入目标设备
5.按照模式拨BOOT拨码开关

本次使用sd,把1和7拨上去

6.上电
相关推荐
2301_8059629324 分钟前
ESP32模组烧录失败排查解决方法
单片机·嵌入式硬件
时空自由民.2 小时前
RGB Image Sensor 和 RGB LCD Scren 的HSYNC和VSYNC的区别,以及ESP32 RGB LCD外设工作原理介绍
单片机
RFID舜识物联网2 小时前
耐高温RFID技术如何解决汽车涂装车间管理难题?
大数据·人工智能·嵌入式硬件·物联网·安全·信息与通信
笨笨饿2 小时前
#55_NE595脉冲电路
stm32·单片机·硬件工程
2301_805962932 小时前
ESP32之esptool.py 常用快捷命令
stm32·单片机·嵌入式硬件
NULL指向我2 小时前
TMS320F28379D笔记1:主控-从核双核架构认识
笔记·单片机
sweetone2 小时前
用一个电阻及一段胶带修复 VORWERK (福维克) THERMOMIX(美善品) TM5-1食品料理机 不工作故障
经验分享·单片机·嵌入式硬件
星宇笔记3 小时前
我做了一个本地网页版嵌入式调试工具:支持 Serial / TCP / UDP、实时曲线、HEX 发送
单片机·嵌入式硬件·网络协议·tcp/ip·udp·开源软件
时空自由民.3 小时前
显示屏关键参数
单片机
LS_learner3 小时前
DDRPHY、DDRPHYIO、DDR颗粒三者的关系以及带宽增大对三者功耗的影响
嵌入式硬件