Linux内核编译/启动

yuanheci 2024年12月01日 57次浏览

问题回顾:直接make menuconfig配置后编译报错sub-make error2问题。
实际上,我们需要先make架构对应的defconfig来生成.config,之后在用menuconfig来精细化控制(也可以不修改)。

image

包括之前做嵌入式ARM的内核编译时:
image-1733030856116
同样也是需要先make架构(这里是具体开发板)对应的defconfig。

编译配置相关
https://zhuanlan.zhihu.com/p/638443858

https://blog.csdn.net/xxxx123041/article/details/133905328

关键总结:
  图形化配置界面配置好了以后,会得到一个.config 配置文件。在编译内核的时候会根据这个.config 文件来编译内核。
  当我们使用 make menuconfig 的时候,会通过 mconf 程序去解析 Kconfig 文件,然后生成对应的配置文件.config。mconf 程序源码在内核源码 scripts/kconfig 目录下。有了.config 配置文件以后,内核就可以根据这个配置文件来编译内核,比如控制某些驱动编译进内核,或者控制某些驱动不编译内核。

  defconfig 文件和.config 文件都是 linux 内核的配置文件,defconfig 文件在内核源码的arch/(ARCH)/configs 目录下,是 Linux 系统默认的配置文件。比如说瑞芯微平台 Linux 源码默认的配置文件为:kernel/arch/arm64/configs/rockchip_linux_defconfig。
  .config 文件位于 Linux 内核源码的顶层目录下,编译 Linux 内核时会使用.config 文件里面的配置来编译内核镜像。
  如果.config 文件存在,make menuconfig 界面的默认配置也就是当前.config 文件的配置,如果修改了图形化配置界面的设置并保存,那么.config 文件会被更新。
  如果.config 文件不存在,使用命令“make XXX_defconfig”命令会根据 arch/$(ARCH)/configs目录下的 XXX_defconfig 自动生成.config。make menuconfig 界面的默认配置则为 defconfig 文件中的默认配置


三.Linux内核配置与编译

清理文件(在linux源码根目录):

  • make clean:只清理所有产生的文件

  • make mrproper:清理所有产生的文件与config配置文件

  • make distclean:清理所有产生的文件与config配置文件,并且编辑过的与补丁文件

配置(收集硬件信息如cpu型号,网卡等…):

  • make config:基于文本模式的交互配置

  • make menuconfig:基于文本模式的菜单模式(推荐使用)

  • make oldconfig:使用已有的.config,但会询问新增的配置项(可用于更换内核时使用)

  • make xconfig:图形化的配置(需要安装图形化系统)

配置方法:

1)使用make menuconfig操作方法:

1>按y:编译>连接>镜像文件

2>按m:编译

3>按n:什么都不做

4>按"空格键":y,n轮换

配置完并保存后会在linux源码根目录下生成一个.config文件

2)利用已有的配置文件模板(.config)

1>linux源码根目录/arch/<cpu架构>/configs/<具体某一的CPU文件>,把里面对应的文件copy并改名为.config至linux源码根目录下

2>利用当前运行已有的文件(要用ls /boot/ -a查看)把/boot/config-2.6.18-53.e15拷贝并改名为.config至linux源码根目录下,执行完以上操作就可以用make menuconfig在拷贝的.config文件上面进一步修改文件了。


initrd
  initrd(Initial RAM Disk):它是一个临时的根文件系统,在系统启动初期被加载到内存中。在早期的 Linux 系统启动过程中,内核在挂载真正的根文件系统之前,会先挂载 initrd。这是因为在某些情况下,内核可能没有足够的驱动程序来直接挂载最终的根文件系统。例如,当根文件系统位于一个需要特殊驱动才能访问的存储设备(如某些 RAID 阵列或者特殊的 SCSI 设备)上时,initrd 就可以提供这些必要的驱动程序。