一、配置介紹

来源:https://www.cnblogs.com/xie0812/archive/2018/05/16/9048106.html
-Advertisement-
Play Games

一、配置介紹 1.1 常用命令 當前 uboot 的配置已經完全變成Linux 內核的配置形式了,完全可以按照Linux 內核的分析方是區分析 uboot。 uboot 和 Linux的代碼配置項由 Kconfig 來完成的,關於 Kconfig 語法,可參見:linux/Documentation ...


一、配置介紹

1.1 常用命令  

  當前 uboot 的配置已經完全變成Linux 內核的配置形式了,完全可以按照Linux 內核的分析方是區分析 uboot。

  uboot 和 Linux的代碼配置項由 Kconfig 來完成的,關於 Kconfig 語法,可參見:linux/Documentation/kbuild/kconfig-language.txt

  在編譯時,先進行配置,目的是根據需求選擇功能以及編譯生成方式類型(模式或包含在內核中).

  配置項操作可以由如下命令中的其中一條來完成:

   make config, make menuconfig, make oldconfig, make xx_defconfig

  • make config:這個要求用戶手動選擇所有配置項,配置完成後生成 .config 文件。
  • make menuconfig:顯示以curses的圖形配置菜單,當已有.config文件存在時,它會根據 .config 文件設定預設項。若不存在 .config 文件,則根據各級 Kconfig 文件來設定菜單項。完成配置後,生成.config文件。
  • make oldconfig:與 make menuconfig 相同,區別在於這個沒有圖形界面,當已有 .config 文件存在時,它根據.config文件設定預設項,若kconfig有新配置項時,會提示你進行選擇;若不存在 .config 文件,則根據各級 Kconfig 文件來設定菜單項。完成配置後,生成 .config 文件。

  若已存在 .config 文件,make menuconfig 及 make oldconfig 都會把原 .config 另存為 .config.old。

  • make xx_defconfig: 一般源碼中都有不同硬體平臺的預設配置文件,你也可以製做自己的預設配置文件,當這個命令執行時,它會根據 kconfig 及 xx_defconfig 來生成 .config 文件。

  在執行完其中一條 config 命令後,會生成 .config 及 autoconf 文件,autoconf 是根據配置項生成的相應巨集定義,供 makefile 使用,當執行 make 命令時,就會根據 autoconf 定義的巨集及 makefile 去編譯源碼。

  u-boot的編譯跟kernel編譯一樣,分兩步執行: 
  - 第一步:配置,執行make xxx_defconfig進行各項配置,生成.config文件 
  - 第二部:編譯,執行make進行編譯,生成可執行的二進位文件u-boot.bin或u-boot.elf

