日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

嵌入式开发(S5PV210)——u-boot的头文件包含问题

發(fā)布時(shí)間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 嵌入式开发(S5PV210)——u-boot的头文件包含问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

uboot和kernel的頭文件包含比一般的程序更復(fù)雜,將頭文件的路徑用鏈接來表示,這樣的用意是為了程序的可移植性。uboot是高度可移植的,不同的配置和編譯指令可以編譯出不同Soc和開發(fā)板的程序,其中源碼是沒有改動(dòng)的。不同的編譯配置指令就是將鏈接指向不同的目錄,將適配的同名頭文件或者同功能的配置文件包含進(jìn)去,從而編譯出不同平臺(tái)的uboot程序。用鏈接來包含頭文件的做法也是有缺點(diǎn)的,不能直觀的知道當(dāng)前包含頭文件的路徑,因?yàn)槁窂绞怯面溄臃?hào)來表示的,而我們并不能一眼看出鏈接指向何處,要分析腳本才知道。

start.S中的頭文件包含

//start.S中包含的頭文件 #include <config.h> #include <version.h> #if defined(CONFIG_ENABLE_MMU) #include <asm/proc/domain.h> #endif #include <regs.h>

頭文件包含解析

頭文件的包含格式上并無特殊,但是按照頭文件的路徑卻找不到該頭文件。比如#include <asm/proc/domain.h>,你在原生目錄里是找不到include/asm/proc目錄的,因?yàn)閍sm和proc都不是目錄,而是鏈接符號(hào),在編譯的時(shí)候鏈接符號(hào)對(duì)指向相應(yīng)的目錄,從而將指定目錄下的domain.h包含進(jìn)去。鏈接符號(hào)是在配置階段創(chuàng)建的,我手里的uboot是在頂層的mkconfig中建立的鏈接。

鏈接的生成

#在頂層的mkconfig文件中摘抄,其中$2=armif [ "$SRCTREE" != "$OBJTREE" ] ; thenmkdir -p ${OBJTREE}/includemkdir -p ${OBJTREE}/include2cd ${OBJTREE}/include2rm -f asmln -s ${SRCTREE}/include/asm-$2 asmLNPREFIX="../../include2/asm/"cd ../includerm -rf asm-$2rm -f asmmkdir asm-$2ln -s asm-$2 asmelsecd ./includerm -f asmln -s asm-$2 asm #生成include/asm鏈接符號(hào)指向include/asm-armfiif [ "$2" = "arm" ] ; thenrm -f asm-$2/procln -s ${LNPREFIX}proc-armv asm-$2/proc #創(chuàng)建asm-arm/proc鏈接符號(hào)指向proc-armvfi

解析:asm和proc鏈接符號(hào)都是在上面的配置腳本里生成的,用if語句判斷鏈接指向何處。配置指令不同鏈接符號(hào)指向的目錄就不同,從而達(dá)到可移植的目的。
拓展:如果你看到代碼里引用了某個(gè)文件,但是你卻找不到該目錄,可能就是因?yàn)橐迷撐募穆窂绞怯面溄臃?hào)來指定的,需要去分析配置文件才能知道引用的是哪個(gè)路徑下的文件。

總結(jié)

以上是生活随笔為你收集整理的嵌入式开发(S5PV210)——u-boot的头文件包含问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。