Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Kernel-Konfigurationskenntnisse, die ein Linux-Treiberingenieur kennen muss

Kernel-Konfigurationskenntnisse, die ein Linux-Treiberingenieur kennen muss

嵌入式Linux充电站
嵌入式Linux充电站nach vorne
2023-07-31 15:51:411494Durchsuche

Zusammensetzung des Linux-Kernel-Konfigurationssystems

Es gibt viele Linux-Kernel-Quellcodes mit Tausenden von Konfigurationsoptionen, und die Konfiguration ist ziemlich kompliziert.

Um die gewünschte Funktionskonfiguration besser auswählen zu können, organisiert der Linux-Kernel-Quellcode ein Konfigurationssystem.

Das Konfigurationssystem besteht aus drei Teilen:

  • Makefile: Verantwortlich für die Gesamtkonfiguration und Kompilierung
  • Makefile:负责整体的配置编译
  • Kconfig:配置选项的来源
  • 配置菜单
  • 这个配置系统就是执行make menuconfig显示的图形化界面:

    Kernel-Konfigurationskenntnisse, die ein Linux-Treiberingenieur kennen muss

    内核Kconfig文件

    Kconfig层级关系

    内核配置选项的源文件是 Kconfig文件;

    主选项的配置源文件是:arch/$(ARCH)/KconfigKconfig: Quelle der Konfigurationsoptionen

    🎜Konfigurationsmenü🎜Dieses Konfigurationssystem soll make menuconfigDie angezeigte grafische Oberfläche: 🎜
    Kernel-Konfigurationskenntnisse, die ein Linux-Treiberingenieur kennen muss
    🎜🎜🎜🎜Kernel-Kconfig-Datei🎜🎜 🎜🎜

    🎜🎜Kconfig-Hierarchie🎜🎜

    🎜Die Quelldatei der Kernel-Konfigurationsoptionen ist Kconfig-Datei; 🎜🎜Die Konfigurationsquelldatei der Hauptoption ist: arch/$(ARCH)/Kconfig Datei 🎜; 🎜

    Kconfig文件,其他目录的Kconfig文件又调用各级子目录的Kconfig文件,形成树状的配置选项;Kconfig文件调用其他目录的Kconfig文件,其他目录的Kconfig文件又调用各级子目录的Kconfig文件,形成树状的配置选项;

    Kconfig语法介绍

    例如: drivers/net/usb/Kconfig中,DM9601菜单:

    Kernel-Konfigurationskenntnisse, die ein Linux-Treiberingenieur kennen muss

    config USB_NET_DM9601菜单项;菜单项下面的是菜单的属性

    菜单都是以config

    Kconfig语法介绍

    例如: drivers/net/usb/Kconfig中,DM9601菜单:🎜
    Kernel-Konfigurationskenntnisse, die ein Linux-Treiberingenieur kennen muss
    🎜config USB_NET_DM9601菜单项;菜单项下面的是菜单的属性;🎜 🎜菜单都是以config 开头,中间有空格,后面大写的就是菜单项.🎜
    • Konfigurationsmenü
    tristate :表示提示信息,在配置菜单中显示的字符串
  • depends :表示依赖于的选项(依赖的选项选上,才能选这个选项)
  • select :表示本菜单选上后,自动选上的菜单
  • Help :帮助文字;
  • Kconfig的语法详细参考:Documentation/kbuild/kconfig-languages.txt

    .config文件

    内核配置完毕之后,会在内核源码的顶层目录下生成.config文件

    打开.config文件,我们可以看到内容如下:

    Kernel-Konfigurationskenntnisse, die ein Linux-Treiberingenieur kennen muss

    这里在配置中选上了”Davicom DM96xx based USB 10/100 ethernet device”选项,在.config文件中会生成“CONFIG_USB_NET_DM9601=y

    hängt davon ab: Zeigt Optionen an, die davon abhängen (diese Option kann nur ausgewählt werden, wenn die abhängige Option ausgewählt ist) 🎜🎜Hilfe : Hilfetext;

    Detaillierte Referenz zur Kconfig-Syntax: Documentation/kbuild/kconfig-linguals.txt🎜

    .config-Datei span>

    Nachdem die Kernelkonfiguration abgeschlossen ist, wird Erzeugt im obersten Verzeichnis des Kernel-Quellcodes Kernel-Konfigurationskenntnisse, die ein Linux-Treiberingenieur kennen muss

    Hier ist "Davicom DM96xx based USB 10/100 ethernet device" Option, in .config-Datei generiert „CONFIG_USB_NET_DM9601=y" Konfigurationsinformationen; wenn nicht ausgewählt, werden sie mit „#“;🎜 auskommentiert

    Kernel Makefile

    und Makefile Datei. Seine Funktion ist wie folgt: Kconfig一样,顶层以及各子目录下都有一个Makefile文件。其作用如下:

    • 顶层Makefile负责配置编译整个linux内核;
    • 顶层Makefile读取.config文件,根据.config文件的配置选项编译内核;
    • 顶层makfile递归地遍历内核源码中的所有子目录,编译所有的目标文件;
    • 每个子目录下都有Mekefile文件,这些Makefile文件会使用.config文件中的信息,编译相应的文件;

    Makefile

      Oberste EbeneMakefile ist für die Konfiguration und Kompilierung des gesamten Linux-Kernels verantwortlich;
    • TopMakefileread.config-Datei, gemäß .config Dateikonfigurationsoptionen zum Kompilieren des Kernels;
    • Obenmakfile durchläuft rekursiv alle Unterverzeichnisse im Kernel-Quellcode und kompiliert alle Zieldateien;
    • Jedes Unterverzeichnis hat Mekefile Dateien, diese Makefile verwendet .configDie Informationen in der Datei kompilieren die entsprechende Datei;

    Beispiel im Makefile: 🎜
    Kernel-Konfigurationskenntnisse, die ein Linux-Treiberingenieur kennen muss

    obj-$(CONFIG_USB_NET_DM9601) += dm9601.o

    相当于:

    obj-y += dm9601.o

    • obj-y的意思是把dm9601.o目标文件编译进内核,dm9601.o目标文件应该从dm9601.cdm9601.S文件中编译过来;
    • obj-m 的意思是把目标文件编译成模块

    加载内核配置的方法

    通常每个厂商都有自己的defconfig文件,加载配置时只需执行make xxx_defconfig,然后就会生成一个.config

    相当于:🎜🎜
  • obj-y的意思是把dm9601.o目标文件编译进内核,dm9601.o目标文件应该从dm9601.cdm9601.S文件中编译过来;
  • obj-m 的意思是把目标文件编译成模块
  • 加载内核配置的方法

    🎜通常每个厂商都有自己的defconfig</codestil>
    文件,加载配置时只需执行make xxx_defconfig,然后就会生成一个.config文件,即代表加载完配置。🎜

    Nehmen Sie im täglichen Entwicklungsprozess Änderungen vor .config,通常也将.config拷贝覆盖原来的xxx_defconfig und laden Sie dann den Code hoch.

    Das obige ist der detaillierte Inhalt vonKernel-Konfigurationskenntnisse, die ein Linux-Treiberingenieur kennen muss. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:嵌入式Linux充电站. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen