LINUX内核4.19.163的交叉编译

LINUX内核4.19.163的交叉编译:

提示:LINUX内核4.19.163的交叉编译

配置:

  • 1 配置交叉编译器

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#
  • 2 配置交叉编译器前缀
export CROSS_COMPILE=x86_64-linux-gnu-
  • 3 配置目标平台架构
export ARCH=x86_64
  • 4 配置安装目录,默认 /boot目录(可选步骤)
# 当前目录下的 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

  • 解压源码linux-4.19.163内核源码:
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
  • 把之前的.config文件update为当前的版本
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:/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:/home/kunlun/linux-4.19.163# 

在这里插入图片描述

然后输入命令: 
pkg-config --libs libcrypto
输出:
-L/usr/local/lib -lcrypto

root:/home/kunlun/linux-4.19.163# pkg-config --libs libcrypto
-L/usr/local/lib -lcrypto  
root:/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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华为奋斗者精神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值