1.前言Tiny4412开发是友好arm推出的一款Android和Linux学习开发板。CPU采用三星EXYNOS4412,32位芯片,属于Cortex-A系列。其主频为1.5GHZ,可运行ubuntu、Android5.0、纯Linux等操作系统。
本文介绍了利用该开发板完成裸机开发,不涉及操作系统。可以直接作为单个芯片完成LED灯和蜂鸣器的编程,从而了解该芯片与常规Cortex-M系列芯片编程的区别。
核心如图所示:
以下是开发板的实物图:
开发板的配置:
2.在搭建裸机编程的交叉编译环境之前,需要搭建一个交叉编译环境,安装arm-linux-gcc交叉编译器,这样交叉编译的程序就可以在开发板上运行了。
什么是交叉编译?这种在PC上编译,在嵌入式开发板上运行的模式叫做交叉编译。
开发板的光盘上提供了交叉编译器。直接拷贝到PC Linux上进行解压,配置环境变量接口。
具体操作步骤如下:
1.在Linux用户目录下创建一个目录:mkdir work/arm-linux-gcc -p 2。将交叉编译器复制到Linux系统共享目录下。将其解压缩到arm-linux-gcc目录。tarx VF arm-Linux-gcc-4 . 5 . 1-V6-VFP-2012 03 01 . tgz-c/home/wbyq/work/arm-Linux-gcc/3。添加系统环境变量(1)。root用户:需要在/etc/profile文件中编写代码(2添加环境变量的命令:export path=/home/wbyq/work/arm-Linux-gcc/opt/friendly arm/tools chain/4 . 5 . 1/Bin:$ PATH参数:export export-全局声明PATH系统环境变量的名称。作用:保存Linux系统可执行文件的搜索路径。输出环境变量的值:[wbyq @ wbyq ~]$ echo $ PATH/home/wbyq/work/arm-Linux-gcc/opt/friendly arm/tools chain/4 . 5 . 1/bin:/usr/lib/Qt-3.3/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wbyq/bin export LD _ LIBRARY _ PATH=/mnt/bin作用:保存Linux系统动态库的搜索路径。xxx.so4 .有效环境变量(1)。立即生效:当前终端有效[wbyq@wbyq ~] $ source。bash_profile (2)。注销用户,重新登录系统,实施永久效果5。测试交叉编译器。学习基本用法[wbyq @ wbyqlinux _ 2021]$ arm-Linux-GC CAPP . c[wbyq @ wbyqlinux _ 2021]$ LSA . out app . c[wbyq @ wbyqlinux _ 2021]$。/a.out. a.out:无法执行二进制文件[wbyq @ wbyq Linux _ 2021]$ gcc app . c-o app 1[wbyq @ wbyq Linux _ 2021]$ ARM-Linux-gcc app . c-o app 2[wbyq @ wbyq Linux _ 2021]$ LSA . out app 1 app 2 app . c[wbyq @ wbyq Linux _ 2021]$ file app 1 app 1:ELF 32位点亮LED灯如果你学过单片机编程(51,STM32、MSP430,AVR等。),应该很容易完成当前章节的内容。
要完成对LED灯的控制,需要完成以下步骤:
1.检查原理图2。配置GPIO端口3。控制GPIO口的输出电平,控制LED 4。编译程序:xxx.lds链接文件设备:字符设备、块设备、网络设备SD卡设备:/dev/sdb检查块大小:cat /sys/block/sdb/size。单位是块(一个块是512字节)。5.写入开发板测试DD iflag=DSYNC of lag=DSYNC if=。/e 4412 _ n . bl1 . bin of=/dev/sdbseek=1参数:if=。/e4412 _ n.bl1.bin要写入SD卡的文件=/dev/SDSD卡设备seek=1跳过块。一个块==512字节。执行burn命令:[wbyq @ wbyqsd _ fuse] $ sudo。/标清write.sh/dev/sdb./main.bin复制代码(1)查看原理图,找到LED的接线位置。
Tiny4412开发板设计为两层,核心板和底板。LED灯是焊在芯板上的,所以原理图要开芯板。
(2)查看芯片手册,了解GPIO口如何配置
配置方法也很好理解,在手册里做了详细介绍1000发光二极管属于输出控制器件,需要将GPIO口配置成输出模式。
GPIO的模式配置由精读寄存器完成,输出控制由数据;数字录音带寄存器完成。
(3)编写代码
#定义gpm 4 con(*(volatile unsigned int *)0x 110002 E0)#定义gpm 4 dat(*(volatile unsigned int *)0x 110002 E4)int main(void){gpm 4 con=0x ffff 0000;GPM4CON |=0x00001111 gpx 3 con=0x ff 0000 ff;gpm 4 dat=~(10);gpm 4 dat=~(11);gpm 4 dat=~(12);gpm 4 dat=~(13);while(1) { }返回0;}复制代码(4)生成文件编写
cc=arm-Linux-gcc main _ sp。斌:开始。主啊。o arm-Linux-LD-tmain。LDS-o main _ sp。精灵$^ arm-Linux-obj copy-o二进制main _ sp。精灵主线。bin arm-Linux-objdump-d main _ sp。elf main _ sp _ elf。dis % .o : % .S $(抄送)-o $@ $ -c% .o : % .c $(CC) -o $@ $ -c clean: rm * .o * .精灵*。bin * .dis -f复制代码(5)代码烧写脚本
##版权所有2011年三星电子有限公司# http://www.samsung.com/##本程序为自由软件;你可以在自由软件基金会发布的角马通用公共许可证版本2的条款下重新发布和/或修改# it .# modify by zth # # # # # # # # # # # # # # # # # # # # if[-z $ 2]#检查传入的第三个参数长度是否为0然后回声传参数顺序:/脚本嘘如果[ -b $1 ] #,则退出0fi检查第二个参数是否是块设备然后回声1sd卡设备正常!'else echo 1标清美元卡设备错误!'出口0 #退出脚本fi if [ -e $2 ] #检查第三个参数(就是要烧录的文件是否存在)然后回显'2美元文件存在。'else echo 2美元文件不存在。'出口0 #退出脚本菲BDEV_NAME=`basename $1` #变量赋值-块设备名称BDEV _ SIZE=` cat/sys/block/$ { BDEV _ NAME }/SIZE ` if[$ { BDEV _ SIZE }-le 0];然后回显"错误:读卡器中没有找到介质。"如果[ ${BDEV大小} -gt 32000000 ],则在1fi出口下高速;然后回显"错误:块设备大小($ { BDEV _大小})太大"出口1fi E4412_UBOOT=$2 #将要烧录文件赋值给变量E4412_UBOOTMKBL2=./mkbl2 #需要当前路径下有一个mkbl2文件如果[!-f $ { e 4412 _ UBOOT }];然后#检测文件是否是普通文件,非目录和设备文件回声2美元文件非普通文件!请检查文件是否正确!'出口-1 #退出脚本文件fi if [!-f $ { mkbl 2 }];然后#检测文件是否是普通文件,非目录和设备文件回声当前目录下缺少mkbl2文件!'出口-1 #退出脚本文件fi $ { mkbl 2 } $ { e 4412 _ UBOOT } bl2。14K箱14336号通过mkbl2文件烧录程序地址是14336#./mkbl 2 main。bin bl2。bin 14336 # # # # # # # # # # # # # #融合图像signed _ BL1 _ position=1bl 2 _ position=17u boot _ position=49 tzsw _ position=705 # echo -'回声BL1融合'#烧录命令100/xx。sh/dev/sdb main。bindd iflag=dsync of lag=dsync if=./e 4412 _ n . bl1。bin of=$ 1 seek=$ signed _ bl1 _ position # echo -'回声BL2定影#烧录命令dd iflag=dsync oflag=dsync if=./bl2。=$ 1查找的bin=$ bl2 _位置同步#输出信息'回声'-'回声'程序烧录成功!'回声请拔出南达科他州卡,放入开发板运行!'卡设备审核汤梓红
标签:linux文件-