加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • Linux内核裁剪步骤
    • xxxdeconfig、menuconfig、.config的关系
    • Uboot的修改裁剪及区别
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

嵌入式Linux内核和Uboot的裁剪方式和区别

2023/02/22
2461
阅读需 9 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

此处只记录大概的裁剪方式,不介绍具体的文件的修改。

Linux内核裁剪步骤

1 在makefile中修改ARCH 和 CROSS_COMPILE 这两个环境变量

ARCH ?= arm
CROSS_COMPILE ?= XXX(自己的交叉编译器)

2 在arch/arm/configs文件夹下找到配置文件xxxdeconfig,并可适当修改,在根目录下运行

make xxxdeconfig

3 在根目录下运行make menuconfig,如果在xxxdeconfig中新增了内容,需要修改Kconfig来匹配xxxdeconfig。

4 在根目录下运行make

这样就完成了对内核的编译。运行xxxdeconfig和menuconfig的过程中的修改就是一种裁剪。

xxxdeconfig、menuconfig、.config的关系

之前提到了运行xxxdeconfig、menuconfig。这俩啥关系呢。运行xxxdeconfig会产生一个.config文件,这里的.config文件最终会被变成头文件并被其他的函数使用。部分内容如下:

//举个例子
CONFIG_CREATE_ARCH_SYMLINK=y
# CONFIG_ARC is not set
CONFIG_ARM=y
# CONFIG_M68K is not set
# CONFIG_MICROBLAZE is not set
# CONFIG_MIPS is not set
# CONFIG_NDS32 is not set
# CONFIG_NIOS2 is not set
# CONFIG_PPC is not set
# CONFIG_SANDBOX is not set
# CONFIG_SH is not set
# CONFIG_X86 is not set
# CONFIG_XTENSA is not set
CONFIG_SYS_ARCH="arm"
CONFIG_SYS_CPU="armv7"
CONFIG_SYS_SOC="zynq"
。。。

相当于通过宏文件进行裁剪修改,可在此处添加或者删减相关内容。

menuconfig是对.config这个文件的继续补充,运行make menuconfig会产生一个图形画界面,它会先读取.config内容并图形化显示出来。然后通过操作图形化界面继续修改.config文件作为补充。

如果在xxxdeconfig中新增加了内容,为了使make menuconfig的图形化界面可以显示出来,需要修改Kconfig文件来匹配,Kconfig文件相当于menuconfig的后台文件。

如果编译运行后看不到.config文件可能是这个文件被隐藏了。按ctrl+h会显示隐藏文件,应该就能看到了。

Uboot的修改裁剪及区别

uboot的裁剪和内核基本没什么大的区别,就是一般要多一步(修改一个板级头文件)

1 在makefile中修改ARCH 和 CROSS_COMPILE 这两个环境变量

ARCH ?= arm
CROSS_COMPILE ?= XXX(自己的交叉编译器)

2 在arch/arm/configs文件夹下找到配置文件xxxdeconfig,并可适当修改,在根目录下运行

make xxxdeconfig

3 在根目录下运行make menuconfig,如果在xxxdeconfig中新增了内容,需要修改Kconfig来匹配xxxdeconfig。

4 修改板级头文件  XXX.h

5 在根目录下运行make

这样就完成了对内核的编译。运行xxxdeconfig和menuconfig的过程中的修改就是一种裁剪。

为什么要多这一修改头文件的步骤是因为程序会引用这个头文件,截取一段.config文件如下

...
CONFIG_SYS_VENDOR="xilinx"
CONFIG_SYS_BOARD="zynq"
CONFIG_SYS_CONFIG_NAME="zynq_zc70x"
...

这个zynq_zc70x.h就是要引用的头文件(一般在include文件夹下)。打开这个文件

...
#include <configs/zynq-common.h>
...

继续打开/zynq-common.h

#ifndef __CONFIG_ZYNQ_COMMON_H
#define __CONFIG_ZYNQ_COMMON_H

/* CPU clock */
#ifndef CONFIG_CPU_FREQ_HZ
# define CONFIG_CPU_FREQ_HZ 800000000
#endif

/* Cache options */
#define CONFIG_SYS_L2CACHE_OFF
#ifndef CONFIG_SYS_L2CACHE_OFF
# define CONFIG_SYS_L2_PL310
# define CONFIG_SYS_PL310_BASE 0xf8f02000
#endif

#define ZYNQ_SCUTIMER_BASEADDR 0xF8F00600
#define CONFIG_SYS_TIMERBASE ZYNQ_SCUTIMER_BASEADDR
#define CONFIG_SYS_TIMER_COUNTS_DOWN
#define CONFIG_SYS_TIMER_COUNTER (CONFIG_SYS_TIMERBASE + 0x4)

/* Serial drivers */
/* The following table includes the supported baudrates */
#define CONFIG_SYS_BAUDRATE_TABLE
{300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400}

#define CONFIG_ARM_DCC

/* Ethernet driver */
#if defined(CONFIG_ZYNQ_GEM)
# define CONFIG_MII
# define CONFIG_SYS_FAULT_ECHO_LINK_DOWN
# define CONFIG_BOOTP_BOOTPATH
# define CONFIG_BOOTP_GATEWAY
# define CONFIG_BOOTP_HOSTNAME
...

可以看到包含了很多参数,在这个文件中可以对相应的参数进行修改。

相关推荐

电子产业图谱