當前位置:首頁 » 操作系統 » linux內核宏

linux內核宏

發布時間: 2023-08-17 05:10:50

linux 內核是什麼, 本人有linux基礎

Linux內核:Linux是一種開源電腦操作系統內核。它是一個用C語言寫成,符合POSIX標準的類Unix操作系統。Linux最早是由芬蘭Linus Torvalds為嘗試在英特爾x86架構上提供自由的類Unix操作系統而開發的。該計劃開始於1991年,在計劃的早期有一些Minix 黑客提供了協助,而今天全球無數程序員正在為該計劃無償提供幫助。

Linux最早是由芬蘭人Linus Torvalds設計的。當時由於UNⅨ的商業化,Andrew Tannebaum教授開發了Minix操作系統以便於不受AT&T許可協議的約束,為教學科研提供一個操作系統。

(1)linux內核宏擴展閱讀:

Linux將標準的GNU許可協議改稱Copyleft,以便與Copyright相對照。通用的公共許可(GPL)允許用戶銷售、拷貝和改變具有Copyleft的應用程序。當然這些程序也可以是Copyright的,但是你必須允許進一步的銷售、拷貝和對其代碼進行改變,同時也必須使他人可以免費得到修改後的源代碼。事實證明,GPL對於Linux的成功起到了極大的作用。它啟動了一個十分繁榮的商用Linux階段,還為編程人員提供了一種凝聚力,誘使大家加入這個充滿了慈善精神的Linux運動。

㈡ Linux內核根目錄中的配置文件.config中包含了許多宏定義,

一、Linux內核的配置系統由三個部分組成,分別是:
1、Makefile:分布在 Linux 內核源代碼根目錄及各層目錄中,定義 Linux 內核的編譯規則;
2、配置文件(config.in(2.4內核,2.6內核)):給用戶提供配置選擇的功能;
3、配置工具:包括配置命令解釋器(對配置腳本中使用的配置命令進行解釋)和配置用戶界面(提供基於字元界面、基於 Ncurses 圖形界面以及基於 Xwindows 圖形界面的用戶配置界面,各自對應於 Make config、Make menuconfig 和 make xconfig)。這些配置工具都是使用腳本語言,如 Tcl/TK、Perl 編寫的(也包含一些用 C 編寫的代碼)。本文並不是對配置系統本身進行分析,而是介紹如何使用配置系統。所以,除非是配置系統的維護者,一般的內核開發者無須了解它們的原理,只需要知道如何編寫 Makefile 和配置文件就可以。

二、Make menuconfig過程分析

1、scripts文件夾存放的是跟make menuconfig配置界面的圖形繪制相關的文件,我們作為使用者無需關心這個文件夾的內容
2、讀取arch/arch/$ARCH/Kconfig以及各子目錄下的Kcondig文件,生成配置條目。
$ARCH由linux內核根目錄下的makefile文件決定
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
Kconfig文件中為配置信息的宏定義,與我們在make menuconfig圖形界面看到的信息一致。
例如:
config CPU_S3C2410_DMA
bool
depends on S3C2410_DMA && (CPU_S3C2410 || CPU_S3C2442)
default y if CPU_S3C2410 || CPU_S3C2442
help
DMA device selection for S3C2410 and compatible CPUs
因此,Kconfig文件很重要的作用就是:定義配置宏、相關依賴關系、幫助信息
3、讀取內核根目錄下.config文件,生成配置選項:[*]編譯進內核 [M]編譯為模塊 [ ]不編譯
arch/arm/configs/文件夾下存放了一些配置模板
我們可以通過cp /arch/arm/configs/xx_defconfig .config來使用這些配置模板
通過圖形界面變更配置選項會自動更新到.config文件中
make disclean 會刪除.config
4、編譯過程根據.config生成 Linux內核根目錄下的 include/config/auto.conf文件
CONFIG_EEPROM_93CX6=m
CONFIG_DM9000=y
根目錄Makefile以及子目錄的Makefile根據auto.conf生成編譯條件
obj-$(CONFIG_DM9000) += dm9000.o //obj-m += dm9000.o
5、編譯過程根據.config生成Linux內核根目錄下的 include/linux/autoconf.h文件
.config 或 auto.conf 中定義要編譯為 m 模塊的項,如:
CONFIG_DEBUG_NX_TEST=m
在 autoconf.h 中會被定義為:
#define CONFIG_DEBUG_NX_TEST_MODULE 1

