小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

使用 Eclipse 搭建 Linux 內(nèi)核開(kāi)發(fā)環(huán)境

 XeonGate 2019-10-23

??時(shí)光流逝,記得十年前還是個(gè)游手好閑的少年,無(wú)聊時(shí)覺(jué)得應(yīng)該分析一下Linux內(nèi)核源碼,沒(méi)有別的動(dòng)機(jī),只覺(jué)得這樣很酷。
??沒(méi)有任何項(xiàng)目經(jīng)驗(yàn)的話(huà),突然眼前出現(xiàn)一個(gè)浩大的工程,除了驚嘆之余,再無(wú)其他可言。Linux內(nèi)核的學(xué)習(xí)曲線(xiàn)可能陡峭了一點(diǎn),如果沒(méi)有點(diǎn)定力的話(huà),是不會(huì)有什么進(jìn)步的。
??當(dāng)把幾十MB的tar包下載到本地后,打開(kāi)方式便成了困擾我的一個(gè)問(wèn)題,前前后后使用過(guò)好多工具,但都有一些缺點(diǎn)。

  1. Vim
    各種插件,各種配置。vim如果定義為IDE的話(huà),那還屬于輕量級(jí)的IDE,通過(guò)Nerdtree+taglist+ctags+ycm這些大眾一點(diǎn)的插件,完全可以實(shí)現(xiàn)語(yǔ)法高亮,代碼跳轉(zhuǎn)等IDE具備的功能,但對(duì)于SLOC大于100K數(shù)量級(jí)的工程貌似有點(diǎn)力不從心。相對(duì)與大型IDE來(lái)說(shuō),它更像一把短小而鋒利的瑞士軍刀。

  2. Emacs
    神用的編輯器,學(xué)習(xí)曲線(xiàn)是盤(pán)旋型的,高深莫測(cè)。太難駕馭,對(duì)與我這種凡人,可能一輩子都盤(pán)旋在這個(gè)漩渦里。

  3. Source Insight
    看過(guò)好多教程使用這東東瀏覽Linux內(nèi)核,總是覺(jué)得很別扭,Linux自己家的事,為什要放在Windows上,文件名不區(qū)分大小寫(xiě)這一點(diǎn)就足以讓人頭疼了。

  4. LXR
    例如: http://elixir./linux/latest/source 非常適合各種版本的Linux內(nèi)核代碼間比較和瀏覽,但是你想修改一下再編譯一下就沒(méi)有這功能了。

??進(jìn)行過(guò)一下嘗試后,還是覺(jué)得需要一個(gè)相對(duì)重量級(jí)的IDE來(lái)瀏覽Linux內(nèi)核代碼比較省時(shí)省力,比如Eclipse,QTCreator,Netbeans. 我這里暫且使用Eclipse來(lái)搭建一個(gè)瀏覽Linux內(nèi)核的環(huán)境,以幫助新人少走彎路。

在使用eclipse創(chuàng)建工程之前需要兩步準(zhǔn)備工作:1,準(zhǔn)備好交叉編譯工具配置好環(huán)境變量;2,將Linux Kernel下載解壓并成功編譯一次。
下面這段輸出是使用命令
export ARCH=arm CROSS_COMPILE=arm-linux-
make arm_vexpress_defconfig
make zImage V=1
輸出的 ./init/main.c 文件的編譯參數(shù),這段參數(shù)將作為我們接下來(lái)配置Eclipse的重要參考。

arm-linux-gcc -Wp,-MD,init/.main.o.d  
-nostdinc 
-isystem /opt/arm-buildroot-linux-uclibcgnu/usr/lib/gcc/arm-buildroot-linux-uclibcgnueabihf/5.4.0/include 
-I/mnt/sda5/workplace/linux-3.10.107/arch/arm/include 
-Iarch/arm/include/generated  
-Iinclude -I/mnt/sda5/workplace/linux-3.10.107/arch/arm/include/uapi 
-Iarch/arm/include/generated/uapi -I/mnt/sda5/workplace/linux-3.10.107/include/uapi 
-Iinclude/generated/uapi -include /mnt/sda5/workplace/linux-3.10.107/include/linux/kconfig.h 
-D__KERNEL__ -mlittle-endian -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs 
-fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security 
-fno-delete-null-pointer-checks -std=gnu89 -O2 -fno-dwarf2-cfi-asm -fno-ipa-sra 
-mabi=aapcs-linux -mno-thumb-interwork -funwind-tables -marm 
-D__LINUX_ARM_ARCH__=7 -march=armv7-a -msoft-float -Uarm -Wframe-larger-than=1024 
-fno-stack-protector -Wno-unused-but-set-variable -fomit-frame-pointer 
-fno-var-tracking-assignments -g -Wdeclaration-after-statement -Wno-pointer-sign 
-fno-strict-overflow -fconserve-stack 
-DCC_HAVE_ASM_GOTO    -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(main)"  
-D"KBUILD_MODNAME=KBUILD_STR(main)" -c -o init/main.o init/main.c

