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-file
scripts/sign-file.c:25:30: fatal error: openssl/opensslv.h: No such file or directory
compilation terminated.
scripts/Makefile.host:95: recipe for target 'scripts/sign-file' failed
make[1]: *** [scripts/sign-file] Error 1
Makefile:1203: recipe for target 'scripts' failed
make: *** [scripts] Error 2
安装依赖
yum install openssl-devel -y
apt-get install libssl-dev
继续编译,提示: gelf.h: No such file or directory,缺少此头文件,使用如下命令
sudo apt-get install libelf-dev
继续编译了很久,出现Memory exhausted,内存用光,
网上搜了一下,可能是ulimit的设置问题,看了下自己的设置:用ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 20
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
用指令ulimit -s 16384 ,将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
改完后再次执行sudo make 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-2013.10_linux/bin/arm-linux-gnueabihf- LOCALVERSION= zImage
等待一段时间便可得到zImage