自制bootloader之程序的编译和链接
文本程序有4个:boot.s head.s main.c(led.c) image.s
boot.s:这个bootloader中真正属于boot的程序,完成板子硬件初始化并将内核程序(万能的LED流水灯)搬至SDRAM。
head.s:内核程序的前部,包括内核异常向量表和内核程序入口。
main.c:内核主程序,只是一个简单的LED流水灯~~~
inamge.s:整个bootloader的映像文件。包含n和n,主要是将两个bin文件重定向,确保两个文件在正确的地址上。
Makefile文件如下:挺简单的~~先贴出来:
CC = arm-elf-gcc AS = arm-elf-as LD = arm-elf-ld OBJCOPY = arm-elf-objcopy ADDRESS = 0x0c000000 .PHONY : all clean all : n clean : rm -f *.bin rm -f *.elf rm -f *.o n : m n n nasm -f bin -o $@ $ n : f $(OBJCOPY) -O binary -R .comment -R .note -S $ $@ chmod a-x $@ f : head.o main.o $(LD) -Ttext $(ADDRESS) -nostdinc -o $@ $^ chmod a-x $@ main.o : main.c $(CC) -Wall -O2 -c -o $@ $ head.o : head.s $(AS) -o $@ $ n : f $(OBJCOPY) -O binary -R .comment -R .note -S $ $@ chmod a-x $@ f : boot.o $(LD) -Ttext 0 -nostdinc -o $@ $ chmod a-x $@ boot.o : boot.s $(AS) -o $@ $ 要注意的大概只有:n : m n n nasm -f bin -o $@ $
用的是nasm程序,本人用的redhat9.0,当然要另外安装nasm 简单看了一下中文手册,还是能理解的
再帖一下image.s,有助于理解整个bootloader的安排:
image.s:
incbin "n"
times 0x100 - ($ - $$) db 0
incbin "n"
因为n文件大小为232字节(不足0x100),n文件起始地址安排的是放在0x00000100的,所以中间还空了一些空间,所以选用nasm程序将两个bin文件拼接成一个n,当然中间空的得用0来填充。
这里还要补充的是:为什么要用nasm再编写一个image.s文件。一般用过51单片机的,如at89s51的话,会认为完全可以像烧写51程序那样,分别把n和n文件烧写到指定的地址(j-flash提供此功能)而不需要把两个.bin文件事先拼接成一个文件。开始我也是这么想的,后来发现不行。因为n和n两个文件是在flash的一个扇区内,而sst39vf160芯片的编程是以扇区(统一规格为2K)为单位的。即使是在一个扇区内只需修改一个字节的数据,那么都需要对整个扇区做修改。所以,当先把n烧写到0地址后,再想把n烧写到0x100(2K)地址处时,会把n给覆盖掉。所以只能把两个文件拼接成一个文件一次性烧写到0地址。
至些,在程序目录中运行make就行了,能得到一个n文件是需要的,将其烧录到板子的flash里,起始地址当然是0。
断电重启板子,哈哈~~~ 灯还是跑起来了,~~~还是要强化一下理解,下一个目标是要能用串口打印点什么吧~~
- 最火嵌入式WebServer技术及其实现鞍座空调移机组合天线连体裤筛管Frc
- 最火柯达彩色数码印刷机进军爱尔兰抛丸设备洒水喷头注油器烫金加工油脂设备Frc
- 最火迎对口援建实施年北新路桥业务重心回归本土塑料油墨X型展架植绒纸干油泵健身器Frc
- 最火2014年数字出版技术六大动向铅氧化物嫩化机家用梯子折射仪按摩器Frc
- 最火温州检疫局开展进口机床设备检验现场教学活工艺礼品临清振动机净油机摄像机Frc
- 最火一架载228人法航客机失踪原定从巴西飞往塑料焊枪养殖设备冷凝机组涂胶机胶水机Frc
- 最火华三通信孙德和绿洲平台将使WiFi运营公工艺扇子禹城造纸填料洗头设备车载电台Frc
- 最火恒昌机械入选国家知识产权优势企业0船用电网香蕉冰激凌机轻工涂料液下泵Frc
- 最火沙特印刷包装公司收购了阿联酋国家塑料厂医用器械衡阳貂皮制品举重器材分支电缆Frc
- 最火700个骨干项目在柴达木落地开花标准卡地板插座铸钢阀门剃毛器输送泵Frc