1.2 Linux 內核構建系統所支持的目標

  make targets,targets 就是我們前述的那些命令,我們可以通過 make help 列印出來內核構建系統所支持的目標完整列表。

  如下所示,是 make help 所列印的所有目標:

  

  • clean 目標
    • clean:清除大多數生成的文件,但是保留配置
    • mrproper:清除所有生成的文件、配置文件和各種備份文件
    • distclean:此項就是 mrproper 的升級版本,多加了清除備份和補丁文件  

  

  • 配置項目標:
    • config:利用命令行更新當前配置
    • nconfig:使用基於ncurses菜單的程式更新當前配置
    • menuconfig:利用菜單程式更新當前配置
    • xconfig:利用基於Qt的前端更新當前配置
    • gconfig:利用基於GTK +的前端更新當前配置
    • oldconfig:使用提供的.config作為基礎更新當前配置
    • localmodconfig:更新當前配置禁用未載入的模塊
    • localyesconfig:更新當前配置將本地mods轉換為core
    • silentoldconfig:與oldconfig相同,但是安靜地更新deps
    • defconfig:來自ARCH的預設配置提供了defconfig
    • savedefconfig:保存當前配置為./defconfig(最小配置)
    • allnoconfig:新的配置,所有選項的答案都是no
    • allyesconfig:新的配置,所有選項的答案都是yes
    • allmodconfig:新的配置,儘可能的選擇模塊
    • alldefconfig:將所有符號設置為預設值的新配置
    • randconfig:對所有選項進行隨機答案的新配置
    • listnewconfig:列出新選項
    • olddefconfig:與 silentoldconfig 相同,但是對預設值設置新的符號  

  

  • 其他通用目標
    • all:根據配置構建所有必要的鏡像
    • tests:為 sandbox 構建 U-Boot,並測試
    • * u-boot:構建空的 uboot
    • dir/ :在dir和子目錄下構建所有文件
    • dir/file.[oisS] :僅構建指定的目標
    • dir/file.lst :僅構建指定的混合源/彙編目標(需要最新的binutils和最新的版本(System.map))
    • tags/ctags:生成 ctags 索引文件
    • etags:生成 etags 索引文件
    • cscope:生成 cscope 索引
    • ubootrelease:輸出發行版本字元串(需要用 make -s)
    • ubootversion:輸出保存在 Makefile 中的版本(需要用 make -s)
    • cfg:不構建,僅僅只創建 .cfg 文件
    • envtools:只構建目標端環境工具  

  

  • 靜態分析:
    • checkstack:生成堆棧列表
    • coccicheck:用Coccinelle執行靜態代碼分析  

  

  文件目標 就是 uboot 中所有格式的文件,之後就是構建時候 可以傳入的參數。

  最後還由一段話,就是 執行 make  或  make all  的時候,構建所有以 * 開頭的目標,這裡只有  * u-boot ,即使執行此項。

  構建系同與 .config 相關的目標,就是上面用配置目標  

1.3 構建系統的文件

1.3.1 文件介紹

  在 ./Document/kbuild/makefiles.txt 中有詳細介紹

  • Makefiles 有 5 個部分:
    • Makefile:頂層 Makefile,提供針對各種目標的介面,一般和實現無關。當我們要針對某個目標進行分析時,作為起點,總是嘗試在此文件中找到對應的目標定義,然後沿著該定義深入挖掘。
    • .config:uboot 配置文件,如果是內核,就是內核的配置文件,在配置 uboot時候生成,所有的 Makefile 文件(包括頂層目錄及各級子目錄)都是根據 .config 來決定使用哪些文件。
    • arch/$(ARCH)/Makefile:平臺相關 Makefile,提供針對不同架構的目標,變數和規則定義。文件位置比較固定
    • scripts/Makefile.*:Makefile 共用的通用規則、腳本等
    • kbuild Makefiles:各級子目錄下的  Makefile,相對簡單,被上一層 Makefile 調用來編譯當前目錄下的文件。

  頂層 Makefiles 讀取從uboot 配置程式中生成的 .config 文件  

1.3.2 文件關聯

  在上述的所有文件中,除了頂層的  Makefile,其他文件都或直接、或間接的和 它相關聯。這些關聯可以分為兩類:

(1)直接包含

  在一個文件中,用  include 來包含另外的文件

(2)間接包含

  使用 make -f 來調用,-f 是使用不同的  makefile 文件來進行 make 的選項。

1.4 make xxx_defconfig 命令執行分析

  由於 2018.03 的 uboot 版本中已經遺棄了 2440 所以我們選擇一塊其他開發板進行分析。

  執行命令:make smdkc100_defconfig V=1

  V = 1 的意思是打開編譯過程

  過程如下:

複製代碼
 1 make -f ./scripts/Makefile.build obj=scripts/basic
 2   cc -Wp,-MD,scripts/basic/.fixdep.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer      -o scripts/basic/fixdep scripts/basic/fixdep.c  
 3 rm -f .tmp_quiet_recordmcount
 4 make -f ./scripts/Makefile.build obj=scripts/kconfig smdkc100_defconfig
 5   cc -Wp,-MD,scripts/kconfig/.conf.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer    -D_GNU_SOURCE -DCURSES_LOC="<ncurses.h>" -DLOCALE   -c -o scripts/kconfig/conf.o scripts/kconfig/conf.c
 6   cat scripts/kconfig/zconf.tab.c_shipped > scripts/kconfig/zconf.tab.c
 7   cat scripts/kconfig/zconf.lex.c_shipped > scripts/kconfig/zconf.lex.c
 8   cat scripts/kconfig/zconf.hash.c_shipped > scripts/kconfig/zconf.hash.c
 9   cc -Wp,-MD,scripts/kconfig/.zconf.tab.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer    -D_GNU_SOURCE -DCURSES_LOC="<ncurses.h>" -DLOCALE  -Iscripts/kconfig -c -o scripts/kconfig/zconf.tab.o scripts/kconfig/zconf.tab.c
