
前期基础:了解ARM核基本使用、了解C/C++语言基础及一点ARM汇编、了解开发工具链基本使用;还需要了解一些简单的硬件基础。
基本条件:有原理图,有相应芯片的datasheet。
开始:(各种ARM芯片流程大致类似)
1. ARM启动代码:异常向量、中断初始化;(代码搬移,可选);堆、栈初始化;CPU、MMU、时钟等的初始化,C运行环境的其他准备。
2. 进入C后,基本驱动编写:需要了解ARM芯片是否有LCD控制器,然后根据情况编写这部分驱动代码(第一回配置可能不太容易,可参考样例程序),如果没有LCD控制器就有点麻烦了(其他芯片做?自己写?);其他驱动程序(存储器,如SDRAM、FLASH等),根据需要编写。
3. 基本库程序:可以自写,也可以找现成的,主要涉及字符串处理、IO处理(printf)等,其他基本库(内存分配等)。
4. 编写应用程序:你的这个例子就是在显示驱动基础上,写“Hello world”。
5. 编写连接脚本:根据内存分配情况和程序存储情况写,有模板,连接时用。
开发流程:
1. 编写程序;
2. 编译;
3. 连接;
4. 加载或下载;
5. 调试/运行;
6. 反复执行1~5步骤,直到实现你的功能。
参考:
1. 各芯片厂商的application note,有应用程序样例及代码,也可以找到相关驱动程序的样例;
2. 网上搜索或看书学习开发过程;
3. 可以参考uboot早期一些的代码,比较简单好懂。
开机后自动运行用户的应用程序或启动系统服务的命令保存在开发板根文件系统的/usr/etc/rc.local文件中。有的开发板开机后自动运行图形界面程序,需要按住ctrl+c让开发板进入到linux的SHELL提示符界面。其实可通过注释掉rc.local文件中调用图形界面的命令,增加运行用户应用程序的命令,达到开机自动运行用户应用程序的目的。下面以我做的实验为例,描述具体的实现步骤。该方法源于网络,我加以验证,稍做修改,此文相当于转载。
1.进入pc机的linux
*** 作系统,在/nfs/usr/下通过mkdir
lz
命令新建一个名为lz的文件夹,进入lz文件夹,通过mkdir
hello新建一个hello文件夹用来存放我们将要编写的hello.c文件和编译生成的可执行文件。
2.在/nfs/usr/lz/hello下通过vi
hello.c命令新建hello.c文件,编辑如下测试程序:
#include
int
main(){
printf("Hello,test
arm-linux!")
return
0
}
完成编辑后通过:wq保存后退出。
3.主机通过如下命令交叉编译环境编译hello.c:
#arm-linux-gcc
o
hello
hello.c
4.通过ls
命令可以看到在/nfs/usr/lz/hello/下已经生成了hello可执行文件,我们可以在开发板上通过./hello来测试自己编写的hello.c执行情况
5.修改rc.local文件,在文件的最后通过‘#’释掉启动图形界面的指令,增加执行用户应用程序hello的指令,具体实现如下:
#export
PATH=$QPEDIR/bin:$PATH
#qtopia
#/usr/qtopia/bin/qtopia
/usr/lz/hello/./hello
注:前三行是注释掉启动图形界面,最后一行是添加的执行用户的hello测试程序。
6.重启开发板,通过vivi参数配置让开发板通过nfs挂载主机上的文件系统,这时我们就可以通过超级终端看到开发板已经运行了我们编写的hello程序。
arm-linux-gcc编译出来的其实就是在linux下可以执行的程序,只不过运行这个linux的CPU需要是ARM的。所以,只要把这个文件传到已可运行linux的目标板上就行(可通过ftp等手段),然后修改这个可执行文件的权限chmod +x 文件名,就可以运行了。另外,要转换成烧写的bin文件是用另一个编译工具arm-elf-gcc,这个编译出来的不是可执行文件,而直接是程序的二进制形式。这才需要通过烧写flash的方式替换目标板的 *** 作系统,当然肯定不能是hello.c这么简单的程序。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)