下面我們開(kāi)始通過(guò)Eclipse構(gòu)建Linux Kernel 工程,我使用的版本是Eclipse cdt neon 3
Eclipse 版本信息

  1. 打開(kāi)Eclipse工程后 File–>New–>Other–>C/C++–>Makefile Project with Existing Code 然后將Kernel所在目錄配置好
    配置工程目錄

  2. 配置好工程目錄后,右鍵Project Explorer 中的工程,選擇 Properties 進(jìn)入工程屬性配置窗口。

  3. 選擇C/C++ build ,將 Use default build command選項(xiàng)去掉,在Build command中輸入 ARCH 和 CROSS_COMPILE 的配置信息,配置如下圖

  4. 配置 C/C++ Gernal ,這一項(xiàng)中配置信息較多。
    首先選擇 indexer 子選項(xiàng),勾選 Enable project specific settings 選項(xiàng) 并 去掉 Index source files not included in the build 選項(xiàng)。
    indexer配置項(xiàng)
    選擇 Paths and Symbols 子選項(xiàng),需要配置 Includes,Symbols,Source Location 三個(gè)tab選項(xiàng)。
    Includes中添加架構(gòu)相關(guān)的include頭文件,參考剛才編譯時(shí)的 -I 選項(xiàng) ,我這里添加
    ./arch/arm/include
    ./arch/arm/include/uapi
    ./arch/arm/include/generated
    ./arch/arm/include/generated/uapi
    四個(gè)目錄,工程根目錄下的include目錄不用添加,eclipse會(huì)自動(dòng)搜索那個(gè)目錄。
    includes配置
    其中 Symbols 配置則參考編譯輸出信息中的 -D 參數(shù) ,KERNEL 是必須的, 其他的要根據(jù)平臺(tái)不同,KBUILD_* 相關(guān)的定義可以先不用添加,用到的比較少。
    symbols配置
    其中 Source Location 配置主要是為了去掉不參與編譯的代碼,避免多平臺(tái)頭文件的重復(fù)定義對(duì)indexer的干擾,選擇 Edit Fileter–>Add Multiple 將 ./arch目錄下的所有文件夾選中,除了需要編譯的平臺(tái),比如我這里要排除arm文件夾。如果不開(kāi)發(fā)驅(qū)動(dòng),建議將./drivers目錄也添加進(jìn)入,因?yàn)轵?qū)動(dòng)里面的頭文件也存在重復(fù)定義。
    source location配置

  5. 配置 Preprocessor Include Paths, Macros etc. 子選項(xiàng)。
    其中 Entries 選項(xiàng)卡 選中 GNU C –> CDT User Setting Entries –> Add –> Preprocessor Macros File –> 選擇 ./include/gernerated/autoconf.h 文件 –> OK
    所有make menuconfig 時(shí)的編譯配置信息都在這個(gè)文件里,所以需要讓eclipse識(shí)別這些信息。
    Entries配置
    其中 Providers 選項(xiàng)卡 選中 CDT Cross GCC Built-in compiler Settings 選項(xiàng),在 Command to get compiler specs 中添加 -nostdinc 和 -isystem {cross gcc include 目錄} 信息,具體的目錄信息可以參考內(nèi)核編譯時(shí)的輸出信息。
    providers配置
    Providers的配置說(shuō)明: 通常一個(gè)C工程需要包含的頭文件分為三類(lèi):
    ?(1). GCC編譯器的頭文件,通常包含編譯器支持的一些特性比如 va_list 這種特性;
    ?(2). libc庫(kù)的頭文件,就是標(biāo)準(zhǔn)C庫(kù)的頭文件,比如stdio.h就屬于這一類(lèi);
    ?(3). 第三方庫(kù)頭文件。
    Linux內(nèi)核只用到了第一類(lèi)頭文件,并沒(méi)有用到libc庫(kù)和第三方庫(kù),所以使用 -nostdinc 選項(xiàng)將交叉編譯工具的默認(rèn)庫(kù)搜索路徑去掉,然后再使用 -isystem 選項(xiàng)將 GCC編譯器的頭文件路徑加入即可。

  6. 完成。

    等待index完成,需要幾分鐘的時(shí)間。

    然后就可以使用Eclipse開(kāi)發(fā)Linux Kernel了,Eclipse在一些小細(xì)節(jié)上還是會(huì)解析的不夠好,一些小的語(yǔ)法錯(cuò)誤提示可以不用太在意。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多