Can't use 'defined(@array)' (Maybe you should just omit the defined()?)内核编译

内核编译总流程

1.解压内核源码

tar --xjf linux-2.6.22.6.tar.bz2

2.打补丁

patch -p1 < ../linux-2.6.22.6_jz2440.patch //在内核文件的根目录下打

3.配置

  1. 使用默认配置,在上面修改。 在arch/arm/configs中找到相似的配置文件 xx_defconfig,然后执行 make xxx_defconfig,保存在.config中,再执行make menuconfig(直接执行改的东西太多),此时也会去读取.config,这样配置就会少很多配置项。
  2. 使用的厂家提供的配置文件 config_厂家,直接把这个文件改名为.config,然后再去执行 make menuconfig。百文网提供的config_厂家配置文件,在Linux的根目录下,叫config_ok,直接cp config_ok .config就可以了,之后不需要再配置任何东西,也不需要去make menuconfig里面配置,如果需要对某些模块做裁剪,也是可以到menuconfig中配置
  3. 如果要换某一个模块的驱动,把对应的.c文件换到driver/*对应的文件下,并且修改该文件下的Makefile,把对应模块的名字换成自己的.c的名字。
    如换lcd驱动,把lcd.c拷贝到driver/video文件下,把Makefile中
#obj-$(CONFIG_FB_S3C2410)         += s3c2410fb.o   这个改为下面的
obj-$(CONFIG_FB_S3C2410)          += lcd.o

4.编译
make uImage
uImage是 头部+kernel,编译成功后,uImage放在arch/arm/boot中
注意:
看是否生成了uImage,如果未生成表示没有mkimage工具,在 u-boot 源码下 tools 目录里有mkimage。把 mkimage 工具复制到/usr/bin 目录下去

2.6版本内核问题

1.该版本内核可以用3.x的交叉编译器,也可以用4.x的编译器来编译,但应用程序必须使用3.x的交叉编译器
2.在make menuconfig时会出现问题,需要去Makefile中改两行

//修改416行
config %config: scripts_basic outputmakefile FORCE  //修改前
%config: scripts_basic outputmakefile FORCE      //修改后
//修改1449行
/ %/: prepare scripts FORCE         //修改前
%/: prepare scripts FORCE		  //修改后

3.4版本内核问题

1.该版本内核只能由4.x的编译器来编译,同时应用程序也只能用3.x的交叉编译器来编译。
2.在使用ubuntu16.04编译Linux-3.4.2内核时出现这样的错误:

recipe for target 'kernel/timeconst.h' failed 

解决办法是:将kernel/timeconst.pl中第373行的defined()去掉,只留下 !@val 就可以了,去掉后如下:
在这里插入图片描述
3.直接用百文网给的源码和补丁编译好后上不了网,所以直接用给的uImage好了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值