ホームページ >運用・保守 >Linuxの運用と保守 >Linux カーネルをコンパイルするときに知っておくべきいくつかのヒント

Linux カーネルをコンパイルするときに知っておくべきいくつかのヒント

嵌入式Linux充电站
嵌入式Linux充电站転載
2023-08-01 15:30:061445ブラウズ

ヒント 1: クロスコンパイル オプション

Linux をコンパイルします。通常は、make menuconfig を実行するだけです。 コンパイルするモジュールを構成し、make を実行します。 Linux のデフォルトはローカル コンパイルです。これは、ローカル マシンで使用されるカーネルをコンパイルすることを意味します。

組み込み開発では、クロス コンパイルが必要になることがよくあります。クロス コンパイルを行うには、make コマンドの後にマクロ定義を追加する必要があります。たとえば、arm ターゲットにクロス コンパイルします:

make ARCH=arm CROSS_COMPILE=arm-linux-

ARCH=arm: ターゲット CPU が ARM アーキテクチャであることを示します。

CROSS_COMPILE=arm-linux-:

は、コンパイル プロセスで使用されるクロス コンパイル チェーンは arm-linux

です。もちろん、ARCHCROSS_COMPILE を直接変更することもできます。 Makefile のマクロ定義これにより、同じ効果が得られます。ただし、 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は嵌入式Linux充电站で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。