Linux 커널 소스 코드가 많고 수천 가지 구성 옵션이 있으며 구성이 상당히 복잡합니다.
원하는 기능적 구성을 더 잘 선택할 수 있도록 Linux 커널 소스 코드는 구성 시스템을 구성합니다.
구성 시스템은 세 부분으로 구성됩니다.
Makefile
: 전체 구성 및 컴파일을 담당합니다Makefile
:负责整体的配置编译Kconfig
:配置选项的来源这个配置系统就是执行make menuconfig
显示的图形化界面:
内核配置选项的源文件是 Kconfig
文件;
主选项的配置源文件是:arch/$(ARCH)/Kconfig
Kconfig
: 구성 옵션 소스
make menuconfig
표시되는 그래픽 인터페이스: 🎜🎜🎜🎜🎜Kernel Kconfig 파일🎜🎜 🎜🎜Kconfig
파일; 🎜🎜주 옵션의 구성 소스 파일은 arch/$(ARCH)/Kconfig
파일 🎜; 🎜主Kconfig
文件调用其他目录的Kconfig文件,其他目录的Kconfig
文件又调用各级子目录的Kconfig
文件 , 形成树状的配置选项; Kconfig
文件调用其他目录的Kconfig
文件,其他目录的Kconfig
文件又调用各级子目录的Kconfig
文件,形成树状的配置选项;
例如: drivers/net/usb/Kconfig中,DM9601菜单:
config USB_NET_DM9601
是菜单项;菜单项下面的是菜单的属性;
菜单都是以config
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
文件,我们可以看到内容如下:
这里在配置中选上了”Davicom DM96xx based USB 10/100 ethernet device”
选项,在.config
文件中会生成“CONFIG_USB_NET_DM9601=y
의존
: 의존하는 옵션을 나타냅니다(이 옵션은 종속 옵션이 선택된 경우에만 선택할 수 있습니다) 🎜🎜select
: 이 항목의 선택을 나타냅니다. 메뉴 로딩 후 자동으로 선택된 메뉴🎜🎜도움말
: 도움말 텍스트; Kconfig 구문 세부 참조: Documentation/kbuild/kconfig-언어s.txt🎜
커널 구성이 완료된 후 커널 소스 코드의 최상위 디렉터리에 생성됩니다. .config파일
; 🎜
열기.config
파일을 보면 다음과 같이 내용을 볼 수 있습니다. 🎜
여기서 "Davicom DM96xx 기반 USB 10/100 이더넷 장치"
옵션, .config
파일은 "CONFIG_USB_NET_DM9601=y
" 구성 정보; 선택하지 않으면 "#"으로 주석 처리됩니다.🎜
및 좋아요 Kconfig
에는 최상위 수준과 각 수준에 Makefile
파일입니다. 그 기능은 다음과 같습니다: Kconfig
一样,顶层以及各子目录下都有一个Makefile
文件。其作用如下:
Makefile
负责配置编译整个linux内核;Makefile
读取.config
文件,根据.config
文件的配置选项编译内核;makfile
递归地遍历内核源码中的所有子目录,编译所有的目标文件;Mekefile
文件,这些Makefile
文件会使用.config
文件中的信息,编译相应的文件;Makefile
Makefile
은 전체 Linux 커널 구성 및 컴파일을 담당합니다.Makefile
read.config
파일, .config
커널 컴파일을 위한 파일 구성 옵션;makfile
은 커널 소스 코드의 모든 하위 디렉터리를 반복적으로 순회하고 모든 대상 파일을 컴파일합니다.Mekefile
파일, 이 Makefile
은 .config
파일의 정보는 해당 파일을 컴파일합니다.Makefile의 예
: 🎜obj-$(CONFIG_USB_NET_DM9601) += dm9601 .o
obj-$(CONFIG_USB_NET_DM9601) += dm9601.o
相当于:
obj-y += dm9601.o
obj-y
的意思是把dm9601.o
目标文件编译进内核,dm9601.o
目标文件应该从dm9601.c
或dm9601.S
文件中编译过来;obj-m
的意思是把目标文件编译成模块通常每个厂商都有自己的defconfig
文件,加载配置时只需执行make xxx_defconfig
,然后就会生成一个.config
obj-y += dm9601.o
🎜obj-y
적의의념思是把dm9601.o
目标文件编译进内核,dm9601.o
目标文件应该从dm9601.c
或dm9601.S
文件中编译过来;obj-m
心思是把目标文件编译成模块.config
文件,即代表加载完配置。🎜일상적인 개발 과정에서 수정.config
,通常也将.config
拷贝覆盖原来的xxx_defconfig
한 다음 코드를 업로드하세요.
위 내용은 Linux 드라이버 엔지니어가 알아야 할 커널 구성 지식의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!