当前位置: 首页 > news >正文

linux驱动编程2 : uboot、Linux内核、rootfs来源及制作流程

目录

一、uboot

1.来源

2.学习

3.编译流程

4.uboot烧录

5. uboot内的文件

二、内核

1.来源

2.学习

3.内核编译流程

4. Linux内核内的文件

三、根文件系统的制作

1.概念

2.制作


一、uboot

1.来源

  1. 开源网站下载 uboot (2016/03版本): universal bootloader,可以支持不同硬件的启动
  2. NXP官方修改uboot(适配IMX6ULL平台)
  3. 正点原子修改uboot

2.学习

  1. uboot的编译
  2. uboot的使用(不涉及修改)
  3. 了解uboot功能:设置异常向量表,上电reset复位,关闭mmu关闭dcache,开启icache,初始化串口、初始化网口,学习uboot源代码(starts汇编代码),完成uboot的编译和适配
  4. 芯片原厂才开发uboot,否则都是学习使用

3.编译流程

将下载好的uboot源码复制到乌班图:

解压:

创建uboot目录,把上一步的文件移动进去

进入uboot目录,装uboot图形界面库(基于ncurses库编写的)

编译uboot源码(深度清理-使用正点原子默认.config-编译

结果

注意:.config也可自己去配(用户自己裁剪功能)

编译流程总结:

4.uboot烧录

Ubuntu下利用imxdownload完成u-boot.imx烧写
./imxdownload u-boot.bin /dev/sdd

5. uboot内的文件

名称

功能说明

api

提供U-Boot的应用程序接口,用于上层应用与U-Boot的交互。与架构无关

arch

体系架构相关代码,如ARM、x86等,包含CPU启动、初始化代码

board

不同开发板的具体支持代码,包含板级初始化和配置

cmd

存放U-Boot支持的命令源码,如bootmsetenv

common

通用功能代码,如命令行解析、环境变量处理等

disk

磁盘驱动相关代码,支持硬盘、U盘等存储设备

doc

文档文件,包含使用说明、开发指南等

drivers

设备驱动代码,如网卡、串口、LCD等驱动

dts

设备树源码,用于描述硬件配置和设备信息

examples

示例程序,展示如何使用U-Boot的API和功能

fs

文件系统支持,如FAT、EXT4、JFFS2等

include

头文件集合,包含全局定义、数据结构、函数声明等

lib

通用库函数,如字符串处理、数学运算、压缩解压等

licenses

许可证文件,包含U-Boot使用的开源许可证文本

net

网络协议栈实现,支持TFTP、NFS、Ping等网络功能

post

上电自检(POST)相关代码,用于硬件检测和诊断

scripts

构建和配置脚本,用于编译、打包、生成镜像等

test

测试代码,用于验证U-Boot功能和稳定性

tools

工具程序,如mkimage(生成U-Boot镜像)、env工具等

Kconfig

内核配置菜单的配置文件,用于make menuconfig生成配置界面

Kbuild

内核构建系统的Makefile片段,指导如何编译模块和代码

MAINTAINERS

维护者列表,记录各个模块的负责人和联系方式

MAKEALL

辅助构建脚本,用于一键编译多个目标平台

Makefile

顶层Makefile,控制整个U-Boot的编译过程

README

项目说明文件,包含简要介绍、构建步骤和注意事项

System.map

符号映射文件,记录编译后内核符号的地址信息(编译后生成)

build.sh

构建脚本,通常用于简化编译流程(可能为项目自定义)

config.mk

全局配置文件,定义编译选项、工具链路径等

configs

预置配置文件目录,包含不同开发板的默认配置文件(如mx6ull_14x14_evk_defconfig

snapshot.commit

快照提交记录,用于记录当前代码版本信息

u-boot

编译生成的ELF格式可执行文件,可直接调试或用于生成镜像

u-boot.bin

裸机二进制镜像,可直接烧写到Flash中运行

u-boot.cfg

配置文件,记录编译时的配置选项(编译后生成)

u-boot.img

打包后的U-Boot镜像,可能包含头部信息,用于特定启动方式(编译后生成)

u-boot.lds

链接脚本,控制代码和数据在内存中的布局

u-boot.map

链接映射文件,详细记录各个段和符号的地址分布(编译后生成)

二、内核

1.来源

  1. 官网下载内核

2.学习

  1. 内核的编译
  2. 内核的裁剪
  3. 了解内核功能

3.内核编译流程

官网下载内核(4.1.15版本)

下载内核源码

将内核源码复制到乌班图:

解压

深度清理

使用默认.config(它来自defconfig)

也可以手动增删config——>内核裁剪

编译

①下载软件,它负责对内核压缩

②编译

编译好的文件

由于我使用的是网络启动模式,所以将这两个文件复制到tstp文件夹

内核编译流程总结:

4. Linux内核内的文件

文件/文件夹名

类型

功能说明

arch

目录

体系结构相关代码,包含不同CPU架构的特定代码(如ARM、x86等)

block

目录

块设备层代码,管理磁盘等块设备的通用逻辑

COPYING

文件

内核许可证文件(通常是GPLv2)

CREDITS

文件

贡献者名单,记录对内核有贡献的人员信息

crypto

目录

加密算法实现,提供各种加密、哈希算法支持

Documentation

目录

内核文档,包含大量使用和开发文档

drivers

目录

设备驱动程序,包含各种硬件设备驱动(如USB、网络、显卡等)

firmware

目录

固件文件,包含某些设备需要的二进制固件

fs

目录

文件系统实现,支持ext4、FAT、NTFS等各种文件系统

include

目录

内核头文件,包含公共头文件和体系结构相关头文件

init

目录

内核初始化代码,包含main.c和启动初始化流程

ipc

目录

进程间通信实现,如信号量、共享内存、消息队列等

Kbuild

文件

内核构建系统的Makefile配置

Kconfig

文件

内核配置菜单的配置文件,用于make menuconfig

kernel

目录

内核核心代码,包含进程调度、定时器、中断处理等

lib

目录

内核库函数,提供通用数据结构、字符串处理、CRC校验等

MAINTAINERS

文件

维护者列表,记录各个子系统的维护者联系信息

Makefile

文件

顶层Makefile,控制整个内核的编译过程

mm

目录

内存管理代码,包含虚拟内存、物理内存、页表管理等

Module.symvers

文件

模块符号版本信息(编译后生成)

modules.builtin

文件

内置模块列表(编译后生成)

modules.order

文件

模块编译顺序(编译后生成)

mx6ull_14x14-evk_nand.sh

文件

针对i.MX6ULL开发板的NAND Flash编译脚本(项目特定)

mx6ull_allentek_emmc.sh

文件

针对i.MX6ULL开发板的eMMC编译脚本(项目特定)

mx6ull_allentek_nand.sh

文件

针对i.MX6ULL开发板的NAND Flash编译脚本(项目特定)

net

目录

网络协议栈实现,包含TCP/IP、网络设备驱动等

README

文件

内核简要说明和构建指导文档

REPORTING-BUGS

文件

报告bug的指南文档

samples

目录

示例代码,展示如何使用内核的各种特性

scripts

目录

构建和配置脚本,如配置内核、编译模块的工具

security

目录

安全模块,如SELinux、AppArmor等

sound

目录

音频子系统,包含声卡驱动和音频框架

System.map

文件

内核符号表,映射函数和变量的地址(编译后生成)

tools

目录

用户空间工具,包含性能分析、测试工具等

usr

目录

早期用户空间支持(initramfs相关)

virt

目录

虚拟化支持,如KVM虚拟化代码

vmlinux

文件

编译出的未压缩内核ELF文件(可执行文件)

vmlinux.dis

文件

反汇编文件,用于调试和分析(编译后生成)

linux.code-workspace

文件

VS Code工作区配置文件(项目特定,非内核标准文件)

三、根文件系统的制作

1.概念

根文件系统是Linux操作系统组成的基础,是内核启动时所要挂载的第一个文件系统,我们的一些配置文件、库函数、系统命令都保存在文件系统中,同时也可以通过文件系统实现用户与操作系统功能的交互。

2.制作

根文件系统的制作软件常见有如下3种:
软件特点
busybox易于构建简单的根文件系统,而且 文件系统占用空间小,但是需要自己配置库文件,易于理解移植过程。但是制作复杂
Buildroot自动化构建嵌入式Linux系统的工具,可生成交叉编译工具链、根文件系统、内核和引导程序,配置灵活,适合中小型项目。
Yocto

功能强大的嵌入式Linux构建框架,提供高度定制化、可重复构建的完整Linux发行版,支持多架构和复杂包管理,但学习曲线较陡。

http://www.jsqmd.com/news/638086/

相关文章:

  • Qwen3.5-2B目标检测新思路:辅助YOLOv5提升小目标识别精度
  • 【DAY38】ARM 架构嵌入式开发核心:最小系统设计、Linux 驱动与系统烧写要点总结
  • HEIF Utility:突破Windows平台HEIF格式兼容性壁垒的一站式解决方案
  • 从查重焦虑到降重自由:Paperxie,本科生论文通关的「隐形导师」
  • 保姆级教程:在Simulink里用Three-Phase Fault模块模拟VSG并网线路故障(含单相接地/两相短路)
  • Go语言的sync.Map原子操作与读复制更新在并发写少场景下的设计
  • AIVideo问题解决指南:部署配置、环境变量修改常见问题汇总
  • Llama Factory部署教程:简单几步搭建大模型微调环境
  • 让能源生产融入日常风景——零碳园区光伏+智慧设施集成应用
  • 行为发生的完整机制与统一公式(新版稿2026年4月1)
  • YOLOv11改进:检测头篇 | 红外小目标 | CAMixing + P2头:卷积-注意融合模块和多尺度提取能力
  • VMagicMirror终极指南:5步打造你的虚拟形象直播助手
  • python netCDF4
  • B站缓存视频解锁指南:3步将m4s转换为通用MP4格式
  • CoPaw创意图像描述生成:从抽象概念到具体画面的效果展示
  • 下一代防火墙通用原理
  • SpringBoot微服务集成Phi-4-mini-reasoning指南:构建智能业务逻辑层
  • AI智能体视觉检测系统(TVA)工作原理系列(十六)
  • AI Agent 要抢测试工程师的饭碗了?我测了一下,结论出乎意料
  • NaViT实战:如何用Patch n‘ Pack技术处理任意分辨率图像(附代码示例)
  • Qwen3-VL-8B应用案例:智能客服看图答疑,秒回用户问题
  • python rasterio
  • 5步部署Qwen3-Reranker-0.6B:ARM服务器完整操作流程
  • 可微分物理引擎赋能AI动画
  • python shapely
  • AI智能体视觉检测系统(TVA)工作原理系列(十七)
  • Graphormer模型持续集成与持续部署(CI/CD)流水线搭建
  • cv_unet_image-colorization一文详解:ModelScope Pipeline集成与缓存优化
  • 忽视防雷器安装:潜藏的致命风险与安全隐患
  • 【Proteus仿真Arduino实战】LM35温度传感与串口数据可视化