久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

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

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2010年12月20日   【字體:

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

boot.s:這個bootloader中真正屬于boot的程序,完成板子硬件初始化并將內(nèi)核程序(萬能的LED流水燈)    搬至SDRAM。

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

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

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

Makefile文件如下:挺簡單的~~先貼出來:

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 簡單看了一下中文手冊,還是能理解的

再帖一下image.s,有助于理解整個bootloader的安排:

image.s:

incbin    "boot.bin"   

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

incbin    "kernel.bin"

因為boot.bin文件大小為232字節(jié)(不足0x100),kernel.bin文件起始地址安排的是放在0x00000100的,所以中間還空了一些空間,所以選用nasm程序?qū)蓚bin文件拼接成一個image.bin,當然中間空的得用0來填充。

 

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

 

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

斷電重啟板子,哈哈~~~ 燈還是跑起來了,~~~還是要強化一下理解,下一個目標是要能用串口打印點什么吧~~ 

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: jizz在线看片| 91精品国产乱码麻豆白嫩 | 欧美αv | 亚洲一区二区三区在线视频 | 久久久久久久久久久久亚洲 | 爱草在线 | 欧美综合在线视频 | аⅴ资源新版在线天堂 | 中文字幕一区二区在线观看 | a级大片免费观看 | 欧美成人免费电影 | 国产激情精品一区二区三区 | 中文字幕 国产精品 | 久热精品在线播放 | 久草视频观看 | 黑人精品欧美一区二区蜜桃 | 国产免费一区二区三区 | 国产真实精品久久二三区 | 久久亚| 亚洲交性| 日本高清在线一区 | 91九色porny首页最多播放 | 国产99视频精品免视看9 | 国产欧美精品一区二区三区 | 天天干视频 | 欧美黄色一区 | 国产精品精品视频一区二区三区 | 国产精品免费av | 亚洲天堂中文字幕 | 91免费观看视频 | 亚洲一级毛片 | 日本午夜免费福利视频 | 久久久精品网站 | 亚洲午夜在线 | 操久久 | 亚洲高清在线观看 | 国产高清视频在线 | 色又黄又爽网站www久久 | 日韩影音 | 在线观看国产wwwa级羞羞视频 | 91人人视频在线观看 |