.config或auto.conf 中定義為編譯為 y 的選項,如:
CONFIG_DM9000= y
在 autoconf.h 中會被定義為:
#define CONFIG_DM9000 1
autoconf.h中是.config或者auto.conf中配置信息的另一種體現形式,它是站在源碼的角度,供源碼使用的C語言宏定義。
6、總結
我們在使用make menuconfig時,首先會確定架構arch,然後讀取arch目錄的Kconfig中的配置宏定義,生成編譯條目,然後讀取Linux內核根目錄下的.config選項, 將.config中的配置信息顯示在圖形界面上[*] [M] or []。我們在圖形界面中更改配置選項會自動保存到.config文件中。編譯過程根據.config隨後生成auto.conf文件,它決定了makefile中各個文件的編譯類型,靜態編譯進內核、編譯成模塊、不編譯;同時生成autoconf.h,它以C語言宏定義的形式表達了 各個文件是否被編譯,源碼中會判斷某文件是否被編譯進行不同的處理。

三、將自定義文件添加進內核配置系統
1、修改文件目錄下Kconfig文件
添加:
config HELLO
tristate "just a test hello"
default y
---help---
This is a test
//tristate 或 bool 表示可選擇種類數量3[*][M][ ]、2
// "just a test hello"將作為標題顯示在配置的圖形界面
2、修改文件目錄下makefile文件
obj-$(CONFIG_HELLO) += hello_drv.o
3、make menuconfig 我們會在字元設備驅動的界面看到 ust a test hello 並且默認編譯進內核

4、make編譯內核發現
autoconfig.h 自動添加 #define CONFIG_HELLO 1
auto.conf 自動添加 CONFIG_HELLO=y

㈢ 什麼是微內核和宏內核

微內核是將服務轉移到進程上的一種內核模式。宏內核是一種傳統的內核結構,它將進程管理,內存管理等各項服務功能都放到內核中去,通常用在通用式的內核上,如unix,linux等。

兩個系統的內核是通過進程的創建FORK的實現來比較,因為進程的創建涉及到系統調用,內存管理,文件管理等系統的主要方面。因此通過比較FORK的實現可以大致看到內核的差別。

微內核的代表:Minix,在Minix中,操作系統的內核,內存管理,系統管理都有自己的進程表,每個部分的表包含了自己需要的域。表象是精確對應的,為了保持同步,在進程創建或結束時,這三個部分都要更新各自的表。

結構

微內核是內核的一種精簡形式。將通常與內核集成在一起的系統服務層被分離出來,變成可以根據需求加入的選件,這樣就可提供更好的可擴展性和更加有效的應用環境。使用微內核設計,對系統進行升級,只要用新模塊替換舊模塊,不需要改變整個操作系統。

可以用商業對比來解釋微內核的模塊概念。考慮一個過度忙碌的商務經理。通過將工作分給其他人,這位經理可以將他的能力更有效地用於重要的商務工作中去,並集中於其他一些任務,例如開辟新的商務分支等。

以上內容參考:網路-微內核

㈣ Linux內核__setup()宏介紹

Linux 內核中可使用宏 __setup() 處理內核的啟動參數 cmdline 的解析。

文件: include/linux/init.h

定義:

通過宏展開可以看出:宏 __setup() 主要是仿灶孝定義了一個 obs_kernel_param 類型的結構體變數 __setup_fn 。

以 RockPI 4A 單板 Debian 系統 Linux 4.4 內核為例,介紹 init 參數的解析方法。

1、cmdline參數

在 Debian 系統中,通過 extlinux.conf 文件傳遞啟動參數,其中 init=/sbin/init ,如下:

2、__setup()宏辯搏定義

在 Linux 內核中,解析 init 參數的 __setup() 實現如下:

3、__setup()宏展開

