Kompilasi Linux, biasanya anda hanya perlu menjalankan make menuconfig
Konfigurasikan 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-
ARCH=arm
:表示目标CPU为ARM架构
CROSS_COMPILE=arm-linux-
:
表示编译过程使用的交叉编译链为arm-linux
当然也可以直接修改Makefile
中的ARCH
和CROSS_COMPILE
Dalam 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
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🎜. 🎜Linux内核编译过程会产生很多的文件,包括目标文件、临时文件等等,默认情况下,编译生成的文件会存放在内核源码目录。
当你使用git status
显示自己对内核代码的修改时也会把这些临时文件显示出来,而且提交还必须一个文件一个文件地指定,相当麻烦。
因此我们可以在父目录创建一个存放编译文件的目录,如build-kernel
,然后再make
命令后面加上宏定义:
make O=../build-kernel
这样在编译Linux内核时,所有编译产生的文件,都会放在build-kernel目录,如果build-kernel目录不存在,也会自动创建。这样可以实现Linux内核源码与编译产生的文件分离。
编译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
反汇编对大多数人来说可能用不上,一般在内核移植、启动分析时比较有用,但由于工作需要,我通常都会把反汇编加上。
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!