<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 自制bootloader之程序的編譯和鏈接

自制bootloader之程序的編譯和鏈接

作者: 時(shí)間:2012-08-31 來(lái)源:網(wǎng)絡(luò ) 收藏

文本程序有4個(gè):boot.s head.s main.c(led.c) image.s

boot.s:這個(gè)中真正屬于boot的程序,完成板子硬件初始化并將內核程序(萬(wàn)能的LED流水燈點(diǎn)擊瀏覽下一頁(yè))搬至SDRAM。

head.s:內核程序的前部,包括內核異常向量表和內核程序入口。

main.c:內核主程序,只是一個(gè)簡(jiǎn)單的LED流水燈~(yú)~~

inamge.s:整個(gè)。包含boot.bin和kernel.bin,主要是將兩個(gè)bin文件重定向,確保兩個(gè)文件在正確的地址上。

Makefile文件如下:挺簡(jiǎn)單的~~先貼出來(lái):

CC = arm-elf-gcc    AS = arm-elf-as    LD = arm-elf-ld    OBJCOPY = arm-elf-objcopy    ADDRESS = 0x0c000000    .PHONY : all clean    all : image.bin   clean :   rm -f *.bin   rm -f *.elf   rm -f *.o   image.bin : image.asm boot.bin kernel.bin   nasm -f bin -o $@ $   kernel.bin : kernel.elf   $(OBJCOPY) -O binary -R .comment -R .note -S $ $@   chmod a-x $@   kernel.elf : 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 $@ $   boot.bin : boot.elf   $(OBJCOPY) -O binary -R .comment -R .note -S $ $@   chmod a-x $@   boot.elf : boot.o   $(LD) -Ttext 0 -nostdinc -o $@ $   chmod a-x $@   boot.o : boot.s   $(AS) -o $@ $  要注意的大概只有:image.bin : image.asm boot.bin kernel.bin   nasm -f bin -o $@ $ 

用的是nasm程序,本人用的redhat9.0,當然要另外安裝nasm 簡(jiǎn)單看了一下中文手冊,還是能理解的

再帖一下image.s,有助于理解整個(gè)的安排:

image.s:

incbin "boot.bin"

times 0x100 - ($ - $$) db 0

incbin "kernel.bin"

因為boot.bin文件大小為232字節(不足0x100),kernel.bin文件安排的是放在0x00000100的,所以中間還空了一些空間,所以選用nasm程序將兩個(gè)bin文件拼接成一個(gè)image.bin,當然中間空的得用0來(lái)填充。

這里還要補充的是:為什么要用nasm再編寫(xiě)一個(gè)image.s文件。一般用過(guò)51單片機的,如at89s51的話(huà),會(huì )認為完全可以像燒寫(xiě)51程序那樣,分別把boot.bin和kernel.bin文件燒寫(xiě)到指定的地址(j-flash提供此功能)而不需要把兩個(gè).bin文件事先拼接成一個(gè)文件。開(kāi)始我也是這么想的,后來(lái)發(fā)現不行。因為boot.bin和kernel.bin兩個(gè)文件是在flash的一個(gè)扇區內,而sst39vf160芯片的編程是以扇區(統一規格為2K)為單位的。即使是在一個(gè)扇區內只需修改一個(gè)字節的數據,那么都需要對整個(gè)扇區做修改。所以,當先把boot.bin燒寫(xiě)到0地址后,再想把kernel.bin燒寫(xiě)到0x100(2K)地址處時(shí),會(huì )把boot.bin給覆蓋掉。所以只能把兩個(gè)文件拼接成一個(gè)文件一次性燒寫(xiě)到0地址。

至些,在程序目錄中運行make就行了,能得到一個(gè)image.bin文件是需要的,將其燒錄到板子的flash里,當然是0。

斷電重啟板子,哈哈~~~ 燈還是跑起來(lái)了點(diǎn)擊瀏覽下一頁(yè),~~~還是要強化一下理解,下一個(gè)目標是要能用串口打印點(diǎn)什么吧~~



關(guān)鍵詞: bootloader 映像文件 起始地址

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>