imx6ull-系统移植篇16——Linux 工程目录分析

目录

前言

Linux 内核初次编译

Linux 工程目录分析

目录总览

关键分析

核心构建文件​

架构与子系统代码

构建生成文件

工具与辅助文件

注意事项

.config 文件


前言

在本讲内容之前,我们一共15篇博客来讲解了如何移植 uboot 到 I.MX6U-ALPHA 开发板上,从本讲内容开始,我们学习如何移植 Linux 内核。

Linux 内核初次编译

编译内核之前需要先在 ubuntu 上安装 lzop 库,命令如下:

sudo apt-get install lzop

我使用的正点原子开发板,将官方提供的linux压缩包发送到虚拟机里,解压:

tar -vxjf linux-imx-4.1.15-2.1.0-g3dc0a4b-v2.7.tar.bz2

解压完成的结果如图:

新建名为“mx6ull_alientek_emmc.sh”的 shell 脚本,然后在这个 shell 脚本里面输入如下所示内容:

#!/bin/sh
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16
  • 执行“make distclean”,清理工程,所以 mx6ull_alientek_emmc.sh 每次都会清理一下工程。如果通过图形界面配置了 Linux,但是还没保存新的配置文件,那么就要慎重使用这个编译脚本了,因为它会把你的配置信息都删除掉。
  • 执行“make xxx_defconfig”,配置工程。
  • 执行“make menuconfig”,打开图形配置界面,对 Linux 进行配置,如果不想每次编译都打开图形配置界面的话可以将这一行删除掉。
  • 执行“make”,编译 Linux 源码。

可以看出, Linux 的编译过程基本和 uboot 一样,都要先执行“make xxx_defconfig”来配置一下,然后在执行“make”进行编译。如果需要使用图形界面配置的话就执行“make menuconfig”。

使用 chmod 给予 mx6ull_alientek_emmc.sh 可执行权限,然后运行此 shell 脚本,命令如下:

./mx6ull_alientek_emmc.sh

编译的时候会弹出 Linux 图形配置界面,如图:

直接按两下 ESC键退出,退出图形界面以后会自动开始编译 Linux。等待编译完成,完成以后如图:

编译完成以后就会在 arch/arm/boot 这个目录下生成一个叫做 zImage 的文件, zImage 就是我们要用的 Linux 镜像文件。

另外也会在 arch/arm/boot/dts 下生成很多.dtb 文件,这些.dtb 就是设备树文件。

Linux 工程目录分析

我们在分析 Linux 之前一定要先在 Ubuntu 中编译一下 Linux,因为编译过程会生成一些文件,而生成的这些恰恰是分析Linux 不可或缺的文件。编译后的目录结果如图:

编译完成以后使用 tar 压缩命令对其进行压缩并使用 Filezilla 软件将压缩后的 uboot 源码拷贝到 Windows 下。

目录总览

其中,重要的文件夹或文件的含义见表:

关键分析

核心构建文件​

文件/文件夹

作用说明

.config

​当前内核配置​​:包含所有make menuconfig选择的配置选项(如驱动、特性开关)

Makefile

​顶层构建控制​​:定义编译规则、目标架构、编译器参数等全局设置

Kbuild/Kconfig

​模块构建配置​​:控制内核模块的编译行为和各子系统的配置选项

vmlinux

​原始内核镜像​​:未压缩的ELF格式可执行文件,包含所有符号和调试信息

System.map

​内核符号表​​:记录所有函数和变量的内存地址,用于调试和内核Oops分析

架构与子系统代码

目录

关键内容

arch/

​CPU架构代码​​:如arch/arm/(ARM)、arch/x86/(x86)的底层实现

kernel/

​核心子系统​​:进程调度、定时器、信号处理等基础机制

mm/

​内存管理​​:虚拟内存、页表、SLAB分配器等实现

drivers/

​设备驱动​​:按类型分类(如drivers/net/网络驱动)

fs/

​文件系统​​:Ext4/Btrfs等文件系统的实现代码

net/

​网络协议栈​​:TCP/IP、套接字、网络设备驱动等

构建生成文件

文件/文件夹

作用说明

.tmp_*

​临时文件​​:编译过程中生成的中间文件(如.tmp_vmlinux

Module.symvers

​模块符号表​​:记录内核模块的导出符号,用于模块间依赖解析

modules.order

​模块编译顺序​​:控制内核模块的构建顺序

modules.builtin

​内置模块列表​​:标记哪些模块被直接编译进内核(而非动态加载)

工具与辅助文件

目录/文件

作用说明

scripts/

​构建脚本​​:包含menuconfig配置工具、内核模块处理脚本等

tools/

​开发工具​​:perf调试工具、BPF编译器、内核自测试工具等

Documentation/

​内核文档​​:API说明、驱动开发指南、特性文档(实际需手动生成HTML/PDF)

许可证与维护信息

文件

作用说明

COPYING

​许可证文本​​:通常为GPL-2.0协议全文

CREDITS

​贡献者名单​​:记录对内核有重大贡献的开发者和组织

MAINTAINERS

​维护者列表​​:注明各子系统的维护者及邮件列表

README

​项目概述​​:简要说明如何编译和安装内核

特殊用途文件​

文件/文件夹

作用说明

firmware/

​设备固件​​:部分硬件驱动需加载的二进制固件(如WiFi芯片固件)

usr/

​用户空间工具​​:如gen_init_cpio(生成initramfs的工具)

.vscode/

​IDE配置​​:VS Code编辑器的项目设置(非内核原生,由开发者添加)

关键文件关系图​:

注意事项

arch/arm/configs 中就包含有 I.MX6U-ALPHA 开发板的默认配置文件: imx_v7_defconfig,执行“make imx_v7_defconfig”即可完成配置。

arch/arm/boot/dts 目录里面是对应开发平台的设备树文件,正点原子 I.MX6U-ALPHA 开发板对应的设备树文件如图:

arch/arm/boot 目录下会保存编译出来的 Image 和 zImage 镜像文件,而 zImage 就是我们要用的 linux 镜像文件。

arch/arm/mach-xxx 目录分别为相应平台的驱动和初始化文件,比如 mach-imx 目录里面就是 I.MX 系列 CPU 的驱动和初始化文件。

.config 文件

跟 uboot 一样, .config 保存着 Linux 最终的配置信息,编译 Linux 的时候会读取此文件中的配置信息。最终根据配置信息来选择编译 Linux 哪些模块,哪些功能。

下一讲内容我们来分析一下 Linux 的顶层 Makefile。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值