一、windows下安装vscode
比虚拟机流畅
启动代码
1.初始化系统时钟
.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.点灯
.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中要搭建服务器
搭建服务器
sudo /etc/init.d/networking restart //重启网络
ifconfig //查询网络
sudo apt-get install vsftpd //安装服务器
sudo vi /etc/vsftpd.conf //编辑文档,允许write
sudo /etc/init.d/vsftpd restart //重启
三、编译环境配置
安装编辑器
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位兼容库和基础工具,避免后续编译出现链接错误
四、编译命令
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卡插槽。下载并安装适用于目标设备的烧录工具。
下载烧录工具,挪到文件代码文件夹里面
如果不是绿色,用下面的命令
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拨上去