Elfboard-ELF开发板 Linux学习笔记(十)—— Linux源码介绍
一、Linux源码分类
- Linux开源社区源码
- 芯片原厂的Linux源码-NXP等
- 板卡厂商的Linux源码:由芯片原厂的Linux源码修改而来,以适配板卡的硬件。
二、下载linux内核源码
- 第一种:官网获取:https://mirrors.edge.kernel.org/pub/linux/kernel/
- 第二种:NXP 的仓库:https://github.com/nxp-imx/linux-imx
- 第三种:ELF1 开发板资料包\02-Linux 源代码\02-0 出厂内核和 uboot 源码\内核源码\linux-4.1.15-elf1.tar.bz2
三、内核源码目录结构分析
顶层目录
- include:内核的头文件
- arch:体系结构相关的代码
- block:块设备驱动程序代码
- crypto:加密算法相关的代码
- common:公共的代码
- drivers:设备驱动程序
- init:初始化代码
- fs:文件系统
- ipc:进程间通信
- kernel:内核核心代码
- lib:内核的库
- mm:内存管理
- net:网络协议栈
- scripts:脚本
- tools:工具
- Documentation:文档
- usr:用户空间代码
- virtual:虚拟化相关代码
四、内核源码编译
注意
1.初次解压源码后,需要先配置一下,然后对整体进行编译。
2.整体编译之后,可根据实际情况再进行单独编译。
- 1.解压源码
tar -xvf linux-4.1.15-elf1.tar.bz2
- 2.编写编译脚本
#!/bin/bash
#设置CPU
export CPUS=`grep -c processor /proc/cpuinfo`
#设置编译环境
source /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
#清理编译文件
make distclean
#配置编译对象
make imx6ull_elf1_defconfig
make -j${CPUS}
rm -rf ./.tmp
make modules_install INSTALL_MOD_PATH=./.tmp/rootfs/
cd .tmp/rootfs/
tar -jcvf modules.tar.bz2 *
- 3.执行编译脚本
chmod +x build.sh //更改文件权限
./build.sh //整体编译
编译完成之后,会在 arch/arm/boot/目录下生成 zImge 文件,就是内核镜像文件;在 arch/arm/boot/dts/下生成多个.dtb 设备树二进制文件;以及在某些驱动目录下生成.ko 模块。编译完成后,生成的文件以及路径参考 6.3.2 节。
五、编译后文件分析
- 1.编译后生成的文件
vmlinux:内核原始 elf 格式镜像, 其中包含了可执行的二进制指令,调试信息,符号表等内容
System.map:内核符号表,包含了内核中各个符号(函数、变量等)的地址
Image:内核映像文件,包含了内核原始 bin 格式镜像
zImage:内核映像文件,包含了经压缩和添加头信息后的 bin 镜像
.dtb:设备树二进制文件
我们所关注的最终需要烧写到开发板的是.dtb 设备树镜像和 zImage 内核镜像。
dtb 文件是设备树二进制文件,它是由设备树编译工具 DTC (Device tree compiler)编译 dts 文件而生成的。