IT培训机构|91免费精品视频|专注编程培训|91免费精品|软件开发培训_91免费国产视频_华清远见教育


U-Boot編譯過程詳解

分享到:
           

    早,DENX軟件工程中心的Wolfgang Denk基于8xxrom的源碼創(chuàng)建了PPCBOOT工程,并且不斷添加處理器的支持。后來,Sysgo Gmbh把PPCBOOT移植到ARM平臺上,創(chuàng)建了ARMBOOT工程。然后以PPCBOOT工程和ARMBOOT工程為基礎,創(chuàng)建了U-Boot工程。

    現(xiàn)在,U-Boot已經(jīng)能夠支持PowerPC、ARM、X86、MIPS體系結構的上百種開發(fā)板,已經(jīng)成為功能多、靈活性強并且開發(fā)積極的開放源碼Bootloader。U-Boot的源碼包可以從sourceforge網(wǎng)站下載,還可以訂閱該網(wǎng)站活躍的U-Boot Users郵件論壇,這個郵件論壇對于U-Boot的開發(fā)和使用都很有幫助。

    U-Boot軟件包下載網(wǎng)站://sourceforge.net/project/U-Boot。
    U-Boot郵件列表網(wǎng)站://lists.sourceforge.net/lists/listinfo/U-Boot-users/。
    DENX相關的網(wǎng)站://www.denx.de。

    解壓U-Boot-1.3.4.tar.bz2就可以得到全部U-Boot源程序。在頂層目錄下有18個子目錄,分別存放和管理不同的源程序。這些目錄中所要存放的文件有其規(guī)則,可以分為3類。

    ·與處理器體系結構或者開發(fā)板硬件直接相關。
    ·一些通用的函數(shù)或者驅動程序。
    ·U-Boot的應用程序、工具或者文件。

    表1.1列出了U-Boot頂層目錄下各級目錄的存放原則。

    表1.1 U-Boot的源碼頂層目錄說明