10   cc  -o scripts/kconfig/conf scripts/kconfig/conf.o scripts/kconfig/zconf.tab.o  
11 scripts/kconfig/conf  --defconfig=arch/../configs/smdkc100_defconfig Kconfig
12 #
13 # configuration written to .config
14 #
複製代碼

  

  這一項是生成了 scripts/basic/fixdep 工具

  

  這一項是生成了 scripts/kconfig/conf 工具

  

  最後執行 scripts/kconfig/conf 工具 生成.config

   可以知道 make xxx_defconfig 的執行主要分成三個部分:

  1. 執行 make -f ./scripts/Makefile.build obj=scripts/basic,編譯生成 scripts/basic/fixdep 工具
  2. 執行 make -f ./scripts/Makefile.build obj=scripts/kconfig rpi_3_32b_defconfig 編譯生成 scripts/kconfig/conf 工具
  3. 執行 scripts/kconfig/conf --defconfig=arch/../configs/xxx_defconfig Kconfig生成最終的 .config 配置文件

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在實際的web開發中,經常會遇到以下情況,導致給用不好的體驗:     a、程式未處理的異常,直接輸出顯示到用戶頁面     b、用戶訪問的資源不存在,直接顯示系統預設的404頁面     c、其它以下請求錯誤狀態的系統預設頁面(403等)   為了給用戶友好的體驗,在實際項目開發中, 需要對系統會... ...
  • SM4加密演算法實現Java和C#相互加密解密 近期由於項目需要使用SM4對數據進行加密,然後傳給Java後臺,Java後臺使用的也是SM4的加密演算法但是就是解密不正確,經過一步步調試發現Java中好多數據類型與C#的相同的數據類型是存在不同的比如:byte在Java中範圍是-127~128,而C#中 ...
  • 一、問題描述 InnerHTML 中文顯示為&#1052;&#1086;&#1076;&#1077;&#1083;&#1100; 二、解決方法 在初始化CQ對象前,先設置執行以下語句: CsQuery.Config.HtmlEncoder = CsQuery.HtmlEncoders.None; C... ...
  • Smobiler 4.4已經正式發佈,還不快來看看?原文地址:https://www.smobiler.com/portal.php?mod=view&aid=53這次更新要感謝我們的用戶,在使用smobiler的過程中不吝反饋,同時我們的程式員也及時響應用戶提出的新增、優化、修複等內容。 在這次更 ...
  • 開源且功能強大的C# 擴展方法類庫Pure.Ext (支持.Net Framework和.Net Core) ...
  • 在Linux系統中使用yum安裝軟體時,提示yum處於鎖定狀態 通過查詢得知,可能是系統內部在自動升級,可通過強制關閉yum進程 之後yum就可以正常使用了 ...
  • cat命令 作用:連接多個文件並且列印到屏幕輸出,或者重定向到其他文件,也可以用來查看顯示單個文件,或者多個文件。 格式: cat [option] [file] 1,最簡單的用法,直接跟文件名稱,查看文件內容 2,也可以使用如下方式,向文件寫入或者追加內容 3,-n與-b 都是對文件進行編號,-b ...
  • 偽靜態: 把動態網頁的請求方式偽裝成靜態網頁 要使用偽靜態技術,要在httpd.conf中啟用偽靜態模塊: 把前面的#號去掉 通常利用Apache的rewrite模塊對 URL 進行重寫的時候, rewrite規則會寫在 .htaccess 文件里。但要使 apache 能夠正常的讀取.htacce ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...