重庆生活网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 生活 重庆
查看: 909|回复: 0
打印 上一主题 下一主题

Linux平台下UT4412BV03裸機开发指南(二)

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-25 20:02:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    第二步:往寄存器GPX0DAT/GPX2DAT相应的位写0,使GPX0_第二步:执行arm-linux-ld-Tled.lds-oled.elf第四步:执行arm-linux-objdump-Dled.elf>led第五步:执行./my_mkbl2$@bl2.bin14336命令,my_第六步:执行sudo./sd_fusing.sh/dev/sdbbl2.4412的启动过程,我们在下一章再说.my_mktools.c大家可以看



Linux平台下UT4412BV03裸机开发指南(二)


第一章 匯编點亮LED第一節 查看原理图
UT4412BV03開发板上提供了4个可编程用户LED,原理图如下:


在原理图中搜索引腳“EINT5”,可得:


可见,LED的D3、D4、D6、D7分别使用cpu端口資源為GPX0_5、GPX0_7、GPX2_4、GPX2_5.
第二节 程序相关講解
完整代碼见目录1.leds_s。
[size=12.0000pt]1. start.S
由原理图可知,点亮UT4412BV03的4个LED需如下2个步驟:
第一步:设置寄存器GPX0CON和GPX2CON,使GPX0_5、GPX0_7、GPX2_4、GPX2_5四个引脚為输出功能;
第二步:往寄存器GPX0DAT/GPX2DAT相应的位写0,使GPX0_5、GPX0_7、GPX2_4、GPX2_5四个引脚输出低電平,4个LED會亮;相反,往寄存器GPJ2DAT写1,使GPX0_5、GPX0_7、GPX2_4、GPX2_5四个引脚输出高電平,4个LED会灭;


以上两个步骤即为start.S中的核心內容,start.S里面涉及的汇编指令请自行学习GNU汇编指令集,这里不再進行贅述。
[size=11.5000pt]2. Makefile
led.bin: start.o

arm-linux-ld -Tled.lds -o led.elf $^

arm-linux-objcopy -O binary led.elf led.bin

arm-linux-objdump -D led.elf > led_elf.dis


gcc -o my_mkbl2 my_mktools.c

./my_mkbl2 $@ bl2.bin 14336

sudo ./sd_fusing.sh /dev/sdb bl2.bin


%.o : %.S

arm-linux-gcc -o $@ $< -c


%.o : %.c

arm-linux-gcc -o $@ $< -c


clean:

rm *.o *.elf *.bin *.dis my_mkbl2 –f
在Makefile所在的目录下执行make命令,系统會进行如下操作:
第一步 :执行arm-linux-gcc -o $@ $< -c命令將當前目录下存在的汇編文件和C文件編译生成.o文件;
第二步:执行arm-linux-ld -Tled.lds -o led.elf $^将所有.o文件链接成elf文件,-Tled.lds表示程序的鏈接地址,由于目前我们编写的代码是位置無關码,所以程序能在任何一个地址上運行;
第三步:執行arm-linux-objcopy -O binary led.elf led.bin將elf文件抽取為可在开发板上运行的bin文件;
第四步:執行arm-linux-objdump -D led.elf > led_elf.dis将elf文件反汇編后保存在dis文件中,調試程序时可能会用到;
第五步:執行./my_mkbl2 $@ bl2.bin 14336命令,my_mkbl2處理led.bin文件,my_mkbl2由my_mktools.c编譯而来,具体解释请看my_mktools.c相关讲解;
第六步 :执行sudo ./sd_fusing.sh /dev/sdb bl2.bin將bl2.bin烧写进SD卡。(sd_fusing.sh脚本程序来自韦东山老师)
3. my_mktools.c
4412的启動過程,我们在下一章再說.my_mktools.c大家可以看看源码,韦东山老师已经做好了注释.現在只要知道my_mkbl2的作用是截取用戶提供的bin文件前(14K-4)字節数據,算出4字节的校驗码,然后这两部分数据组合成14KB的文件bl2.bin,它就是BL2.
4.led.lds
SECTIONS
{

. = 0x02023400;

.text : {


start.o


* (.text)

}



.rodata : {


* (.rodata)

}



.data : {


* (.data)

}



.bss : {


* (.bss)

}

}
0x02023400就是程序要加載的地址,.text是代码段,.rodata是只读数據段,.data是數據段,.bss
是bss段。
第三节 编譯代碼和烧写运行
将sd卡插入PC,在Ubuntu终端执行如下命令:
#cd 1.leds_s
#make

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|联系我们|重庆生活网

GMT+8, 2024-5-7 06:22 , Processed in 0.375000 second(s), 17 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表