完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 zo908111 于 2016-5-26 22:34 编辑 首先说一下bootstrap-v1.14,它是EAC-0945所运行linux的第一阶段的运行程序,功能是针对EAC-0945的硬件资源来编写的汇编代码,由它来引导第二阶段的uboot启动。 对于linux下的程序,我们应该从makefile入手查看,首先我们查看一下bootstrap的编译步骤: 解压缩: tarjxvf bootstrap-v1.14-eac-0945.tar.bz2 编译: 在bootstrap-v1.14/board/eac-0945/nandflash里面执行 makeCROSS_COMPILE=/opt/ARM-2007q1/bin/arm-none-linux-gnueabi- 我们就从bootstrap-v1.14/board/eac-0945/nandflash的makefile文件入手分析: ifndefERASE_FCT ERASE_FCT=rm-f endif 是定义在执行make的时候要删除一些中间的*.o *.bin *.elf *.map文件,如果没有定义ERASE_FCT的选项,则默认定义ERASE_FCT=rm -f。也就是删除*.o *.bin *.elf*.map的条件是rm -f。 ifndefCROSS_COMPILE CROSS_COMPILE=/opt/arm-2007q1/bin/arm-none-linux-gnueabi- endif 同上,定义的使用交叉编译工具链的路径。 TOOLCHAIN=gcc 表明使用的工具链是gcc工具链 BOOTSTRAP_PATH=../../.. 代表了bootstrap的变量../表示上一层目录,所以最后的路径就是 BOOTSTRAP_PATH =bootstrap-v1.14 TARGET=EAC-0945 目标TARGET定义为EAC-0945 BOARD=eac-0945 板子名称定义为eac-0945 LINK_ADDR=0x300000 链接地址为0x300000 TOP_OF_MEMORY=0x304000 定义存储器的顶部,也就是设置栈顶 PROJECT=nandflash 工程名设置为nandflash ifndef BOOT_NAME BOOT_NAME=$(PROJECT)_$(BOARD) endif 如果编译的时候定义了BOOT_NAME,那么不需要操作,如果没有定义那么BOOT_NAME = nandflash_ eac-0945,PROJECT和BOARD在前面已经定义了,所以可以将BOOT_NAME替换为nandflash_ eac-0945。 INCL=./$(BOOTSTRAP_PATH)/board/$(BOARD)/$(PROJECT) 此处是定义了编译的路径,也就是bootstrap-v1.14/board/ eac-0945/nandflash ifeq($(TOOLCHAIN), gcc) ifeq作用仅仅是判断TOOLCHAIN是否等于gcc,显然等于,那么执行此分支的语句 AS=$(CROSS_COMPILE)gcc CC=$(CROSS_COMPILE)gcc LD=$(CROSS_COMPILE)gcc NM=$(CROSS_COMPILE)nm SIZE=$(CROSS_COMPILE)size OBJCOPY=$(CROSS_COMPILE)objcopy OBJDUMP=$(CROSS_COMPILE)objdump CCFLAGS=-g-mcpu=arm926ej-s -O2 -Wall -D$(TARGET) -I$(INCL) ASFLAGS=-g-mcpu=arm926ej-s -c -O2 -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY) LDFLAGS+=-nostartfiles-nostdlib -Wl,-Map=$(BOOT_NAME).map,--cref LDFLAGS+=-T$(BOOTSTRAP_PATH)/elf32-littlearm.lds -Ttext $(LINK_ADDR) OBJS=crt0_gnu.o 以上语句都是为了后边编译的选项作为替换使用 OBJS+= $(BOARD).o main.o gpio.o pmc.o debug.o sdramc.o ddramc.o nandflash.o _udivsi3.o _umodsi3.o div0.o udiv.o string.o 上面语句就是目标文件crt0_gnu.o的依赖就是所有列出的 “.o”文件。 rebuild:clean all all: $(BOOT_NAME) 如果从新建立那么删除all=BOOT_NAME= nandflash_ eac-0945 ifeq($(TOOLCHAIN), gcc) $(BOOT_NAME):$(OBJS) $(LD) $(LDFLAGS) -n -o $(BOOT_NAME).elf$(OBJS) $(OBJCOPY) --strip-debug --strip-unneeded$(BOOT_NAME).elf -O binary $(BOOT_NAME).bin endif 如果TOOLCHAIN=gcc,显然等于,那么执行此分支,nandflash_ eac-0945依赖于OBJS=crt0_gnu.o,/opt/arm-2007q1/bin/arm-none-linux-gnueabi-gcc 编译选项LDFLAGS即-nostartfiles -nostdlib-Wl,-Map= nandflash_ eac-0945.map,--cref -T bootstrap-v1.14/elf32-littlearm.lds -Ttext 0x300000 -n -o nandflash_eac-0945.elf crt0_gnu.o /opt/arm-2007q1/bin/arm-none-linux-gnueabi-objcopy --strip-debug--strip-unneeded nandflash_ eac-0945.elf -O binary nandflash_ eac-0945.bin 所以最后的语句的意思是 nandflash_ eac-0945: crt0_gnu.o /opt/arm-2007q1/bin/arm-none-linux-gnueabi-gcc -nostartfiles-nostdlib -Wl,-Map= nandflash_ eac-0945.map,--cref -T bootstrap-v1.14/elf32-littlearm.lds-Ttext 0x300000 -n -o nandflash_ eac-0945.elf crt0_gnu.o /opt/arm-2007q1/bin/arm-none-linux-gnueabi-objcopy --strip-debug--strip-unneeded nandflash_ eac-0945.elf -O binary nandflash_ eac-0945.bin 后面是一些交叉编译的选项,不多说! 最后生成我们可以烧写的nandflash_ eac-0945.bin文件。 而我们继续查看链接脚本elf32-littlearm.lds可以找见这些代码的入口是reset: 我用sourceinsight建立工程以后全局搜索一下发现: reset定义在crt0_gnu.S里面,所以源文件crt0_gnu.S就是CPU最先执行的代码的源文件。后续会分析crt0_gnu.S。 业余分析,有错误欢迎指正,分析完成以后裸板点亮led。然后一步一步完成项目。欢迎大家交流!!! 较真一下: 之前拿到板子的第二天想看一下板子的启动方式,查看手册知道BMS引脚的电平状态来决定了芯片的启动方式: 结果去找原理图: 就是没有找见BMS引脚是那个,对应技术手册查看是T11引脚,最后还是没有找见BMS或者T11引脚,而技术手册的引脚定义方式如下图:
评分
|
||
相关推荐
3 个讨论
|
||
只有小组成员才能发言,加入小组>>
【盈鹏飞RK3399安卓主板 XPC-3399Pro免费试用】+烧写出厂固件
10319 浏览 0 评论
【盈鹏飞EVB-T335开发板试用体验】debian系统烧写
3347 浏览 1 评论
【盈鹏飞I.MX6UL工控开发板试用体验】linux can 测试
3226 浏览 0 评论
301浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 11:44 , Processed in 0.699473 second(s), Total 81, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号