乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       XeonGate 2019-10-23

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

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

      2. Emacs
        神用的編輯器,學習曲線是盤旋型的,高深莫測。太難駕馭,對與我這種凡人,可能一輩子都盤旋在這個漩渦里。

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

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

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

      在使用eclipse創(chuàng)建工程之前需要兩步準備工作:1,準備好交叉編譯工具配置好環(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ù)將作為我們接下來配置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

      下面我們開始通過Eclipse構建Linux Kernel 工程,我使用的版本是Eclipse cdt neon 3
      Eclipse 版本信息

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

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

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

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

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

      6. 完成。

        等待index完成,需要幾分鐘的時間。

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

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多