赞
踩
提示:LINUX内核4.19.163的交叉编译
root@ubuntu:/home/kunlun/linux-4.19.163# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.4-2ubuntu1~14.04.4' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.4)
root@ubuntu:/home/kunlun/linux-4.19.163#
export CROSS_COMPILE=x86_64-linux-gnu-
export ARCH=x86_64
# 当前目录下的 install目录
export INSTALL_PATH=$(pwd)/install
linux-4.19.163.tar.xz
链接:https://pan.baidu.com/s/1X012lYq1URRykqxA3Vg6yA
提取码:ykp9
sudo apt-get install libncurses5-dev libssl-dev
sudo apt-get install build-essential openssl
sudo apt-get install zlibc
sudo apt-get install libidn11-dev libidn11 libelf-dev bc
另一方式补充可能需要的lib
sudo apt-get install make gcc fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison
tar -xvf linux-4.19.163.xz
root@ubuntu:/home/kunlun/linux-4.19.163# sudo make mrproper
CLEAN scripts/basic
CLEAN scripts/genksyms
CLEAN scripts/kconfig
CLEAN scripts/mod
CLEAN scripts/selinux/genheaders
CLEAN scripts/selinux/mdp
CLEAN scripts
CLEAN include/config include/generated arch/x86/include/generated
CLEAN .config .config.old .version Module.symvers
root@ubuntu:/home/kunlun/linux-4.19.163#
#清理上一次产生的编译文件
root@ubuntu:/home/kunlun/linux-4.19.163# make clean
CLEAN .
CLEAN arch/x86/entry/vdso
CLEAN arch/x86/kernel/cpu
CLEAN arch/x86/kernel
CLEAN arch/x86/realmode/rm
CLEAN arch/x86/lib
CLEAN certs
CLEAN drivers/firmware/efi/libstub
CLEAN drivers/gpu/drm/radeon
CLEAN drivers/net/wan
CLEAN drivers/scsi/aic7xxx
CLEAN drivers/scsi
CLEAN drivers/tty/vt
CLEAN kernel/debug/kdb
CLEAN lib/raid6
CLEAN lib
CLEAN net/wireless
CLEAN security/apparmor
CLEAN security/selinux
CLEAN security/tomoyo
CLEAN usr
CLEAN arch/x86/boot/compressed
CLEAN arch/x86/boot
CLEAN arch/x86/tools
CLEAN .tmp_versions
root@ubuntu:/home/kunlun/linux-4.19.163#
#图像化配置.config界面,配置内核选项
root@ubuntu:/home/kunlun/linux-4.19.163# make menuconfig
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/mconf.o
YACC scripts/kconfig/zconf.tab.c
LEX scripts/kconfig/zconf.lex.c
HOSTCC scripts/kconfig/zconf.tab.o
HOSTCC scripts/kconfig/lxdialog/checklist.o
HOSTCC scripts/kconfig/lxdialog/inputbox.o
HOSTCC scripts/kconfig/lxdialog/menubox.o
HOSTCC scripts/kconfig/lxdialog/textbox.o
HOSTCC scripts/kconfig/lxdialog/util.o
HOSTCC scripts/kconfig/lxdialog/yesno.o
HOSTLD scripts/kconfig/mconf
scripts/kconfig/mconf Kconfig
回到主菜单,存一下你的.config文件,至此,内核配置结束
## 或者从当前机器的启动目录拷贝配置信息到源代码目录。这步操作的意思是我们编译内核的配置采用用当前环境一致的配置。
cp -v /boot/config-$(uname -r) .config
make oldconfig
输入命令make
或者使用-j参数,多线程编译:
make -j#
如make -j8,使用8线程编译
root@ubuntu:/home/kunlun/linux-4.19.163# make -j8
遇到问题
1 scripts/Makefile.host:90: recipe for target 'scripts/sign-file' failed
对‘OPENSSL_init_crypto’未定义的引用
/tmp/ccPH3fx1.o:在函数‘main’中:
extract-cert.c:(.text.startup+0x25):对‘OPENSSL_init_crypto’未定义的引用
extract-cert.c:(.text.startup+0x31):对‘OPENSSL_init_crypto’未定义的引用
collect2: error: ld returned 1 exit status
scripts/Makefile.host:90: recipe for target 'scripts/extract-cert' failed
make[1]: *** [scripts/extract-cert] Error 1
make[1]: *** 正在等待未完成的任务....
/tmp/ccJdcNg2.o:在函数‘main’中:
sign-file.c:(.text.startup+0x53):对‘OPENSSL_init_crypto’未定义的引用
sign-file.c:(.text.startup+0x5f):对‘OPENSSL_init_crypto’未定义的引用
sign-file.c:(.text.startup+0x76b):对‘OPENSSL_init_crypto’未定义的引用
collect2: error: ld returned 1 exit status
scripts/Makefile.host:90: recipe for target 'scripts/sign-file' failed
make[1]: *** [scripts/sign-file] Error 1
Makefile:1099: recipe for target 'scripts' failed
make: *** [scripts] Error 2
make: *** 正在等待未完成的任务....
查看文件scripts/sign-file.c ,里面依赖 openssl库
#include <openssl/opensslv.h>
#include <openssl/bio.h>
#include <openssl/evp.h>
#include <openssl/pem.h>
#include <openssl/err.h>
#include <openssl/engine.h>
我们之前安装了libssl-dev openssl ,但是编译时候没有找到,查看编译scripts目录下的Makefile :
有如下配置:
HOSTLDLIBS_sign-file = -lcrypto
HOSTLDLIBS_extract-cert = -lcrypto
这是编译 sign-file 依赖crypto库
终端输入命令 pkg-config --list-all |grep crypto 查看
root@ubuntu:/home/kunlun/linux-4.19.163# pkg-config --list-all |grep crypto
libssl GmSSL-libssl - Secure Sockets Layer and cryptography libraries
openssl GmSSL - Secure Sockets Layer and cryptography libraries and tools
libcrypto GmSSL-libcrypto - GmSSL cryptography library
root@ubuntu:/home/kunlun/linux-4.19.163#
然后输入命令:
pkg-config --libs libcrypto
输出:
-L/usr/local/lib -lcrypto
root@ubuntu:/home/kunlun/linux-4.19.163# pkg-config --libs libcrypto
-L/usr/local/lib -lcrypto
root@ubuntu:/home/kunlun/linux-4.19.163#
把这句话,复制替换scripts目录下的Makefile :
HOSTLDLIBS_sign-file = -L/usr/local/lib -lcrypto
HOSTLDLIBS_extract-cert = -L/usr/local/lib -lcrypto
重新执行 make 命令,成功解决。
注意:如果没有安装crypto库,用命令安装apt-get install libcrypto
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。