Linux 커널을 컴파일할 때 알아야 할 몇 가지 팁

풀어 주다: 2023-08-01 15:30:06
앞으로
1388명이 탐색했습니다.

Tip1: 크로스 컴파일 옵션

Linux를 컴파일합니다. 일반적으로 make menuconfig컴파일할 모듈을 구성한 후make. Linux는 기본적으로 로컬 컴파일을 사용합니다. 이는 로컬 컴퓨터에서 사용되는 커널을 컴파일하는 것을 의미합니다. make menuconfig配置要编译的模块,然后运行make。Linux默认是做本地编译,也就是编译位本机使用的内核。

在嵌入式开发中,经常需要交叉编译,要做交叉编译的话,需要在make命令后加上宏定义,如交叉编译为arm目标:

make ARCH=arm CROSS_COMPILE=arm-linux-
로그인 후 복사

ARCH=arm:表示目标CPU为ARM架构

CROSS_COMPILE=arm-linux-

表示编译过程使用的交叉编译链为arm-linux

当然也可以直接修改Makefile中的ARCHCROSS_COMPILE임베디드 개발에서는 크로스 컴파일이 필요한 경우가 많습니다. 크로스 컴파일을 하려면 make 후 매크로 정의 추가 명령(예: arm 대상에 대한 크로스 컴파일):

make O=../build-kernel
로그인 후 복사
로그인 후 복사

ARCH=arm: 대상 CPU가 ARM 아키텍처🎜🎜< 코드 스타일="글꼴 크기: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;배경색 : rgba(27, 31 , 35, 0.05); 글꼴 계열: "Operator Mono", Consolas, Monaco, Menlo, monospace; 단어 나누기: break-all;color: rgb(239, 112, 96);"> CROSS_COMPILE=arm-linux- : 🎜🎜는 컴파일 프로세스에 사용되는 크로스 컴파일 체인이 arm-linux🎜🎜물론 직접 수정할 수도 있습니다<code style="font-size: 14px;overflow-wrap: break -word;padding: Makefile의 2px 4px ;border-radius: 4px;margin-right: 2px;margin-left: 2px; background-color: rgba(27, 31, 35, 0.05);font-family : "Operator Mono", Consolas, Monaco, Menlo, monospace ;word-break: break-all;color: rgb(239, 112, 96);">ARCH 및 CROSS_COMPILE 매크로 정의를 사용하면 동일한 효과를 얻을 수 있습니다. 하지만 🎜Makefile을 직접 수정하는 것은 권장되지 않습니다🎜. 🎜

Tip2:源码与目标文件分离

Linux内核编译过程会产生很多的文件,包括目标文件、临时文件等等,默认情况下,编译生成的文件会存放在内核源码目录

当你使用git status显示自己对内核代码的修改时也会把这些临时文件显示出来,而且提交还必须一个文件一个文件地指定,相当麻烦。

因此我们可以在父目录创建一个存放编译文件的目录,如build-kernel,然后再make 命令后面加上宏定义:

make O=../build-kernel
로그인 후 복사
로그인 후 복사

这样在编译Linux内核时,所有编译产生的文件,都会放在build-kernel目录,如果build-kernel目录不存在,也会自动创建。这样可以实现Linux内核源码与编译产生的文件分离。

Tip3:获得编译命令及选项

编译linux时,默认不会显示编译的命令,如果你要获得编译命令及其选项,可以在make命令后面加上宏定义:

make V=1
로그인 후 복사

如果希望编译系统告诉你为何某个目标文件需要重新编译,则:

make V=2
로그인 후 복사

内核编译脚本

最后分享我常用的内核编译脚本mk.sh,给大家参考:

#!/bin/sh

export ARCH=arm
export PATH=~/toolchain/arm_glibc/host/bin:$PATH
export CROSS_COMPILE=arm-linux-gnu-

#make O=../bd defconfig
make O=../bd menuconfig -j32
make O=../bd dtbs

#反汇编
$(CROSS_COMPILE)objdump -d ../bd/vmlinux > ../image/vmlinux_dump.txt

#生成uImage
../ubd/tools/mkimage -A arm -T kernel -C none -O linux -a 0x80200000 -e 0x80200000 -n "debug kernel" -d ../bd/Image ../image/uImage
로그인 후 복사

其中,make O=../bd defconfig只有在第一次编译内核的才使用,第一次编译过后,将这句注释,后面都通过make menuconfig修改内核配置。

objdump反汇编对大多数人来说可能用不上,一般在内核移植、启动分析时比较有用,但由于工作需要,我通常都会把反汇编加上。

위 내용은 Linux 커널을 컴파일할 때 알아야 할 몇 가지 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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