Beberapa petua yang anda mesti tahu semasa menyusun kernel Linux

Lepaskan: 2023-08-01 15:30:06
ke hadapan
1407 orang telah melayarinya

Petua1: Pilihan kompilasi silang

Kompilasi Linux, biasanya anda hanya perlu menjalankan make menuconfigKonfigurasikan modul yang hendak disusun, dan kemudian jalankanmake. Linux lalai kepada kompilasi tempatan, yang bermaksud menyusun kernel yang digunakan oleh mesin tempatan. make menuconfig配置要编译的模块,然后运行make。Linux默认是做本地编译,也就是编译位本机使用的内核。

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

make ARCH=arm CROSS_COMPILE=arm-linux-
Salin selepas log masuk

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

CROSS_COMPILE=arm-linux-

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

当然也可以直接修改Makefile中的ARCHCROSS_COMPILEDalam pembangunan terbenam, kompilasi silang selalunya diperlukan untuk melakukan kompilasi silang, anda perlu menggunakan Tambah definisi makro selepas arahan make, seperti penyusunan silang ke sasaran lengan:

make O=../build-kernel
Salin selepas log masuk
Salin selepas log masuk

ARCH=arm: Menunjukkan bahawa CPU sasaran ialah seni bina ARM🎜🎜< code style="font-size: 14px;overflow-wrap: break-word;padding: 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);"> CROSS_COMPILE=arm-linux- : 🎜🎜 menunjukkan bahawa rantai kompilasi silang yang digunakan dalam proses penyusunan ialah arm-linux🎜🎜Sudah tentu, anda juga boleh mengubah suai terus<code style="font-size: 14px;overflow-wrap: break -word;padding: 2px 4px dalam Makefile ;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 dan CROSS_COMPILE takrifan makro untuk mencapai kesan yang sama. Tetapi 🎜tidak disyorkan untuk mengubah suai Makefile secara terus🎜. 🎜

Tip2:源码与目标文件分离

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

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

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

make O=../build-kernel
Salin selepas log masuk
Salin selepas log masuk

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

Tip3:获得编译命令及选项

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

make V=1
Salin selepas log masuk

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

make V=2
Salin selepas log masuk

内核编译脚本

最后分享我常用的内核编译脚本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
Salin selepas log masuk

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

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

Atas ialah kandungan terperinci Beberapa petua yang anda mesti tahu semasa menyusun kernel Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:嵌入式Linux充电站
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan