时间飞快,转眼间就大二快结束了。最近我一直在思考自己毕业后想走的方向。根据我的自身情况,我决定走ARM+Linux路线,向嵌入式驱动方向走。因此,好不容易才向老师借来个开发板Smart210 。为此,我要努力学习,尽量每周更新一篇学习笔记。好了!废话不多说,我们来先来了解一下Smart210 开发板。
先来看看Smart210 的核心板S5PV210
Smart210是高性能的Cortex-A8核心板,采用三星S5PV210作为主处理器,运行主频 1GHz,S5PV210内部集成了PowerVR SGX540高性能图形引擎,支持3D图形流畅运1080P大尺寸高清视频,流畅运行 Android, Linux和WinCE6等高级操作系统,非常适合开发高端物联网终端,广告多媒体终端,智能家居,高端监控系统,游戏机控制板等设备。
由于之前有研究过stm32,所以先打算从裸机程序入手。玩单片机的都知道,第一课就是点亮LED灯。下面,开始进入cortex A8 的第一课。
一、开发环境
(1).学习基础 学过简单的C语言,有用过linux操作系统(我往后发的学习笔记都基于Linux操作系统)
(2).学习平台 Linux操作系统(可以是linux虚拟机)。
(3).交叉编译器 arm-linux-gcc-4.5.1
下面简单介绍一下arm-linux-gcc-4.5.1的安装方法:
1.先在光盘或网上找到arm-Linux-gcc-4.5.1-v6-vfp-20101103.tgz,然后进行解压
#tar xvzf arm-Linux-gcc-4.5.1-v6-vfp-20101103.tgz -C /usr/local/arm
2.修改环境变量
#vi /etc/profile
在最后添加 export PATH=$PATH:/usr/local/arm/opt/FriendlyARM/toolschain/4.5.1/bin 保存退出
3.在终端输入 source /etc/profile
4.终端输入 arm-linux-gcc -v 若有版本信息,表明安装成功
** 如果路径没错,却提示 NO Such file or directory. 有可能是ubuntu版本问题,自己的linux系统是64位,但交叉编译器是32位,应该要安装一个 lib32ncurses5库。
(4).开发板 用的是smart210 开发板
(5).学习必备文档
Tiny210V2_V1.0_120713_sch.pdf (核心板的原理图)
Tiny210V2_SDK_V1.0_120804_sch.pdf (底板的原理图,根据型号来选择)
S5PV210_UM_REV1.1.pdf (S5PV210的芯片手册)
二、编译流程
我们首先参考光盘资料 裸机程序的第一个例程进行分析
1.工程文件
start.S 这包含用汇编写的led点亮的代码
Makefile 编译文件,描述了整个工程的编译链接规则
mkv210_image.c 为了给原始bin文件加16byte 的包头,以便启动设备检验通过 (详细的可以参考 裸机程序开发指南)
write2sd 脚本文件,用于把bin文件加载到SD卡的扇区1
2.编译过程
先插入SD 卡,终端输入:
#cd led //进入工程目录
#make //按照MakeFile 的规则进行编译
#chmod 777 write2sd //修改文件权限
#./write2sd //把bin文件烧录到SD卡
**注意:(1).write2sd 需要根据自己的实际情况进行修改 ......210.bin of=/dev/sdb ......
可以在未插入SD卡前,输入 ls /dev/ ,再插入SD卡,输入 ls /dev/ ,观察多了哪个,把这个代替了write2sd 的sdb
(2).如果出现提示 error while loading shared libraries:libz.so.1;cannot open shared object file: No such file or directory
出错是因为缺少lib32z1 的库 ,可以输入 sudo apt-get install lib32z1 来解决。
3.Makefile编译过程分析 (Makefile 的详细语法请参考 《跟我一起写Makefile》)
下面的代码源于光盘裸机程序第一个例子Makefile:
led.bin:start.o
arm-linux-ld -Ttext 0x0 -o led.elf $^ #将所有的.o文件链接成elf文件
arm-linuc-objcopy -0 binary led.elf led.bin #将elf文件抽取成bin文件
arm-linux-objdump -D led.elf > led_elf.dis #elf文件反编译成dis文件
gcc mkv210_image.c -o mkmini210 #处理bin文件
./mkmini210 led.bin 210.bin
%.o : %.S
arm-linux-gcc -o $@ $< -c #将.s/.c文件编译成.o文件
%.o : %.c
arm-linux-gcc -o $@ $< -c
clean:
rm *.o *.elf *.bin *.dis mkmini210 -f
若想了解每句代码的具体意义,请参考 裸机程序开发指南 ,在此不过多解释。
接下来,就是SD卡插入开发板,插上电源,即可看到现象。至于,led点亮的具体实现代码部分由于涉及到汇编,等学习完汇编才来具体分析。
下一个学习计划:就是ARM 的汇编
以上是我第一次写学习笔记,若有任何错误,请各位大神指教!!!