imx6ull 1 之汇编点亮led

  • 第三个单词是MUX的是配置某个IO的复用功能,名字就是他默认的功能配置。
    第三个单词时PAD的是配置IO属性的

  • 将IO配置为GPIO的步骤
    而我却

  • 状态保持器:外部电路断电以后,此IO口还能保持以前的状态

  • 五、编译程序
    1、使用arm-linux-gnueabihf-gcc ,将.c or .s 变成 .o
    使用这个工具arm-linux-gnueabihf-gcc -g -c leds.s -o led.o
    -g产生调试信息
    -c是只编译源文件,不链接
    2、将所有的 .o文件 链接为 elf格式 的可执行文件,
    指定一个起始位置,程序都是先存到某一个位置,然后从你这个起始位置开始解析指令
    在已经加载了os的情况下,.elf可以被os转成bin,再执行,
    相比于bin文件就是多了其他的一些信息
    使用 gcc-linux-ld -Ttext 0x87800000 led.o -o led.elf
    -Ttext 就是指定链接首地址
    3、将elf文件转换为bin文件
    arm-linux-gnueadihf-objcopy -O binary -g -S led.elf led.bin
    -O选项表示以什么格式输出
    后面的binary表示输出格式是二进制
    -S选项表示不要复制源文件中的重定位信息和符号信息
    -g选项表示不要复制源文件中的调试信息
    4、将elf反汇编为汇编文件
    arm-linux-gnueabihf-objdump -D led.elf > led.dis
    -D 选项表示反汇编所有的段
    注意反汇编的源文件是 . elf格式的文件


链接就是将所有的.o文件链接到一起,并链接到指定的位置,本实验链接时要指定连接起始地址。
链接起始地址就是代码运行的起始地址有可能是保存代码的起始地址
对于6ull来说,链接起始地址由我们自己来指定,cortex A系列的芯片内部有rom,都没有flash,但rom不能用。所以应该指向ram地址。ram分为 内部ram 和 外部ram(ddr),6ull内部有128k的ram(0x900000 - 0x91ffff);也可以放到外部ddr中;对于imx-6ull alpha 开发板,ddr(512mb)的范围就是0x8000 0000 - 0x9fff ffff。我们选择存到ddr,内部ram128k容量小可能以后会不够用 。
裸机代码的起始地址设置为0x8780 0000,和后面的Uboot起始链接地址统一起来
要使用ddr,必须要初始化ddr。但在本章可见的代码中
对于imx-6ull,bin文件不能直接运行,需要添加一个头部,这个头部信息包含了ddr的初始化参数。imx系列soc内部 boot rom(一段代码,芯片厂商写的)会从sd卡,emmc等外置存储中读取头部信息,然后初始化ddr,并且将bin文件拷贝到指定的地方(链接起始地址
bin的运行地址一定要和链接起始地址一致,位置无关代码除外

  • 六、烧写bin文件
    stm32是烧写到内部flash的
    6ull没有内部flash
    6ull 支持 sd卡,emmc,nand,nor,spi flash 启动等等;意思就是就是把程序放到这些存储中,6ull就能跑起来
    emmc。nand等后四个都焊在板子上了,烧写太麻烦。操作sd卡相对简单
    裸机程序选择烧写到sd卡,再把sd卡插到开发板,把开发板选择从sd卡启动
    sd卡使用前一定要格式化,选择fat32格式

但速度烧写是在linux里面向sd卡烧写
烧写不是单纯地将bin文件拷贝到sd卡中,而是将bin文件放到sd卡指定的物理/绝对地址
对imx.6ull而言,不能直接烧写bin文件必须现在bin文件前添加头部,然后在烧写,完成这个工作,需要使用imxdownload软件
imxdownload使用方法:确定要烧写的sd卡文件,本次是/dev/sdb1
chmod 777 imxdownload
烧写 ./imxdownload led.bin /dev/sdb
烧写log如下图,注意速度

少些速度
此时工作区目录下会多一个文件,load.imx,最终烧进去的就是这个文件(imxdowanload工具添加了文件头部,在烧到sd卡)
imxdownload 会像 led.bin 添加一个头部,生成 load.max 文件,这个 load.max 文件最终烧写到sd卡里面
b
原来默认是从emmc启动的,led屏能看到界面,改成从sd卡启动后屏就糊了
1、reset;2、内部boot rom(一段code)运行,检测启动方式,从哪里启动emmc,sd…;3、检测到sd卡,从sd读代码,读取头部的配置信息,(用这些配置信息配置一些外设,如ddr;并根据头部提供的信息把bin文件考到指定的位置)

编写Makefile
马克
第一行是编译出.o文件 , -g 附带产生调试信息
第二行ld是将所有.o文件链接成可执行文件elf

jlink/jtag
1、6ull支持JTAG,但没有烧写算法,所以无法烧写
2、但是可以通过JTAG将bin文件下载到内部ram
3、奇葩的问题,6ull的JTAG口竟然和SAI复用,SAI连接了 WM8960 音频DAC,JTAG就会受到干扰,无法正常工作
4、嵌入式普通开发者基本不使用JLINK。不实用
5、点灯、串口来调试程序

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值