> 운영 및 유지보수 > 리눅스 운영 및 유지 관리 > Linux 드라이버 엔지니어가 알아야 할 커널 구성 지식

Linux 드라이버 엔지니어가 알아야 할 커널 구성 지식

풀어 주다: 2023-07-31 15:51:41
앞으로
1538명이 탐색했습니다.

Linux 커널 구성 시스템의 구성

Linux 커널 소스 코드가 많고 수천 가지 구성 옵션이 있으며 구성이 상당히 복잡합니다.

원하는 기능적 구성을 더 잘 선택할 수 있도록 Linux 커널 소스 코드는 구성 시스템을 구성합니다.

구성 시스템은 세 부분으로 구성됩니다.

  • Makefile: 전체 구성 및 컴파일을 담당합니다
  • Makefile:负责整体的配置编译
  • Kconfig:配置选项的来源
  • 配置菜单
  • 这个配置系统就是执行make menuconfig显示的图形化界面:

    Linux 드라이버 엔지니어가 알아야 할 커널 구성 지식

    内核Kconfig文件

    Kconfig层级关系

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

    主选项的配置源文件是:arch/$(ARCH)/KconfigKconfig: 구성 옵션 소스

    🎜구성 메뉴🎜이 구성 시스템은 make menuconfig표시되는 그래픽 인터페이스: 🎜
    Linux 드라이버 엔지니어가 알아야 할 커널 구성 지식
    🎜🎜🎜🎜Kernel Kconfig 파일🎜🎜 🎜🎜

    🎜🎜Kconfig 계층적 관계🎜🎜

    🎜커널 구성 옵션의 소스 파일은Kconfig 파일; 🎜🎜주 옵션의 구성 소스 파일은 arch/$(ARCH)/Kconfig 파일 🎜; 🎜

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

    Kconfig语法介绍

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

    Linux 드라이버 엔지니어가 알아야 할 커널 구성 지식

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

    菜单都是以config

    Kconfig语법介绍

    例如: drivers/net/usb/Kconfig中,DM9601菜单:🎜
    Linux 드라이버 엔지니어가 알아야 할 커널 구성 지식
    🎜config USB_NET_DM9601菜单项; ㅋㅋㅋ , 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;단어 나누기: break-all;color: rgb(239, 112, 96);">config 开头,中间有空格,后면大写的就是菜单项。🎜
    • tristate : 프롬프트 정보를 나타냅니다. 구성 메뉴
    • tristate :表示提示信息,在配置菜单中显示的字符串
    • depends :表示依赖于的选项(依赖的选项选上,才能选这个选项)
    • select :表示本菜单选上后,自动选上的菜单
    • Help :帮助文字;

    Kconfig的语法详细参考:Documentation/kbuild/kconfig-languages.txt

    .config文件

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

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

    Linux 드라이버 엔지니어가 알아야 할 커널 구성 지식

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

    의존: 의존하는 옵션을 나타냅니다(이 옵션은 종속 옵션이 선택된 경우에만 선택할 수 있습니다) 🎜🎜select: 이 항목의 선택을 나타냅니다. 메뉴 로딩 후 자동으로 선택된 메뉴🎜🎜도움말 : 도움말 텍스트;

    Kconfig 구문 세부 참조: Documentation/kbuild/kconfig-언어s.txt🎜

    .config 파일 span>

    커널 구성이 완료된 후 커널 소스 코드의 최상위 디렉터리에 생성됩니다. .config파일; 🎜

    열기.config 파일을 보면 다음과 같이 내용을 볼 수 있습니다. 🎜

    Linux 드라이버 엔지니어가 알아야 할 커널 구성 지식

    여기서 "Davicom DM96xx 기반 USB 10/100 이더넷 장치" 옵션, .config 파일은 "CONFIG_USB_NET_DM9601=y" 구성 정보; 선택하지 않으면 "#"으로 주석 처리됩니다.🎜

    Kernel Makefile

    좋아요 Kconfig에는 최상위 수준과 각 수준에 Makefile 파일입니다. 그 기능은 다음과 같습니다: Kconfig一样,顶层以及各子目录下都有一个Makefile文件。其作用如下:

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

    Makefile

      최상위Makefile은 전체 Linux 커널 구성 및 컴파일을 담당합니다.
    • 상단Makefileread.config 파일, .config 커널 컴파일을 위한 파일 구성 옵션;
    • 상단makfile은 커널 소스 코드의 모든 하위 디렉터리를 반복적으로 순회하고 모든 대상 파일을 컴파일합니다.
    • 각 하위 디렉터리에는 Mekefile 파일, 이 Makefile.config파일의 정보는 해당 파일을 컴파일합니다.
    Makefile의 예: 🎜
    Linux 드라이버 엔지니어가 알아야 할 커널 구성 지식

    obj-$(CONFIG_USB_NET_DM9601) += dm9601 .oobj-$(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🎜
    • obj-y적의의념思是把dm9601.o目标文件编译进内核,dm9601.o目标文件应该从dm9601.cdm9601.S文件中编译过来;
    • obj-m 心思是把目标文件编译成模块

    加载内核配置적 방법

    🎜communications.com ="글꼴 크기: 14px; 패딩: 2px 4px; 테두리 반경: 4px; 여백 오른쪽: 2px; 여백 왼쪽: 2px; 배경 색상: rgba(27, 31, 35, 0.05); 글꼴 계열: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">defconfig文件,加载配置时只需执行make xxx_defconfig ,然后就会生成一个.config文件,即代表加载完配置。🎜

    일상적인 개발 과정에서 수정.config,通常也将.config拷贝覆盖原来的xxx_defconfig한 다음 코드를 업로드하세요.

    위 내용은 Linux 드라이버 엔지니어가 알아야 할 커널 구성 지식의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    관련 라벨:
    원천:嵌入式Linux充电站
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