表1.1	U-Boot的源碼頂層目錄說明

    U-Boot的源代碼包含對幾十種處理器、數(shù)百種開發(fā)板的支持。可是對于特定的開發(fā)板,配置編譯過程只需要其中部分程序。這里具體以S3C2410處理器為例,具體分析S3C2410處理器和開發(fā)板所依賴的程序,以及U-Boot的通用函數(shù)和工具。

    U-Boot的源碼是通過gcc和Makefile組織編譯的。頂層目錄下的Makefile首先可以設置開發(fā)板的定義,然后遞歸地調用各級子目錄下的Makefile,后把編譯過的程序鏈接成U-Boot映像。

    (1)頂層目錄下的Makefile

    它負責U-Boot整體配置編譯。按照配置的順序閱讀其中關鍵的幾行。

    每一種開發(fā)板在Makefile都需要有板子配置的定義。例如,smdk2410開發(fā)板的定義如下。
    smdk2410_config :unconfig
        @./mkconfig $(@:_config=) arm arm920t smdk2410 NULL s3c24x0

    執(zhí)行配置U-Boot的命令make smdk2410_config,通過./mkconfig腳本生成include/config.mk的配置文件。文件內容正是根據(jù)Makefile對開發(fā)板的配置生成的。

    ARCH = arm
    CPU = arm920t
    BOARD = smdk2410
    SoC = s3c24x0

    上面的include/config.mk文件定義了ARCH、CPU、BOARD、SoC這些變量。這樣硬件平臺依賴的目錄文件可以根據(jù)這些定義來確定。SMDK2410平臺相關目錄如下:

    ·board/smdk2410/
    ·cpu/arm920t/
    ·cpu/arm920t/s3c24x0/
    ·lib_arm/
    ·include/asm-arm/
    ·include/configs/smdk2410.h

    再回到頂層目錄的Makefile文件開始的部分,其中,下列幾行包含了這些變量的定義。

    # load ARCH, BOARD, and CPU configuration
    include include/config.mk
    export ARCH CPU BOARD VENDOR SoC

    Makefile的編譯選項和規(guī)則在頂層目錄的config.mk文件中定義。各種體系結構通用的規(guī)則直接在這個文件中定義。通過ARCH、CPU、BOARD、SoC等變量為不同硬件平臺定義不同選項。不同體系結構的規(guī)則分別包含在ppc_config.mk、arm_config.mk、mips_config.mk等文件中。

    頂層目錄的Makefile中還要定義交叉編譯器,以及編譯U-Boot所依賴的目標文件。

    ifeq ($(ARCH),arm)
    CROSS_COMPILE = arm-Linux-     # 交叉編譯器的前綴
    #endif
    export CROSS_COMPILE
    …
    # U-Boot objects...order is important (i.e. start must be first)
    OBJS = cpu/$(CPU)/start.o     # 處理器相關的目標文件
    …
    LIBS = lib_generic/libgeneric.a     #定義依賴的目錄,每個目錄下先把目標文件連接成*.a文件
    LIBS += board/$(BOARDDIR)/lib$(BOARD).a
    LIBS += cpu/$(CPU)/lib$(CPU).a
    ifdef SoC
    LIBS += cpu/$(CPU)/$(SoC)/lib$(SoC).a
    endif
    LIBS += lib_$(ARCH)/lib$(ARCH).a
    …

    然后還有U-Boot鏡像編譯的依賴關系。

    ALL = U-Boot.srec U-Boot.bin System.map
    all: $(ALL)
    U-Boot.srec: U-Boot
        $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@
    U-Boot.bin: U-Boot
        $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
    …
    U-Boot: depend $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)
        UNDEF_SYM='$(OBJDUMP) -x $(LIBS) \
        |sed -n -e 's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\
        $(LD) $(LDFLAGS) $$UNDEF_SYM $(OBJS) \
        --start-group $(LIBS) $(PLATFORM_LIBS) --end-group \
        -Map U-Boot.map -o U-Boot

    Makefile默認的編譯目標為all,包括U-Boot.srec、U-Boot.bin、System.map。U-Boot.srec和U-Boot.binU-Boot就是通過ld命令按照U-Boot.map地址表把目標文件組裝成U-Boot。其他Makefile內容就不再詳細分析了,上述代碼分析應該可以為閱讀代碼提供了一個線索。

    (1)開發(fā)板配置頭文件

    除了編譯過程Makefile以外,還要在程序中為開發(fā)板定義配置選項或者參數(shù)。這個頭文件是include/configs/.h。用相應的BOARD定義代替。

    這個頭文件中主要定義了兩類變量。

    一類是選項,前綴是CONFIG_,用來選擇處理器、設備接口、命令、屬性等。例如:

    #define    CONFIG_ARM920T    1
    #define    CONFIG_DRIVER_CS8900    1

    另一類是參數(shù),前綴是CFG_,用來定義總線頻率、串口波特率、Flash地址等參數(shù)。例如:

    #define    CFG_Flash_BASE    0x00000000
    #define    CFG_PROMPT    "=>"

    根據(jù)對Makefile的分析,編譯分為兩步。第1步是配置,如make smdk2410_config;第2步是編譯,執(zhí)行make就可以了。

    編譯完成后,可以得到U-Boot各種格式的映像文件和符號表,如表1.2所示。

    表1.2 U-Boot編譯生成的鏡像文件

表1.2	U-Boot編譯生成的鏡像文件

    U-Boot的3種映像格式都可以燒寫到Flash中,但需要看加載器能否識別這些格式。一般U-Boot.bin為常用,直接按照二進制格式下載,并且按照絕對地址燒寫到Flash中就可以了。U-Boot和U-Boot.srec格式映像都自帶定位信息。


   熱點鏈接:

   1、ARM處理器是什么
   2、FPGA從事的工作是什么
   3、北京嵌入式培訓哪好
   4、嵌入式培訓資料:搭建交叉編譯環(huán)境
   5、qq for android是什么意思

更多新聞>> 

主站蜘蛛池模板: 陕西西安升降机_导轨式升降货梯_电动固定剪叉式升降平台_甘肃兰州液压机械厂家 | 莫非传媒官网-江西知名的网络营销推广服务平台南昌网络公司,专业网络公关,品牌危机处理,网站SEO优化,微信朋友圈广告,网站建设,南昌莫非文化传媒有限公司 | 造雪机|人工造雪机|造雪机价格|造雪机厂家-河南晋安机械科技有限公司 | 助乐邦轮椅,北京轮椅置换,电动轮椅置换,轮椅回收北京,轮椅送货上门服务 | 曙海培训-ZEMAX培训射频培训无线电培训GMS培训EMC培训电磁兼容性培训Maxwell培训欧姆龙培训procast培训可靠性培训光学培训工业机器人培训NI培训Linux培训5G培训Hadoop培训CFD培训 | 欧派板材官网 | 全屋定制板材 专业供应商 | 四川蜀易控科技有限公司-酒店客房控制系统-智慧酒店智能化客房控制系统生产厂家 | 起名字典|宝宝新生儿男孩女孩起名免费网-诗经周易生辰八字取名字大全 | 移动破碎站-洗沙机-球磨制砂机-污泥处理-青州冠诚重工机械有限公司 | 上饶市新达新包装材料有限公司| 橡塑保温材料_防火保温材料_保温棉_东莞康成保温材料有限公司 | 全自动包装机械设备_液体灌装机-迈驰日化包装流水线厂家 | 烘焙服定做_定做烘焙制服_工服定制厂家_烘焙服生产厂家-庆洋制衣 | 厦门电脑维修_上门维修电脑_笔记本电脑维修_办公设备维修 - 耐诚 | 消防服_防化服_灭火防护服_消防装备生产厂家-泰州市华通消防装备厂有限公司 | 移动石料破碎机-颚式锤式反击式破碎机设备厂家_山东.青州富康机械 | 橡塑保温材料_防火保温材料_保温棉_东莞康成保温材料有限公司 | 检重秤,液化气充装秤,滚筒电子秤,汽车衡厂家|上海越衡实业 | 每天一篇励志文章,每晚一个励志故事—励志人生网 | 欢迎光临广西七三科技有限公司官网 | 造型松|泰山迎客松|造型油松-泰安小苹果园林 | 深圳沃亚游学官网丨国外游学丨国际夏冬令营丨美国游学线路丨出国短期游学丨亲子海外游丨游学咨询: 0755-83843308 | 泥沙泵_脱硫泵_潜水泵_离心泵_渣浆泵厂家|诚信为先-泰安华泰泵业制造有限公司 | 西安墓园-山水殡葬服务-提供免费墓地咨询服务 | 深圳潜水培训-潜水考证-公共安全潜水-救援潜水【深圳超潜潜水】 深圳汽车贴膜_深圳全车车身改色贴膜|UPPF隐形车衣官网 | 矿用三环链|锻打/焊接三环链|矿车万能环|三环链销子-济宁卓力工矿设备有限公司 | 净水器厂家_杭州净水器厂家_杭州拥政科技有限公司 | 新乡市矿山起重机制造有限公司| 矿用精确定位系统,井下4G无线通讯系统,工作面集控系统,皮带保护系统-山东新云鹏电气有限公司 | 配电箱自动生产线-配电箱生产线设备-山东炜桦智能 | 雷达液位计_耐磨热电偶_蒸汽_柴油,汽油_天然气流量计_巴歇尔槽_一体化温度变送器-江苏翔腾仪表有限公司 | 阴_阳离子聚丙烯酰胺价格_聚合氯化铝厂家_聚合硫酸铁-巩义市亿洋水处理材料有限公司 | 自动超声波清洗机_五金超声波清洗机厂家_超声波模具价格_东莞劲荣自动化 | 全自动视觉点胶机|在线式点胶机|精密点胶阀设备厂家-杭州迈伺特科技有限公司 | 郑州建网站,郑州做网站,郑州网站建设,郑州网站制作,郑州高端定制网站,郑州APP开发 | 久久91精品久久91综合_国产亚洲自拍一区_国产精品第1页_亚洲高清视频一区_91成人午夜在线精品_亚洲国产精品网站在线播放_亚洲国产成人久久综合区_国产精品亚洲专区在线观看_免费视频精品一区二区三区 | 微机继电保护测试仪,单相继电保护测试仪,三相继电保护测试仪,六相继电保护测试仪,介质损耗测试仪,氧化锌避雷器测试仪,无线核相仪-扬州豪泰电力科技有限公司 | 压力机-压装机-黄油机-黄油泵-[广东品嘉灵]专业定制各种精密压装设备 | 叛逆孩子改造,青少年行为矫正,戒网瘾学校,特训学校,全封闭军事化管理学校 | 兰州物流公司_兰州货运公司_兰州物流电话上门取货_兰州立辉物流公司 | 亿企商贸-亿万企业的商务贸易平台-B2B企业产品发布供求信息平台,一带一路中国企业及产品展示平台,免费企业智能自助建站网络营销推广平台,打造B2B企业黄页产品信息发布推广专业综合电子商务平台! |