明天,虽然主要剖析简单的点灯程序怎样在windowslinux下实现linux arm开发,由于arm的开发比较特殊,不像之前51,都是在windows下的(虽然当时也不会如此想到底在那种环境下,由于学51的不会听谁说会在linux下开发,也应当也可以),所以一下子说哪些arm一时来个哪些ADS一时来个keil,忽然又说哪些交叉编译。尽管似乎都不难懂,就有点晕,所以我明天理了一下,认为会更好,之后那个环境都不会乱。

1、windows环境下arm裸机开发

linuxarm嵌入式开发_linux arm开发_21天学会arm嵌入式开发

这儿要说一下,我用的是tq2440的开发板,由于开发板上会有好多对于初学者很有用的东西。首先,不管windows也好,linux也好,arm的开发都一样,就三个步骤:程序编辑,编译和烧录(关于烧录,我的上一遍博客有一些说明)。在windows下,我的开发软件是ADS,ADS就可以帮我们完成编辑和编译工作,对于编辑似乎只管main函数的编编辑是很简单的(其实这儿指的是点灯这个程序,其他的之后关键就是这个main函数,如今是说开发环境,所以main函数就显得次要了)。一开始,我们要晓得的是平常我们学习51时,就直接在keil上编撰,一些头文件以后就可以添加main函数,然后就是程序编撰了,而且arm不可以,为何呢?由于,51简单,只有一个EPRO给你烧程序,没有内部看门狗,没有cpu频度选择,堆栈表针sp更加一上电就手动指到ram的07h地址,然后可以改,用不到不改也可以。并且,arm呢,arm就复杂的多了,由于功能的须要,arm有norflash和nandflash,arm的时钟频度一上电只有12M,arm的看门狗倘若不关,上电3秒后手动复位,arm的sp是不会手动初始化的,由于arm储存空间的多样性,很难统一初始化(其实上电sp应当是初始化为某个值,但这个值通常不适宜用,等于没有初始化,这一点我也没多考量,有错请强调),等等。

所以arm的开发工具ads不会像51开发一样,你只要编辑好main函数,keil就可以在编译时,直接在rom的0地址帮你加个挑战到main函数的指令。就是说,51的启动文件虽然简单到不能再简单,所以我们不要写,keil手动帮每位工程加进去了,由于也就一句跳转指令,而都一样。并且arm的启动文件就相对可以多样了,尤其真正的做到产品时,那时会愈加需求具体设置。对于我们初学arm开发的人来说,虽然启动文件不用自己如何去编撰,一个是自己平常用到的初始化不多,一多你也做不来,二来裸机开发时启动文件用同一个就可以。所以我如今就就是这样,直接借用开发板的测试程序上的启动文件,这个启动文件虽然通用性也挺强,由于它就初始化了时钟,sp,屏幕,mmu,nand等,这种晓得先就可以了,之后再渐渐研究。所以我用ads时,直接在工程文件用复制测试程序的启动文件,然后在ads设置中添加这个文件,这种通常的开发板都有说,只是通常不会剖析如此具体。启动文件稿好了,就等于可以编辑main函数了,这个看着数据指南来编就好了。以后说一下,为何要设置好多编译环境,就是ads设置哪里。虽然主要有2个方面,一个是设置文件次序,一个是设置加载地址。我这儿直接说了,你们可以看着自己开发板上ads配置文档来理解。由于加载地址可以多变,而这个不是在程序中配置的,配置好了编译器,之后编译时就可以依据这个option的设置来编译了,比如你配置好了加载地址,然后编译成汇编时,编译编译下来的汇编句子中用到的地址就是从那里开始。否则直接从0地址或哪些的开始,你的程序就跑飞了。

所以windows下ads的使用首先把option配置好,这样才可以编译下来的汇编句子用的地址正确,文件的链接次序也对,第二,把开发板的测试程序中的启动文件添加进工程,这样启动初始化工作就可以了linux系统装win7,然后把main函数抓好了就可以烧录了,windows烧录就是把.bin文件通过dnw软件烧到sdram调试,或则烧到nandflash。(烧到nandflash重起航序还在,但平常烧到sdram也可以,重起航序不存在了,其实linux arm开发,烧到不同地方,启动文件要相应改变)

linuxarm嵌入式开发_21天学会arm嵌入式开发_linux arm开发

2、linux下裸机开发,虽然就是那三个步骤,并且有所区别。首先来说一下启动文件吧,这个启动文件或许也是用开发板提供的linux操作系统论文,之后就是编译环境设置了,linux下时靠makefile来完成的,通过makefile可以把那些都配置好,具体见开发板的makefile文件就晓得了。这儿把我的点灯程序的makefile列举了:

led_on_c.bin:crt0.Sled_on_c.c

arm-linux-gcc-g-c-ocrt0.ocrt0.S

linux arm开发_linuxarm嵌入式开发_21天学会arm嵌入式开发

arm-linux-gcc-g-c-oled_on_c.oled_on_c.c

arm-linux-ld-Ttext0x00000000-gcrt0.oled_on_c.o-oled_on_c_elf

arm-linux-objcopy-Obinary-Sled_on_c_elfled_on_c.bin

21天学会arm嵌入式开发_linux arm开发_linuxarm嵌入式开发

arm-linux-objdump-D-marmled_on_c_elf>led_on_c.dis

clean:

rm-fled_on_c.disled_on_c.binled_on_c_elf*.o

21天学会arm嵌入式开发_linux arm开发_linuxarm嵌入式开发

其中crt0.S就是启动文件,arm-linux-ld-Ttext0x00000000-gcrt0.oled_on_c.o-oled_on_c_elf这一句就是指定加载地址为0x00000000,由于我是烧讲到nandflash的,所以把这个.bin文件从nandflash的0地址开始烧进去就可以。

这个就是我的一些心得了,比较不严谨,由于只是自己的一些思索和看法,以及一些经验,仅供参考,希望多多交流。

本文原创地址:https://www.linuxprobe.com/wylhjxaljkfz.html编辑:刘遄,审核员:暂无