展開宏 __setup("init=", init_setup) ,即:

內核編譯完成後,在內核符號表 System.map 文件中,可以看到 __setup_init_setup :

4、函數調用流程

內備稿核啟動後, init_setup() 函數的調用流程如下:

㈤ 什麼是linux kernel有什麼作用

Linux內核(英語:Linux kernel)是一種開源的類Unix操作系統宏內核。

工作於平板電腦、智能手機及智能手錶的Android操作系統同樣通過Linux內核提供的服務完成自身功能。

一個計算機系統是一個硬體和軟體的共生體,它們互相依賴,不可分割。計算機的硬體,含有外圍設備、處理器、內存、硬碟和其他的電子設備組成計算機的發動機。但是沒有軟體來操作和控制它,自身是不能工作的。

完成這個控制工作的軟體就稱為操作系統,在Linux的術語中被稱為「內核」,也可以稱為「核心」。Linux內核的主要模塊(或組件)分以下幾個部分:存儲管理、CPU和進程管理、文件系統、設備管理和驅動、網路通信,以及系統的初始化(引導)、系統調用等。

整個Linux操作系統家族基於該內核部署在傳統計算機平台(如個人計算機和伺服器,以Linux發行版的形式)和各種嵌入式平台,如路由器、無線接入點、專用小交換機、機頂盒、FTA接收器、智能電視、數字視頻錄像機、網路附加存儲(NAS)等。

工作於平板電腦、智能手機及智能手錶的Android操作系統同樣通過Linux內核提供的服務完成自身功能。盡管於桌面電腦的佔用率較低,基於Linux的操作系統統治了幾乎從移動設備到主機的其他全部領域。截至2017年11月,世界前500台最強的超級計算機全部使用Linux。

(5)linux內核宏擴展閱讀:

編程語言

Linux是用C語言中的GCC版(這種C語言有對標准C進行擴展)寫的,還有幾個用匯編語言(用的是GCC的"AT&T風格")寫的目標架構短段。因為要支持擴展的C語言,GCC在很長的時間里是唯一一個能正確編譯Linux的編譯器。

有許多其他的語言用在一些方面上,主要集中在內核構建過程中(這里指從源代碼創建可引導鏡像)。包括Perl、Python和多種腳本語言。有一些驅動可能是用C++、Fortran或其他語言寫的,但是這樣是強烈不建議的。

編譯器兼容性

GCC是Linux內核源代碼的預設編譯器。在2004年,Intel主張通過修改內核,以便Intel C++編譯器能正確編譯內核。在2009年,有通過修改內核2.6.22版而成功編譯的報告(並帶來平均8-9%性能增長)。

自從2010年,已經開始進行使用Clang建造Linux內核的努力,Clang是一個可作為替代的C語言編譯器;截止2014年4月12日,官方內核幾乎可以完全用Clang編譯。致力於這個目標的計劃叫做「LLVMLinux」,得名於Clang所基於的LLVM編譯器下部構造。

LLVMLinux不意圖復制Linux內核或LLVM,因此它是由最終提交給上游計劃的補丁構成的一個元計劃。使Linux內核可以用Clang編譯最大的好處是比GCC有更快的編譯速度,內核開發者可以得益於由此而來的更快的工作流程

熱點內容
劇本的分鏡頭腳本 發布:2025-03-10 22:25:39 瀏覽:800
javachar轉string 發布:2025-03-10 22:24:58 瀏覽:164
手游吃雞配置低如何調順暢畫質 發布:2025-03-10 22:20:49 瀏覽:766
sql標數 發布:2025-03-10 22:20:49 瀏覽:655
如何用伺服器搭雲 發布:2025-03-10 22:20:48 瀏覽:268
linux線程間通信 發布:2025-03-10 22:15:02 瀏覽:853
python線程數量控制 發布:2025-03-10 22:14:28 瀏覽:451
壓縮軟體流程 發布:2025-03-10 22:00:43 瀏覽:301
安卓哪個國家的品牌好 發布:2025-03-10 21:53:16 瀏覽:12
ftp字元集錦 發布:2025-03-10 21:37:00 瀏覽:77