linux kernel 编译报错,执行make menuconfig,报错如下:
HOSTCC scripts/basic/fixdep
UPD scripts/kconfig/mconf-cfg
HOSTCC scripts/kconfig/mconf.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
HOSTCC scripts/kconfig/confdata.o
HOSTCC scripts/kconfig/expr.o
LEX scripts/kconfig/lexer.lex.c
/bin/sh: 1: flex: not found
scripts/Makefile.host:9: recipe for target 'scripts/kconfig/lexer.lex.c' failed
make[1]: *** [scripts/kconfig/lexer.lex.c] Error 127
Makefile:616: recipe for target 'menuconfig' failed
make: *** [menuconfig] Error 2
原因:
缺少库
解决:
sudo apt-get install flex
sudo apt-get install bison
安装好后再次编译,编译的时候会弹出 Linux 图形配置界面
不作任何的配置,直接按两下ESC键退出,退出后会自动开始编译linux,但是并不顺利,提示:
再执行make,提示
HOSTCC scripts/sign-filescripts/sign-file.c:25:30: fatal error: openssl/opensslv.h: No such file or directorycompilation terminated.scripts/Makefile.host:95: recipe for target 'scripts/sign-file' failedmake[1]: *** [scripts/sign-file] Error 1Makefile:1203: recipe for target 'scripts' failedmake: *** [scripts] Error 2
解决方案
安装依赖
Centos/RedHat/Fedora
yum install openssl-devel -y
Ubuntu/Debian
apt-get install libssl-dev
继续编译,提示:gelf.h: No such file or directory,缺少此头文件,使用如下命令
sudo apt-get install libelf-dev
继续编译了很久,出现Memory exhausted,内存用光,
网上搜了一下,可能是ulimit的设置问题,看了下自己的设置:用ulimit-a
corefilesize(blocks,-c)0
datasegsize(kbytes,-d)unlimited
schedulingpriority(-e)20
filesize(blocks,-f)unlimited
pendingsignals(-i)16382
maxlockedmemory(kbytes,-l)64
maxmemorysize(kbytes,-m)unlimited
openfiles(-n)1024
pipesize(512bytes,-p)8
POSIXmessagequeues(bytes,-q)819200
real-timepriority(-r)0
stacksize(kbytes,-s)8192
cputime(seconds,-t)unlimited
maxuserprocesses(-u)unlimited
virtualmemory(kbytes,-v)unlimited
filelocks(-x)unlimited
用指令ulimit-s16384,将stack size调整了下,重新link。
对于 Intel 的 SoC FPGA 芯片, Linux 源码中已经提供好了一个名为socfpga_defconfig 的配置文件,我们对内核的配置和修改,建议基于此配置文件进行,因此在进行配置前,需要先将该配置文件导入到默认配置文件.config中,操作方法很简单。
在终端输入 make socfpga_defconfig 命令来选择厂家提供的基本配置设置,但是出现这个错误:
*** Can't find default configuration "arch/x86/configs/socfpga_defconfig"!
***
scripts/kconfig/Makefile:94: recipe for target 'socfpga_defconfig' failed
make[1]: *** [socfpga_defconfig] Error 1
Makefile:616: recipe for target 'socfpga_defconfig' failed
make: *** [socfpga_defconfig] Error 2
这个问题常见在没有设置好架构的makefile中,当makefile没有指定架构时,会使用host机架构
解决方法:
修改顶层Makefile文件
vi Makefile
将语句
ARCH?=$(SUBARCH)
改为
ARCH?= arm
改完后再次执行sudomake socfpga_defconfig 得到如图所示结果
执行sudo make ARCH=arm menuconfig 进行内核配置, 根据需要进行配置,我这里选择不作修改,直接点两次Esc键退出
#编译,修改CROSS_COMPILE后的地址,指定编译器路径
sudo make ARCH=arm CROSS_COMPILE=/home/uno/fandy/linux/socfpga_buildroot/gcc-linaro-arm-linux-gnueabihf-4.8-.10_linux/bin/arm-linux-gnueabihf- LOCALVERSION= zImage
等待一段时间便可得到zImage